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'.
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.
main.cpp@0:7b78d1eee006, 2016-04-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |