I2C通信明明接线对,但偶尔主机挂死在BUSY
I2C读EEPROM时,偶发BUSY一直为1,重启才能恢复。用示波器看SCL和SDA都正常回到高电平。感觉像内部状态机卡死。F0的I2C确实有点“脾气”,我也被折腾过。 F0系列I2C偶尔会锁总线,我加了超时检测来恢复。 可以试试软件复位I2C模块的那种方法。 我遇过是EEPROM没及时释放总线导致的。 你用的HAL库还是LL?HAL有时候处理不彻底。 SDA、SCL上拉阻值多少?太大也会拖慢释放。 在BUSY卡死时,读I2C_ISR看看具体状态位。 加一个总线恢复函数,每次初始化前拉几下线。 有的EEPROM在写入时会拉低SDA好几ms。 我后来改成用DMA传输后反而没再卡。 SDA、SCL上拉阻值太大也会拖慢释放 多数 MCU 的 I2C 外设支持软件复位
页:
[1]