When the number of bytes to send is 1 or 2 it works; but when >2 it does not.
No changes to the code, I used the code without modifications.
I'm using my own board with the 320F28069 and the EEPROM is CAT24C128 from On semiconductor.
The signals look good and it works when sending two bytes.
When #define I2C_NUMBYTES changes to 3 or 14 it does not generate the STOP condition.
See the table below to see what I see in the SCOPE.
| numberOfBytes to send | 1 | Comment | 2 | Comment | 3 | Comment |
| Works (pass) | Works (pass) | Works (pass) | ||||
| I2CMDR | 0x6e20 | 0x6e20 | 0x6e20 | |||
| Scope capture | ||||||
| //STT | //STT | //STT, | ||||
| //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | |
| //0x01(ak), | memory address H | //0x01(ak), | memory address H | //0x01(ak), | memory address H | |
| //0x30(ak), | memory address L | //0x30(ak), | memory address L | //0x30(ak), | memory address L | |
| //0x12(ak), | data 1 | //0x12(ak), | data 1 | //0x12(ak), | data 1 | |
| //0x34(ak), | data 2 | //0x34(ak), | data 2 | |||
| //STP | //STP | //SCL stays low & SDA goes high (missing data 3) | ||||
| //STT | //STT | |||||
| //0xA0(nk), | slave address 0x50 | //0xA0(wr&nk), | slave address 0x50 | |||
| //STP | //STP | |||||
| //..repeats 83 times | //..repeats 83 times | |||||
| //STT | //STT | |||||
| //0xA0(wr&nk), | slave address 0x50 | //0xA0(wr&nk), | slave address 0x50 | |||
| //STP | //STP | |||||
| //..repeats 83 times | //..repeats 83 times | |||||
| //STT | //STT | |||||
| //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | |||
| //0x01(ak), | memory address H | //0x01(ak), | memory address H | |||
| //0x30(ak), | memory address L | //0x30(ak), | memory address L | |||
| //0x01(ak), | ??????? | //0x01(ak), | ??????? | |||
| //STT | //STT | |||||
| //0xA1(rd&ak), | slave address 0x50 | //0xA1(rd&ak), | slave address 0x50 | |||
| //0x12(ak), | data 1 | //0x12(ak), | data 1 | |||
| //0x34(nk), | data 2 | |||||
| //STP | //STP |
| numberOfBytes to send | 1 | Comment | 2 | Comment | 3 | Comment |
| Works (pass) | Works (pass) | Works (pass) | ||||
| I2CMDR | 0x6e20 | 0x6e20 | 0x6e20 | |||
| Scope capture | ||||||
| //STT | //STT | //STT, | ||||
| //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | |
| //0x01(ak), | memory address H | //0x01(ak), | memory address H | //0x01(ak), | memory address H | |
| //0x30(ak), | memory address L | //0x30(ak), | memory address L | //0x30(ak), | memory address L | |
| //0x12(ak), | data 1 | //0x12(ak), | data 1 | //0x12(ak), | data 1 | |
| //0x34(ak), | data 2 | //0x34(ak), | data 2 | |||
| //STP | //STP | //SCL stays low & SDA goes high (missing data 3) | ||||
| //STT | //STT | |||||
| //0xA0(nk), | slave address 0x50 | //0xA0(wr&nk), | slave address 0x50 | |||
| //STP | //STP | |||||
| //..repeats 83 times | //..repeats 83 times | |||||
| //STT | //STT | |||||
| //0xA0(wr&nk), | slave address 0x50 | //0xA0(wr&nk), | slave address 0x50 | |||
| //STP | //STP | |||||
| //..repeats 83 times | //..repeats 83 times | |||||
| //STT | //STT | |||||
| //0xA0(wr&ak), | slave address 0x50 | //0xA0(wr&ak), | slave address 0x50 | |||
| //0x01(ak), | memory address H | //0x01(ak), | memory address H | |||
| //0x30(ak), | memory address L | //0x30(ak), | memory address L | |||
| //0x01(ak), | ??????? | //0x01(ak), | ??????? | |||
| //STT | //STT | |||||
| //0xA1(rd&ak), | slave address 0x50 | //0xA1(rd&ak), | slave address 0x50 | |||
| //0x12(ak), | data 1 | //0x12(ak), | data 1 | |||
| //0x34(nk), | data 2 | |||||
| //STP | //STP | |||||


