PSOC4 I2C接收数据咨询

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

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

cross mob
Merrick
Level 3
Level 3
Distributor - Weikeng(GC)
25 replies posted 10 questions asked 25 sign-ins

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

0 点赞
1 解答
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

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

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

在原帖中查看解决方案

0 点赞
5 回复数
Merrick
Level 3
Level 3
Distributor - Weikeng(GC)
25 replies posted 10 questions asked 25 sign-ins

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

0 点赞
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

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

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

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

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

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

 

0 点赞
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

这个没有实测过,我在 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 点赞
Merrick
Level 3
Level 3
Distributor - Weikeng(GC)
25 replies posted 10 questions asked 25 sign-ins

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

0 点赞
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

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

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

0 点赞