![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ft. button press reset
Fork of BeaconDemo_RobotCode by
PsiSwarm/eprom.cpp
- Committer:
- jhok500
- Date:
- 2017-03-13
- Revision:
- 23:fd0f0931768a
- Parent:
- 6:ff3c66f7372b
File content as of revision 23:fd0f0931768a:
/** University of York Robotics Laboratory PsiSwarm Library: Eprom Functions Source File * * File: eprom.cpp * * (C) Dept. Electronics & Computer Science, University of York * James Hilder, Alan Millard, Homero Elizondo, Jon Timmis * * PsiSwarm Library Version: 0.3, October 2015 * * Functions for accessing the 64Kb EPROM chip and reading the reserved firmware block * * Example: * @code * #include "psiswarm.h" * * int main() { * init(); * write_eeprom_byte(0,0xDD); //Writes byte 0xDD in EPROM address 0 * char c = read_eeprom_byte(0); //c will hold 0xDD * //Valid address range is from 0 to 65279 * } * @endcode */ #include "psiswarm.h" /** Write a single byte to the EPROM * * @param address The address to store the data, range 0-65279 * @param data The character to store */ void write_eeprom_byte ( int address, char data ) { char write_array[3]; if(address > 65279) { debug("WARNING: Attempt to write to invalid EPROM address: %X",address); } else { write_array[0] = address / 256; write_array[1] = address % 256; write_array[2] = data; primary_i2c.write(EEPROM_ADDRESS, write_array, 3, false); //Takes 5ms to write a page: ideally this could be done with a timer or RTOS wait(0.005); } } /** Read a single byte from the EPROM * * @param address The address to read from, range 0-65279 * @return The character stored at address */ char read_eeprom_byte ( int address ) { char address_array [2]; address_array[0] = address / 256; address_array[1] = address % 256; char data [1]; primary_i2c.write(EEPROM_ADDRESS, address_array, 2, false); primary_i2c.read(EEPROM_ADDRESS, data, 1, false); return data [0]; } /** Read the next byte from the EPROM, to be called after read_eeprom_byte * * @return The character stored at address after the previous one read from */ char read_next_eeprom_byte () { char data [1]; primary_i2c.read(EEPROM_ADDRESS, data, 1, false); return data [0]; } /** Read the data stored in the reserved firmware area of the EPROM * * @return 1 if a valid firmware is read, 0 otherwise */ char read_firmware () { char address_array [2] = {255,0}; primary_i2c.write(EEPROM_ADDRESS, address_array, 2, false); primary_i2c.read(EEPROM_ADDRESS, firmware_bytes, 21, false); if(firmware_bytes[0] == PSI_BYTE) { // Parse firmware char firmware_string [8]; sprintf(firmware_string,"%d.%d",firmware_bytes[9],firmware_bytes[10]); firmware_version = atof(firmware_string); return 1; } return 0; }