请教一下i2c总线异常后恢复总线的流程是怎样的

- 我使用的是ch32v303

- 异常原因一般是环境干扰导致i2c总线状态错误,无法继续通信

你好,异常之后主机端要STOP总线,重新开始Start才可以释放总线(sda,scl都为高电平)。


你好,问题不能解决

  1. 出现异常后,调I2C_GenerateSTOP后,I2C_FLAG_BUSY仍然为Set

  2. 将SCL短时间接地很容易复现这个问题




你好,如果你调用I2C_GenerateSTOP后,总线还不释放,那就是你的从机拉低了SDA线,将从机的SDA断开再量主机的SDA线,或者想办法让从机复位释放SDA线就行了。


2024-05-17_22-57.png

你好,多谢回复。我尝试用逻辑分析仪抓总线数据,如上图

  1. 从机没有拉低SDA

  2. 调用I2C_GenerateSTOP()没有产生STOP,是否调用前有其他要求?


目前我通过重新初始化流程可以恢复总线。不过还是想了解下更轻量的处理方法。


只有登录才能回复,可以选择微信账号登录