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 06:12:00 2016 +0000
Revision:
0:7b78d1eee006
Child:
1:bd94bb3170b6
initial commit

Who changed what in which revision?

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