Step-by step introduction to I2C EEPROM
Dependencies: mbed
main.cpp@2:41fccbb2e863, 2016-01-12 (annotated)
- Committer:
- kaliczp
- Date:
- Tue Jan 12 22:18:21 2016 +0000
- Revision:
- 2:41fccbb2e863
- Parent:
- 1:c1f476b94bb3
- Child:
- 3:58bd0878bb0f
Write the first byte and read back immediately
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaliczp | 0:f7bdc8dfa76d | 1 | /*** |
kaliczp | 0:f7bdc8dfa76d | 2 | **** ST M24512 512-Kbit I2C EEPROM |
kaliczp | 0:f7bdc8dfa76d | 3 | **** E0-E2 pulled low |
kaliczp | 0:f7bdc8dfa76d | 4 | **** 10k pull up resistors on SDA and SCL lines |
kaliczp | 0:f7bdc8dfa76d | 5 | ***/ |
kaliczp | 0:f7bdc8dfa76d | 6 | #include "mbed.h" |
kaliczp | 0:f7bdc8dfa76d | 7 | |
kaliczp | 0:f7bdc8dfa76d | 8 | #define EEPROM_ADDR (0b10100000) // EEPROM address |
kaliczp | 0:f7bdc8dfa76d | 9 | |
kaliczp | 0:f7bdc8dfa76d | 10 | I2C i2c(I2C_SDA, I2C_SCL); |
kaliczp | 1:c1f476b94bb3 | 11 | DigitalIn mybutton(USER_BUTTON); // Activate button |
kaliczp | 1:c1f476b94bb3 | 12 | Serial pc(SERIAL_TX, SERIAL_RX); // Initialize UART connection |
kaliczp | 1:c1f476b94bb3 | 13 | // Use a terminal program (eg. putty)! |
kaliczp | 0:f7bdc8dfa76d | 14 | |
kaliczp | 0:f7bdc8dfa76d | 15 | int main() |
kaliczp | 0:f7bdc8dfa76d | 16 | { |
kaliczp | 2:41fccbb2e863 | 17 | pc.printf("Read data from EEPROM sequentially\r\n"); |
kaliczp | 0:f7bdc8dfa76d | 18 | char data[1]; |
kaliczp | 2:41fccbb2e863 | 19 | char data_write[3]; //Array for address and data |
kaliczp | 2:41fccbb2e863 | 20 | // Type in address |
kaliczp | 2:41fccbb2e863 | 21 | data_write[0] = 0; |
kaliczp | 2:41fccbb2e863 | 22 | data_write[1] = 0; |
kaliczp | 2:41fccbb2e863 | 23 | // Type data |
kaliczp | 2:41fccbb2e863 | 24 | data_write[2] = 1; |
kaliczp | 2:41fccbb2e863 | 25 | i2c.write(EEPROM_ADDR, data_write, 3); |
kaliczp | 2:41fccbb2e863 | 26 | wait_ms(6); // Wait eeprom internal write cycle (5ms) + 1ms |
kaliczp | 2:41fccbb2e863 | 27 | // Reset eeprom pointer address |
kaliczp | 2:41fccbb2e863 | 28 | char eeprom_address[2] = {0, 0}; |
kaliczp | 2:41fccbb2e863 | 29 | i2c.write(EEPROM_ADDR, eeprom_address, 2, true); |
kaliczp | 2:41fccbb2e863 | 30 | i2c.read(EEPROM_ADDR, data, 1, false); |
kaliczp | 2:41fccbb2e863 | 31 | pc.printf("Written data: %d\n\r",data[0]); |
kaliczp | 2:41fccbb2e863 | 32 | |
kaliczp | 0:f7bdc8dfa76d | 33 | while (1) { |
kaliczp | 1:c1f476b94bb3 | 34 | if (mybutton == 0) { // Button is pressed |
kaliczp | 1:c1f476b94bb3 | 35 | i2c.read(EEPROM_ADDR, data, 1); |
kaliczp | 1:c1f476b94bb3 | 36 | pc.printf("%d\n\r",data[0]); |
kaliczp | 1:c1f476b94bb3 | 37 | wait_ms(500); |
kaliczp | 1:c1f476b94bb3 | 38 | } |
kaliczp | 0:f7bdc8dfa76d | 39 | } |
kaliczp | 0:f7bdc8dfa76d | 40 | |
kaliczp | 0:f7bdc8dfa76d | 41 | } |