I2C多字节传输

时间:2016-01-03 13:45:49

标签: i2c atmega

当我们要传输单个字节时,我们按照screenshot

中的描述发送它

当我们以multiburst模式传输数据时,我们在从slave的确认之后发送地址(起始寄存器)而不是数据。然后我们发送数据和寄存器地址自动递增,如this book

所示

我的问题是:

Slave如何识别第一个确认后的字节是地址还是数据?

提示:我经常使用Google,但我找不到能让我满意的答案。

1 个答案:

答案 0 :(得分:1)

从器件可以通过检查特殊位模式的第一个地址字节来识别地址跨越两个字节的事实。从1111 0位模式开始的从地址表示10位地址(与常规7位地址相对),它跨越总线上的两个字节,如I2C Bus Specification中所定义:

  

3.1.11 10位寻址

     

[...]

     

10位从地址由START条件后的前两个字节组成   (S)或重复START条件(Sr)。   第一个字节的前七位是最后两位的组合1111 0XX   (XX)是10位地址的两个最高有效位(MSB);第八位   第一个字节是确定消息方向的R / W位。

如果第一个地址字节与特殊位模式不匹配,则必须将第二个字节视为数据。 所以,在你的例子中

| START | slave address | R/W | ACK | slave address | ACK | data      | ...
| S     | 1111 000      | 0   | A   | 0000 1111     | A   | 0000 0001 | ...

主设备正在从10位地址00 0000 1111标识的从设备读取多个数据字节。