Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: PsiSwarm_V8_Blank_CPP Autonomia_RndmWlk
Fork of PsiSwarmV7_CPP by
eprom.cpp
- Committer:
- jah128
- Date:
- 2016-02-04
- Revision:
- 0:d6269d17c8cf
- Child:
- 1:060690a934a9
File content as of revision 0:d6269d17c8cf:
/** 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, Alexander Horsfield, Homero Elizondo, Jon Timmis
*
* PsiSwarm Library Version: 0.4
*
* February 2016
*
* 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;
}
