我的
STM32WB55 配置为 I2C 主机并连接到 I2C 从机。
我的 I2C 块配置如下:
I2C->CR1 = 0x01
I2C->CR2 = 0x000A0060(从机地址=0x60 和 NBYTES=0x0A)
要启动 I2C 事务,I2C->CR2.START 设置为 1。
I2C
通信开始,但在某个时候从机发送 NACK,这是预期的。
然后,我的 I2C 块卡住了,我确认 I2C_ICR_NACKCF 标志,然后发送另一个 START 命令。I2C 块在总线上发送 START 命令但永远不会上升 `I2C->ISR.TXIS` 标志,它永远不会在总线上发送更多字节。
在 START 之后立即发送意外的 STOP。
在这里我可以看到一个 START 命令被发送到总线上并被从设备确认:
如何从 NACK 中恢复?
Datasheet 显示了一个图表,如果收到 NACK,状态为“结束”,但这是什么意思?
stm32wb55rg_reference_manual.pdf,第 32.4.9 节 I2C 主模式
我现在唯一的解决方法是重置 I2C 块。我附上了用 Saleae 设备拍摄的照片。
尽管存在这个 NACK 问题,但它运行良好。