Announcements

Robots are revolutionizing our lives in many ways. Join our webinar to learn about Infineon’s broad portfolio of robot building blocks.
Click here to register.

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

PSoC™ 4 Forum Discussions

Merrick
Level 3
Level 3
25 replies posted 10 questions asked 25 sign-ins

您好,PSOC4的I2C接口在接收数据前,主机发送了一个NACK,MCU会是什么动作。是无操作,还是进行某些数据回复。

0 Likes
5 Replies
Merrick
Level 3
Level 3
25 replies posted 10 questions asked 25 sign-ins

在接收数据的过程中,不是接收数据前。

0 Likes
LinglingG_46
Moderator
Moderator
Moderator
10 questions asked 5 questions asked 250 sign-ins

1: 在接收数据的过程中怎么发NACK?I2C的主机和从机分别是什么设备?是否存在用GPIO模拟I2C的情况?

2: I2C的协议规定是在第九个字节判别为NACK和ACK.

3: 你说的发送数据过程中是指什么时候?

4:你遇到的这种情况,是基于你的理论分析,还是你实际就是遇到这个情况?

5:如果实际遇到这个情况,你总线上面目前测试的情况是什么?

 

0 Likes
Vison_Zhang
Moderator
Moderator
Moderator
250 solutions authored 10 likes given 500 replies posted

这个没有实测过,我在 I2C SPEC 也没有查到对这个动作做定义。当I2C Master Slave 写数据过程中,Master 主动发送了一个NACK(Not Acknowledge)信号,一般表示传输中止,需要重新启动传输。Slave 应该会采取以下操作:

  1. 从机停止接收数据:从机在接收数据时,会不断向主机发送ACK信号,以表示接收到了数据。但是,如果主机发送了NACK信号,从机将停止接收数据,不再发送ACK信号。

  2. 从机释放总线:从机在停止接收数据后,会释放总线,以允许其他设备访问总线。

  3. 从机等待下一个传输:从机会等待下一个传输的开始。在I2C总线上,主机可以选择向一个或多个从机发送数据。因此,从机需要等待主机发送下一个传输命令。

 

当然也存在另外一种可能性,I2C Salve 无法识别 Master 的这个操作,它依然在 Master 发出 NACK 之后向 Master 发送和 ACK,此时 SDA 会被一直拉低,等待 Master 发出第九个采样时钟,但是一直又等不到,所以会形成 SDA 一直拉低的情况,一直等到下一个 clock 沿的到来,但是此时数据就可能会存在错位问题了。 所以真的出现了 SDA 一直拉低的情况,就需要主机这边发送一个 stop 时序,让总线得到释放,从机状态机得到恢复。

PSOC4 的 I2C,大概率是后一种情况。你实测过后告诉我结果。

 

0 Likes

非常感谢您的回答。我想知道mcu的i2c slave,实际中是怎么操作的,在mcu的规格里面怎么定义的。这个在MCU中有定义吗。

0 Likes
Vison_Zhang
Moderator
Moderator
Moderator
250 solutions authored 10 likes given 500 replies posted

这种问题,数据手册中肯定是查不到的,估计每一家芯片的表现可能还不一样,因为这种操作其实是不符合 I2C SPEC 的,并且应该被避免。

根据我们之前的经验,如果I2C Master在 PSOC4 I2C Slave回复ACK之前发送了NACK,会大概率导致通信错误,从而中断数据传输并造成通信故障。PSOC4 的 I2C Slave 大概率无法识别 Master 的这个操作,它依然在 Master 发出 NACK 之后向 Master 发送 ACK,此时 SDA 会被一直拉低,等待 Master 发出第九个采样时钟,但是一直又等不到,所以会形成 SDA 一直拉低的情况,一直等到下一个 clock 沿的到来,但是此时数据就可能会存在错位问题了。 所以出现了 SDA 一直拉低的情况,就需要主机这边发送一个 stop 时序,让总线得到释放,从机状态机得到恢复。

0 Likes
This widget could not be displayed.