I2CSlave test program. I2CSlave library has some improper behavior, so this program is able to watch that. The workaround for this behavior, only for NXP device, is wrote in 'I2CSlave_mod_NXP.cpp'.

Dependencies:   mbed

First, write this program to the microcontroller which you want to check. Second, send I2C data to the microcontroller from the other one. Anything is enough for the transmission data, but the data length is made 8, 9, 10 and 11 bytes and confirm each reply.

Committer:
oks486
Date:
Fri Apr 15 08:16:34 2016 +0000
Revision:
1:bd94bb3170b6
Parent:
0:7b78d1eee006
Added workaround for NXP device (confirmed only LPC1114)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oks486 0:7b78d1eee006 1 #include "mbed.h"
oks486 0:7b78d1eee006 2
oks486 1:bd94bb3170b6 3 //#define I2C_SLAVE_MOD
oks486 1:bd94bb3170b6 4
oks486 1:bd94bb3170b6 5 #ifdef I2C_SLAVE_MOD
oks486 1:bd94bb3170b6 6 #include "I2CSlave_mod_NXP.h"
oks486 1:bd94bb3170b6 7 I2CSlave_mod slave(dp5, dp27); // sda, scl
oks486 1:bd94bb3170b6 8 #else
oks486 0:7b78d1eee006 9 I2CSlave slave(dp5, dp27); // sda, scl
oks486 1:bd94bb3170b6 10 #endif
oks486 1:bd94bb3170b6 11
oks486 0:7b78d1eee006 12 Serial serial(dp16, dp15); // tx, rx
oks486 0:7b78d1eee006 13 DigitalOut led(LED1); // indicator
oks486 0:7b78d1eee006 14
oks486 0:7b78d1eee006 15 int main() {
oks486 0:7b78d1eee006 16 led = 0;
oks486 0:7b78d1eee006 17 serial.baud(115200);
oks486 0:7b78d1eee006 18
oks486 0:7b78d1eee006 19 char buf[10];
oks486 0:7b78d1eee006 20 slave.address(0x80);
oks486 0:7b78d1eee006 21
oks486 0:7b78d1eee006 22 while(1) {
oks486 0:7b78d1eee006 23 int i = slave.receive();
oks486 0:7b78d1eee006 24 switch (i) {
oks486 0:7b78d1eee006 25 case I2CSlave::ReadAddressed:
oks486 0:7b78d1eee006 26 //slave.write(msg, strlen(msg) + 1); // Includes null char
oks486 0:7b78d1eee006 27 led = 0;
oks486 0:7b78d1eee006 28 break;
oks486 0:7b78d1eee006 29 case I2CSlave::WriteGeneral:
oks486 0:7b78d1eee006 30 //slave.read(buf, 10);
oks486 0:7b78d1eee006 31 //printf("Read G: %s\n", buf);
oks486 0:7b78d1eee006 32 led = 0;
oks486 0:7b78d1eee006 33 break;
oks486 0:7b78d1eee006 34 case I2CSlave::WriteAddressed:
oks486 0:7b78d1eee006 35 if (slave.read(buf, 10) == 0) {
oks486 0:7b78d1eee006 36 // success
oks486 0:7b78d1eee006 37 serial.printf("Read success. DATA: %s\n", buf);
oks486 0:7b78d1eee006 38 led = 1;
oks486 0:7b78d1eee006 39 } else {
oks486 0:7b78d1eee006 40 // failure
oks486 0:7b78d1eee006 41 serial.printf("Read failure. DATA: %s\n", buf);
oks486 0:7b78d1eee006 42 led = 0;
oks486 0:7b78d1eee006 43 }
oks486 0:7b78d1eee006 44 break;
oks486 0:7b78d1eee006 45 }
oks486 0:7b78d1eee006 46
oks486 0:7b78d1eee006 47 for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
oks486 0:7b78d1eee006 48 }
oks486 0:7b78d1eee006 49 }