主题中讨论的其他器件:C2000WARE
您好!
我开发了 EEPROM 24LC01B 的驱动程序。 轮询检测到写入数据的结束。 出于此目的、只应发送无数据的控制字节。 测试结果取决于 ACK 是否存在。

有两种情况:
1) 1) 当未完成 EEPROM 的内部写入时-在本例中、我可以处理、我正确检测 NACK 并强制在 i2c 上生成 STOP、
2) 2)写入操作完成后-这就是问题所在:
a.即使存在 ACK 和空数据缓冲区、i2c 也不会生成 STOP、
b.没有 ARDY 信号、因此我无法检测到它并强制停止

由于软件要求、我不能使用中断、所以我定期检查 I2CSTR 寄存器。
在这个感兴趣的区域中、我已经读取了以下寄存器值序列:
0: i2c 传输开始、
~0: 0x410 (XSMT =发送移位寄存器为空、XRDY =发送数据就绪)
39us: 变速器结束
44us: ACK
i2c 行上无进一步活动
68us: 0x1010 (BB =总线忙、XRDY)
101us:0x0410 (XSMT、XRDY)
164us:0x1010
202us:0x0410
(笑声)
I2C 配置
我使用 fifo 进行 i2c 传输:
i2cregs->I2CFFTX.bit.I2CFFEN = 1;
i2cregs->I2CFFTX.bit.TXFFRST=1;
传输开始:
i2cregs->I2CCNT = 0
此消息没有写入 FIFO
i2cregs->I2CMDR.all = I2CMDR_MST_MASK
| I2CMDR_IRS_MASK
| I2CMDR_TRX_MASK
| I2CMDR_STT_MASK
| I2CMDR_STP_MASK;
为什么停止条件和 ARDY 都不会生成?
此致、
Piotr Romaniuk