我拥有 Tiva 固件、该固件定期(每~200ms)读取单个 I2C 总线上的几个不同器件。 我们经常会看到总线上的 SCL 和 SDA 线保持高电平、尽管 Tiva 固件继续执行 I2C 读取的代码。 下面显示了 SCL 和 SDA 何时从正常工作过渡到无限期保持高电平的示波器屏幕截图。
奇怪的是、I2C 外设配置为开漏、我们在 SCL 和 SDA 线路上使用上拉电阻、但我们从未看到任何一条线路都变为低电平、尽管我们提到过、 固件 继续进行周期性的 I2C 读取、调用 TivaWare 函数、如 I2CMasterSlaveAddrSet、I2CMasterDataPut、I2CMasterSlaveAddrSet、I2CMasterControl 和 I2CMasterDataGet。
在我们看到 SCL 和 SDA 无限期保持高电平后、我已经检查了 I2C 通道的 I2CMCS 寄存器(见下面的第二个图)并 看到一些非常冲突的状态。 例如、总线同时处于忙状态和空闲状态。
此外、我们还增加了按需触发一些"复位逻辑"的功能。 该复位逻辑将禁用 I2C 外设、将 SDA 和 SCL 引脚更改为 GPIO、并尝试根据 Analog Devices AN-686应用手册来复位 I2C 总线(基本来说是一次位后复位以释放总线)、然后切换回 I2C。 这 可以正常工作、但通常只需一秒钟或两秒钟、它就会返回到 SCL 和 SDA 线路都无限期保持高电平的先前状态。
任何人对这一问题的任何想法都将不胜感激。