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

Dependencies:   mbed

Fork of I2CSlave by phil dani

Files at this revision

API Documentation at this revision

Comitter:
bridadan
Date:
Wed Mar 25 19:53:10 2015 +0000
Parent:
3:1bb80997f316
Commit message:
Initial commit

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Aug 29 15:01:15 2013 +0000
+++ b/main.cpp	Wed Mar 25 19:53:10 2015 +0000
@@ -1,41 +1,33 @@
-/*Program Example 7.6: I2C Slave, when called transfers switch state to mbed acting as Master, and
-displays state of Master’ s switches on its leds.
-*/
+// 24LC256 I2C EEPROM mock device
+// Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/20001203U.pdf
+
 #include <mbed.h>
-I2CSlave slave(p28, p27); //Configure I2C slave
-DigitalOut red_led(LED1); //red led
-DigitalOut green_led(LED2); //green led
-DigitalIn switch_ip1(p5);
-DigitalIn switch_ip2(p6);
-char switch_word ; //word we will send
-char recd_val; //value received from master
+
+#define BUFF_SIZE   10
+
+I2CSlave slave(p28, p27);
 
 int main() {
-    slave.address(0x52);
-        while (1) {
-            //set up switch_word from switches that are pressed
-            switch_word=0xa0; //set up a recognizable output pattern
-            if (switch_ip1==1)
-            switch_word=switch_word|0x01;
-            if (switch_ip2==1)
-            switch_word=switch_word|0x02;
-            slave.write(switch_word); //load up word to send
-            //test for I2C, and act accordingly
-            int i = slave.receive();
-            if (i == 3){ //slave is addressed, Master will write
-            recd_val= slave.read();
-            //now set leds according to received word
-            red_led=0; //preset both to 0
-            green_led=0;            
-            recd_val=recd_val&0x03; //AND out unwanted bits
-            if (recd_val==1)
-                red_led=1;
-            if (recd_val==2)
-                green_led=1;
-            if (recd_val==3){
-                red_led=1;
-                green_led=1;
-            }
-            }
+    char buf[BUFF_SIZE];               // Only up to 10 bytes (8 bytes max sequential write)
+    slave.frequency(400000);
+    slave.address(0xA0);
+    
+    printf("Starting on address 0xA0\r\n");
+    
+    while (1) {
+        int i = slave.receive();
+        switch (i) {
+            case I2CSlave::ReadAddressed:
+                slave.write(buf + 2, 8); // buf[0 - 1] are just the address bytes (ignoring them)
+            break;
+            
+            case I2CSlave::WriteGeneral:
+                slave.read(buf, BUFF_SIZE);
+            break;
+            
+            case I2CSlave::WriteAddressed:
+                slave.read(buf, BUFF_SIZE);
+            break;
         }
+    }
 }
\ No newline at end of file
--- a/mbed.bld	Thu Aug 29 15:01:15 2013 +0000
+++ b/mbed.bld	Wed Mar 25 19:53:10 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/9c8f0e3462fb
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/7e07b6fb45cf
\ No newline at end of file