I2C读 - 需要重复启动吗?

时间:2015-06-27 17:37:03

标签: i2c

我怀疑I2C中的读操作,位冲击。我遵循的协议如下: 使用write-ack-register loc-ack-stop的起始从站地址。 ......具有read-ack-read数据停止的起始从地址。 我正在读数据为FFh,这是错误的。 我怀疑的是,在发送另一个启动之前,需要发送停止或者可以继续另一个启动来不停地读取数据,这实际上是重复启动。发送停止位是否有所不同。如果数据读取为FFh,也可以告诉某人可能的原因。但在看到示波器拍摄后,我可以保证写操作成功。请指导我。

由于

2 个答案:

答案 0 :(得分:3)

i2c协议就像这样工作

WRITE:
  1. 发送START
  2. 将最后一位的从机地址写为WRITE ACCESS(0)
  3. 写子地址:这通常是您要写入的寄存器的地址;如果不适用,请跳至4。
  4. 写数据
  5. 发送STOP
  6. 如果操作成功,则应该使用ACK来回答写入从设备的每个字节。

    READ:
    
    1. 发送START
    2. 将最后一位的从机地址写为WRITE ACCESS(0)
    3. 写子地址:这通常是您要从
    4. 读取的寄存器的地址
    5. 发送START(这是第二个启动条件 - 重启)
    6. 将最后一位的从机地址写为READ ACCESS(1)
    7. 读取数据
    8. 发送STOP
    9. 如果成功,将使用ACK回答所有写入和读取操作(上次读取除外)。

      因此,在重新启动的情况下,您不会发送第二个停止。

      就0xFF读取结果而言,您需要检查设备的数据表,但如果您尝试读取的数据不可用,有些人将返回此值!

      希望这有帮助。

答案 1 :(得分:0)

我刚刚遇到这个问题,并找到了原因:如果你一直在阅读FFh,你就会错过重复的开始。