/* * spieeprom.cpp - library for SPI EEPROM IC's * https://bitbucket.org/trunet/spieeprom/ * * This library is based on code by Heather Dewey-Hagborg * available on http://www.arduino.cc/en/Tutorial/SPIEEPROM * * by Wagner Sartori Junior */ //#include #include "spieeprom.h" #include SPIEEPROM::SPIEEPROM() { eeprom_type = 0; address = 0; } SPIEEPROM::SPIEEPROM(byte type) { if (type>1) { eeprom_type = 0; } else { eeprom_type = type; } address = 0; } void SPIEEPROM::setup() { pinMode(SLAVESELECT, OUTPUT); SPI.begin(); } void SPIEEPROM::send_address(long addr) { if (eeprom_type == 1) { SPI.transfer((byte)(addr>>16)); } SPI.transfer((byte)(addr>>8)); SPI.transfer((byte)(addr)); } void SPIEEPROM::start_write() { digitalWrite(SLAVESELECT,LOW); SPI.transfer(WREN); //send WREN command digitalWrite(SLAVESELECT,HIGH); digitalWrite(SLAVESELECT,LOW); SPI.transfer(WRITE); //send WRITE command } bool SPIEEPROM::isWIP() { byte data; digitalWrite(SLAVESELECT,LOW); SPI.transfer(RDSR); // send RDSR command data = SPI.transfer(0xFF); //get data byte digitalWrite(SLAVESELECT,HIGH); return (data & (1 << 0)); } void SPIEEPROM::write(long addr, byte data) { start_write(); send_address(addr); // send address SPI.transfer(data); // transfer data digitalWrite(SLAVESELECT,HIGH); while (isWIP()) { delay(1); } } void SPIEEPROM::write(long addr, byte data[], int arrLength) { start_write(); send_address(addr); // send address for (int i=0;i