I2C Slave device. Mimics the 24LC256 in a very limited way (no addressing)

Dependencies:   mbed

Fork of I2CSlave by phil dani

Committer:
bridadan
Date:
Wed Mar 25 19:53:10 2015 +0000
Revision:
4:d1d5a02cc721
Parent:
3:1bb80997f316
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bridadan 4:d1d5a02cc721 1 // 24LC256 I2C EEPROM mock device
bridadan 4:d1d5a02cc721 2 // Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/20001203U.pdf
bridadan 4:d1d5a02cc721 3
Kit1 2:42d461c96301 4 #include <mbed.h>
bridadan 4:d1d5a02cc721 5
bridadan 4:d1d5a02cc721 6 #define BUFF_SIZE 10
bridadan 4:d1d5a02cc721 7
bridadan 4:d1d5a02cc721 8 I2CSlave slave(p28, p27);
Kit1 2:42d461c96301 9
Kit1 2:42d461c96301 10 int main() {
bridadan 4:d1d5a02cc721 11 char buf[BUFF_SIZE]; // Only up to 10 bytes (8 bytes max sequential write)
bridadan 4:d1d5a02cc721 12 slave.frequency(400000);
bridadan 4:d1d5a02cc721 13 slave.address(0xA0);
bridadan 4:d1d5a02cc721 14
bridadan 4:d1d5a02cc721 15 printf("Starting on address 0xA0\r\n");
bridadan 4:d1d5a02cc721 16
bridadan 4:d1d5a02cc721 17 while (1) {
bridadan 4:d1d5a02cc721 18 int i = slave.receive();
bridadan 4:d1d5a02cc721 19 switch (i) {
bridadan 4:d1d5a02cc721 20 case I2CSlave::ReadAddressed:
bridadan 4:d1d5a02cc721 21 slave.write(buf + 2, 8); // buf[0 - 1] are just the address bytes (ignoring them)
bridadan 4:d1d5a02cc721 22 break;
bridadan 4:d1d5a02cc721 23
bridadan 4:d1d5a02cc721 24 case I2CSlave::WriteGeneral:
bridadan 4:d1d5a02cc721 25 slave.read(buf, BUFF_SIZE);
bridadan 4:d1d5a02cc721 26 break;
bridadan 4:d1d5a02cc721 27
bridadan 4:d1d5a02cc721 28 case I2CSlave::WriteAddressed:
bridadan 4:d1d5a02cc721 29 slave.read(buf, BUFF_SIZE);
bridadan 4:d1d5a02cc721 30 break;
Kit1 2:42d461c96301 31 }
bridadan 4:d1d5a02cc721 32 }
Kit1 2:42d461c96301 33 }