https://e2e.ti.com/support/audio-group/audio/f/audio-forum/891126/lm49251-i2c-bus-lock-w-stm32l4
器件型号:LM49251大家好、
背景:
使用 LM49251和 STM32L4实现 I2C 总线锁定。 SDA 和 SCL 上具有15K 外部上拉电阻。 尽可能使用 CubeMX HAL 代码。 VDD:3V3、HPVdd:1v8、I2CVdd:1v8。 STM32 Vcc:1v8。
免责声明:
由于这似乎是 I2C 总线锁定的一般情况、我犹豫是否在该论坛中发布此问题。 但在失去了很多头发和理智之后、我来到这里希望 LM49251有一些神奇和特别的东西、它不会通过"通常"的方法从这种情况中恢复过来、 并且有一种软件方法、可在需要时恢复与 LM49251的通信。
问题:
当电池出现问题时、我们的器件似乎偶尔会经历欠压复位、如果电源真的不稳定、则有时会连续数次进行欠压复位。 由于 STM32放弃与 LM49251的"初始化"对话、连续复位偶尔会导致 I2C 总线"锁定"、因此 LM 希望 SCL 振荡永远不会出现。 SDA 有时保持高电平、有时保持低电平。
挑战:
不能修改硬件以包含用于 LM49251的 MCU 控制复位电路、因为这是用于已经设计、制造并向市场销售的现有器件。
迄今取得的进展:
在研究了 STM32和 I2C 总线锁定和复位问题之后、我们尝试实现各种现成代码的实现方式、这些实现了 I2C 解锁过程、该过程应使从器件脱离其等待状态并允许通信恢复。 其主要来源是以下链接、尽管它主要针对 STM32F4s。。。
electronics.stackexchange.com/.../i2c-busy-flag-strange-behavior
代替上述功能的其他方法是强制复位、以及此处提到的 GPIO 与 I2C 时钟初始化顺序的变化...
electronics.stackexchange.com/.../stm32-busy-flag-is-set-after-i2c-initialization
最后、软件和硬件都尝试了原始 SCL 切换(17个周期或更多周期的突发)、结果无效。
帮助! )
提前感谢大家。
迪尔克