This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28P650DK: 在使用硬件IIC的时候如果遇到从机正在忙无法访问,导致主机一直处于busy状态,我应该如何放弃这次发送?从而释放总线,能发送下一次的数据呢

Part Number: TMS320F28P650DK

 具体波形如图,从机回NAK之后总线以及主机一直处于忙的状态

  • 您好,      

    从机回NAK之后总线以及主机一直处于忙的状态

    请确认主机代码在检测I2C  ACK中是否有存在阻塞程序,如果是,可在阻塞函数中增加计数定时程序,timeout时强制跳出阻塞。

    另外,建议从NAC的根本原因入手,如果从机一直不反馈ACK,请检查从机硬件.

  • 像eeprom是在写入之后有一段时间是无法操作的,所以会回复NAC,主机接收到NAC之后就没有操作了,我该如何让主机发送STOP来停止这次传输,防止总线一直处于BUSY状态

  • 您好,

        如前面回复,建议增加延时退出机制。

  • 我已经增加了退出机制,等待一段时间没有收到就直接退出发送函数,但是退出之后总线仍然是处于忙的状态,我想知道主机是否有办法强制发送STOP使总线拉回空闲状态

  • 您好,

         如果您在主接收器模式下使用 I2C,它将在从从器件收到 I2CCNT 字节数后发出 STOP。如果发生超时,您可以重置 I2C 以清除 STP 位(清除,然后在模式寄存器中设置 IRS)。

    您可以使用重复启动条件连续传输数据而不停止。开始传输时不要设置 STP 位。一旦主设备收到 I2CCNT 位数,您可以发出新的启动条件 (STT) 以重新开始传输。