我们在使用 TM4C1294NCPDT 的定制电路板上遇到了一个奇怪的问题。 我们使用 I2C 通道9与8个不同的从传感器进行通信。 电路板上电后、我让 TM4C 对传感器执行初始化步骤、以确保通信正常。 此后、每80毫秒读取一次来自传感器的状态。 这在开始时起作用很好、但最终(从几秒到一小时的任何地方)通信完全停止。
我们有一个示波器连接到 SCL 和 SDA 线。 当通信停止时、尽管 固件继续调用典型的 I2C Tiva Ware 函数系列来读取以下数据、SCL 和 SDA 线路都无限期地保持高电平: I2CMasterSlaveAddrSet 、MAP_I2CMasterDataPut、MAP_I2CMasterControl 等
即使在调用 MAP_I2CMasterControl 来启动 I2C_MASTER_CMD_BURST_SEND_START 之后、SCL 和 SDA 线路都仍然保持高电平。 我在那里设置了一个断点来查看 I2C 寄存器值、我已将它们附加到下图中。
您将注意到 I2C_mcs_busy 为 false、而 I2C_mcs_Busby 为 true。 数据表(SPMS433B)将 I2C_MCS_BUSY 解释为与"控制器"相关(例如、"控制器处于 IDLE 或 BUSY")、将 I2C_MCS_Busby 解释为与" 总线"相关(例如、"总线处于 IDE 或 BUSY")。
因此、在本例中、根据下面的寄存器值、控制器不忙、但总线忙。 但是、由于使用了示波器、我们可以确定两条线路都处于高电平、根据我的经验、这意味着总线没有忙。 有人知道会发生什么情况吗?