3 Replies Latest reply on Jun 28, 2019 1:13 AM by LinglingG_46

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

    Moore.Zou_4209916

      当我们主机发送当前读操作时:读取不完整数据,不发送最后的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

        • 1. Re: 对IIC底层驱动进行测试时发现一个小问题.
          LinglingG_46

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

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

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

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

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

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

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

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

          • 2. Re: 对IIC底层驱动进行测试时发现一个小问题.
            Moore.Zou_4209916

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

            室验条件:

            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总线被从机拉住无法进行任何操作.

            • 3. Re: 对IIC底层驱动进行测试时发现一个小问题.
              LinglingG_46

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

              Q:

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

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

               

              Answer:

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