对IIC底层驱动进行测试时发现一个小问题.

公告

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

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

cross mob
Moore_Zou_42099
Level 1
Level 1
Distributor - Future(GC)
First reply posted First question asked Welcome!

当我们主机发送当前读操作时:读取不完整数据,不发送最后的NACK应答和STOP操作,然后按照协议的方式释放SDA总线,然后无法进行后续通信.

  1. 主机发:START+Address+读取数据(7 Bit).
  2. 主机发送时钟,检测SDA线是否为高电平,当为高时,发送STOP.(最多发送九个时钟)
  3. 进行随机地址读,从机不响应.(Slave NACK)

请问,当从机进入异常状态时,我们可以通过哪些有效操作恢复从机(除了硬件复位操作)?

以上波形发送顺序为Q4-01  ->  Q4-02   -> Q4-03

       第一个波形为我们发送的不完整帧;

       第二个波形为按协议方式释放SDA并发送STOP;

       第三个波形为新的一次通信被拒绝响应.

Q4 01.jpg                                                    Q4-01 

  Q4 02.jpg

                                       Q4-02 

Q4 03.jpg

                                            Q4-03

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

记录之前邮件沟通的部分信息:

Q:

您好!感谢您对第1个问题的回复。

麻烦您再帮忙看看,主机只发送9STOP信号给从机,从机把SCL总线拉低.导致总线上无法进行任何通信.我现在的遇到的问题是SCL线被从设备拉低,导致没有办法在唤醒过来,有办法恢复通信吗?

Answer:

请尝试重启从机, 重新开始通信。

在原帖中查看解决方案

0 点赞
3 回复数
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

以下是我对这个问题的理解:

1:看你这个波形,应该是GPIO模拟的I2C。

2:在主机读数据的时候,如果从机没有ACK,应该是没有数据需要被读了。

3:你的Q4-02这个图的stop信号我不太能理解,这个stop信号看上去像有问题。

4:Q4-03的波形,通信在地址匹配的时候成功了,后面也是成功的发送了8个bit的数据,我应该怎么理解通信被拒绝了呢?

5:一般情况下,读取数据不完整,只有在中止在SDA被从机拉低的clock会有问题,这样的话,可能会导致重新start失败的情况。

6:你这个用的是什么芯片?目前在通信中发现了什么问题?

7: 主机收不到从机的ACK的话,一般会选择重新传,多次传输失败,会report error。 但是这个都是你程序设计得逻辑。

0 点赞
Moore_Zou_42099
Level 1
Level 1
Distributor - Future(GC)
First reply posted First question asked Welcome!

我重复了室验验证,现在把实验过程详细复述一遍:

室验条件:

IIC主机为模拟IIC,从机为CY8C5868评估板的硬件IIC Slave.

图示:黄线为中断响应,如果进入中断将翻转两次;

       红线SCL线;

         绿线SDA线.

测试操作:

  1. 将我们A0低表中数据填充为0x00~0x7F;
  2. 单字节随机地址读取A00x44位置的数据为A0[0x44]=0x44;
  3. 单字节随机地址读取A00x54位置的数据,此操作帧为不完整帧结构

:START + Address(0xA0) + Read Data(7 Bit).

   4.由于IIC从机未正常结束,SDA线被拉低,通过协议释放SDA方式释放SDA总线,并结尾发送STOP;

   5.重新开始单字节随机地址读取A00x55位置的数据操作,从机异常现象为第一次响应地址但是不进入中断,在地址后一个Byte数据时响应为   NACK;

   6.如果再次进行单字节随机地址读取A00x55,从机表现为不响应器件地址并且把SCL总线拉低不再释放;

   7.由于SCL总线被从机拉住无法进行任何操作.

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

记录之前邮件沟通的部分信息:

Q:

您好!感谢您对第1个问题的回复。

麻烦您再帮忙看看,主机只发送9STOP信号给从机,从机把SCL总线拉低.导致总线上无法进行任何通信.我现在的遇到的问题是SCL线被从设备拉低,导致没有办法在唤醒过来,有办法恢复通信吗?

Answer:

请尝试重启从机, 重新开始通信。

0 点赞