R/W function for 24LC256 EEPROM
Fork of Nucleo F030R8 24LC256 EEPROM I2C by
main.cpp@1:0aa405151a74, 2016-12-20 (annotated)
- Committer:
- andcor02
- Date:
- Tue Dec 20 14:25:12 2016 +0000
- Revision:
- 1:0aa405151a74
- Parent:
- 0:34c4fa6b49ac
Library to R/W for 24LC256 EEPROM;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adamumpsimus | 0:34c4fa6b49ac | 1 | #include "mbed.h" |
adamumpsimus | 0:34c4fa6b49ac | 2 | |
andcor02 | 1:0aa405151a74 | 3 | I2C i2c(PTE25, PTE24); |
andcor02 | 1:0aa405151a74 | 4 | Serial pc(USBTX, USBRX); |
andcor02 | 1:0aa405151a74 | 5 | int address = 0xA2; |
andcor02 | 1:0aa405151a74 | 6 | int pointerAdddress = 0; |
andcor02 | 1:0aa405151a74 | 7 | char s[64]; |
andcor02 | 1:0aa405151a74 | 8 | |
adamumpsimus | 0:34c4fa6b49ac | 9 | // function declaration |
adamumpsimus | 0:34c4fa6b49ac | 10 | void writeEEPROM(int address, unsigned int eeaddress, char *data, int size); |
adamumpsimus | 0:34c4fa6b49ac | 11 | void readEEPROM(int address, unsigned int eeaddress, char *data, int size); |
adamumpsimus | 0:34c4fa6b49ac | 12 | |
adamumpsimus | 0:34c4fa6b49ac | 13 | // this function has 63 bytes write limit |
adamumpsimus | 0:34c4fa6b49ac | 14 | void writeEEPROM(int address, unsigned int eeaddress, char *data, int size) |
adamumpsimus | 0:34c4fa6b49ac | 15 | { |
adamumpsimus | 0:34c4fa6b49ac | 16 | char i2cBuffer[size + 2]; |
adamumpsimus | 0:34c4fa6b49ac | 17 | i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB |
adamumpsimus | 0:34c4fa6b49ac | 18 | i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB |
adamumpsimus | 0:34c4fa6b49ac | 19 | |
adamumpsimus | 0:34c4fa6b49ac | 20 | for (int i = 0; i < size; i++) { |
adamumpsimus | 0:34c4fa6b49ac | 21 | i2cBuffer[i + 2] = data[i]; |
adamumpsimus | 0:34c4fa6b49ac | 22 | } |
adamumpsimus | 0:34c4fa6b49ac | 23 | |
adamumpsimus | 0:34c4fa6b49ac | 24 | int result = i2c.write(address, i2cBuffer, size + 2, false); |
adamumpsimus | 0:34c4fa6b49ac | 25 | wait_ms(6); |
adamumpsimus | 0:34c4fa6b49ac | 26 | } |
adamumpsimus | 0:34c4fa6b49ac | 27 | |
adamumpsimus | 0:34c4fa6b49ac | 28 | // this function has no read limit |
adamumpsimus | 0:34c4fa6b49ac | 29 | void readEEPROM(int address, unsigned int eeaddress, char *data, int size) |
adamumpsimus | 0:34c4fa6b49ac | 30 | { |
adamumpsimus | 0:34c4fa6b49ac | 31 | char i2cBuffer[2]; |
adamumpsimus | 0:34c4fa6b49ac | 32 | i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB |
adamumpsimus | 0:34c4fa6b49ac | 33 | i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB |
adamumpsimus | 0:34c4fa6b49ac | 34 | |
adamumpsimus | 0:34c4fa6b49ac | 35 | // Reset eeprom pointer address |
adamumpsimus | 0:34c4fa6b49ac | 36 | int result = i2c.write(address, i2cBuffer, 2, false); |
adamumpsimus | 0:34c4fa6b49ac | 37 | wait_ms(6); |
adamumpsimus | 0:34c4fa6b49ac | 38 | |
adamumpsimus | 0:34c4fa6b49ac | 39 | // Read eeprom |
adamumpsimus | 0:34c4fa6b49ac | 40 | i2c.read(address, data, size); |
adamumpsimus | 0:34c4fa6b49ac | 41 | wait_ms(6); |
andcor02 | 1:0aa405151a74 | 42 | } |
andcor02 | 1:0aa405151a74 | 43 | |
andcor02 | 1:0aa405151a74 | 44 | int main() |
andcor02 | 1:0aa405151a74 | 45 | { |
andcor02 | 1:0aa405151a74 | 46 | char data_read[64]; |
andcor02 | 1:0aa405151a74 | 47 | readEEPROM(address, pointerAdddress, data_read, 64); |
andcor02 | 1:0aa405151a74 | 48 | pc.printf("Previous data stored: %s\n", data_read); |
andcor02 | 1:0aa405151a74 | 49 | while(1){ |
andcor02 | 1:0aa405151a74 | 50 | |
andcor02 | 1:0aa405151a74 | 51 | pc.gets(s,64); |
andcor02 | 1:0aa405151a74 | 52 | char writeDataLen = 0; |
andcor02 | 1:0aa405151a74 | 53 | do {writeDataLen++;} while (s[writeDataLen]); // calculate the text length |
andcor02 | 1:0aa405151a74 | 54 | |
andcor02 | 1:0aa405151a74 | 55 | writeEEPROM(address, pointerAdddress, s, writeDataLen); |
andcor02 | 1:0aa405151a74 | 56 | pc.printf("Data written: %s\n", s); |
andcor02 | 1:0aa405151a74 | 57 | |
andcor02 | 1:0aa405151a74 | 58 | // read the data back |
andcor02 | 1:0aa405151a74 | 59 | char data_read[writeDataLen]; |
andcor02 | 1:0aa405151a74 | 60 | readEEPROM(address, pointerAdddress, data_read, writeDataLen); |
andcor02 | 1:0aa405151a74 | 61 | pc.printf("Data read: %s\n", data_read); |
andcor02 | 1:0aa405151a74 | 62 | } |
andcor02 | 1:0aa405151a74 | 63 | |
andcor02 | 1:0aa405151a74 | 64 | } |
andcor02 | 1:0aa405151a74 | 65 | |
andcor02 | 1:0aa405151a74 | 66 | |
andcor02 | 1:0aa405151a74 | 67 | |
andcor02 | 1:0aa405151a74 | 68 | |
andcor02 | 1:0aa405151a74 | 69 | |
andcor02 | 1:0aa405151a74 | 70 | |
andcor02 | 1:0aa405151a74 | 71 | |
andcor02 | 1:0aa405151a74 | 72 |