图13-6给出了I2C总线的数据传输格式。I2C模块支持1~8位数据值。数据线SDA上的每一位与SCL上的一个脉冲对应,且发送过程总是先发送最高有效位(MSB)。传输或接收的数据个数没有限制。图13-6中所用的串行数据格式为7位地址格式。I2C模块支持图13-7~图13-9给出的地址格式。
图13-6 I2C模块数据传输格式(7位寻址和8位数据结构)
1.7位地址格式
在7位地址格式下(如图13-7所示),START信号之后的第一个字节包括7位从地址和1位位。位确定数据传输的方向:
图13-7 I2C模块7位寻址格式(I2CMDR.FDF=0,XA=0)
①:主模块写数据到从地址模块。
②:主模块由从模块读取数据。
在每个字节传输完成之后,插入一个应答位ACK专用的额外时钟周期。如果主模块发送完第一个字节后从模块发送一个应答信号,根据位的状态,在应答信号之后主模块或从模块就会发送n位数据,n的数值可以是1~8之间的数,由寄存器I2CMDR的BC位确定。数据发送完成之后,接收器会插入一个应答位。
如果要选择7位地址格式,向I2CMDR寄存器的扩展地址写入0以使能XA位,并确认自由数据格式模式处于关闭状态(I2CMDR.FDF=0)。
2.10位地址格式
10位地址格式与7位地址格式类似,如图13-8所示,但不同的是主模块发送从地址采用两个分离的字节传输。第一个字节由11110B、10位从地址的两个MSB和组成,第二个字节是10位从地址的剩余8位地址。从模块在每两字节传输完成之后必须发送一个应答信号。当主模块将第二个字节的地址写到从模块后,主模块可以写数据或者使用START信号重复操作改变数据传输方向。(www.daowen.com)
图13-8 I2C模块10位寻址格式(I2CMDR.FDF=0,XA=l)
如果要选择10位寻址格式,向I2CMDR寄存器的XA位写入1,并确认自由数据格式模式处于关闭状态(I2CMDR.FDF=0)。
3.自由数据格式
在自由数据格式下,如图13-9所示,START之后的第一个字节是一个数据字节。在每个数据字节结束后插入一个应答位ACK,数据字节的长度根据I2CMDR寄存器的BC位可以设置为1~8位,不发送地址或数据方向信息。因此,在该方式下发送器和接收器都必须支持自由数据格式,并且在数据传输的过程中,数据传输的方向必须保持不变。
图13-9 I2C模块自由数据格式(I2CMDR寄存器的FDF=1)
如果要选择自由数据格式,向I2CMDR寄存器的自由数据格式(FDF)位写1。在数字自循环测试(Loopback)模式下,不支持自由数据格式。
4.重复START操作
在每个数据字节传输结束时,主模块可以驱动另外的START操作。利用这一点,主模块可以与多个从地址通信而不需要通过STOP操作放弃总线控制权。数据字节的长度可以设置为1~8位,由I2CMDR寄存器BC位选择。重复START操作可以使用7位地址格式,10位地址格式和自由数据格式。图13-10给出了一个7位地址格式的重复START操作。
图13-10 重复START操作(7位地址格式)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。