【应用笔记】TAE32G5800 IIC 原理分析
IIC 总线是由 NXP 公司开发的两线式串行总线,同步通信,传输距离短。在 IIC 协议中,对于主机设备称为 Controller,从机设备称为 Target。IIC 总线由数据线(SDA)和时钟线(SCL)组成,总线上可以挂载多个主机及从机,在通信过程中,主机提供 SCL 信号,控制主从设备间的传输速率。
双向总线(常用)IIC 的通信速度分四个等级:
Standard-mode:最高达 100kbit/s
Fast-mode:最高达 400kbit/s
Fast-mode Plus:最高达 1Mbit/s
High-speed mode:最高达 3.4Mbit/s
单向总线 IIC 的通信速度:
Ultra Fast-mode:最高达 5Mbit/s
不同设备支持的最大传输速率是不同的,设备挂载在总线之前,要确认设备支持的最大传输速率在主机的设置的传输速率范围内。
IIC 可在一帧内完成多个 byte 的数据传输。设备作为从机可通过程序或厂家默认配置 1~2 个从机地址,主机则通过寻址的方式实现与目标设备通信。
主从机配置的地址类型可以分为 7bit 地址及 10bit 地址。10bit 的存在即为了获得更多的可分配的地址。7/10bit 地址的设备可以连接在同一条总线上。7/10bit 寻址方式在 1.2 IIC 通信流程及帧格式叙述。
当总线上没有数据传输时,SDA 及 SCL 为高电平。此时线上为 IDLE 状态。
当主机开始数据传输时,会在 SCL 为高电平期间拉低 SDA 线作为 Start bit,如图 1.1 所示,线上的所有从设备的接收机在检测到 Start bit 后,准备后续的传输事务。
当主机接收完成或发送完成数据时,会在SCL为高电平期间拉高SDA线作为Stop bit,如图 1.2 所示,代表当前帧传输结束。
IIC 每传输一个数据位就会产生一个时钟脉冲,如图 1.1。
IIC 协议规定除起始位、结束位外,当 SCL 为高电平周期时,SDA 线上电平状态必须保持稳定,此时周期内数据有效;当 SCL 为低电平的收,SDA 线上电平状态才可以改变。
图 1.3 数据时钟对应关系
TAE32G5800 的采样点为检测到 SCL 上升沿后的第 4 个 I2C 时钟周期(40ns)。Setup/hold time 设定的目的在于令 SDA 在上述两个时间段内保持稳定,否则会导致采样 SDA 不准确。
Setup time 即数据建立时间,定义为数据需要在采样前必须稳定的时间量,通常在 SDA 状态改变到 SCL 上升沿之间。在 IIC 协议中,不同的模式下不同帧位置的最小 setup time 不同。TAE32G5800 通过对 I2C->TIMING SUDAT[15:8]赋值设置 setup time,设置后会延迟自检测到时钟上升沿后的采样点,不会改变波特率。
Hold time 即数据保持时间,定义为数据在采样后保持稳定的时间,通常在 SCL 下降沿到 SDA 状态改变之间。IIC 协议数据传输不需要设置 hold time。
Spike filter 为尖峰滤除,一般用于线上含有干扰的 IIC 通信中。配置尖峰抑制后波特率会降低。TAE32G5800 通过对 I2C->TIMING SPKLEN[31:24]赋值设置最大尖峰滤除长度。
在一帧数据中,主从设备都会参与通信,共同完成一帧数据的传输。
所有数据传输事务的发起者都为主机。主机想要发起数据传输,需要先发送起始位标示线上将发生数据传输事务,随后根据配置发送 7bit 或 10bit 地址及读写指令(读-1/写-0)。线上的所有从机会根据配置的从机地址,判断地址是否匹配,如果地址匹配则主动拉低 SDA 线(发送 ACK)应答主机,继续接下来的数据传输;如果不匹配,则对 SDA 线无动作(发送 NACK),退出此次传输进程。
通信过程中,应答(ACK/NACK)可以理解为:哪一个设备设备接收地址或数据,哪一个设备执行应答动作。
接下来将以主机(Controller)分析 7bit 寻址及 10bit 寻址模式下数据的收发流程。
7bit 主机写(Controller write),即对应从机收,帧格式如图 1.4。在主机发送起始位、7bit 地址及写指令后,从设备检测到地址匹配将会拉低 SDA 线(发送 ACK)。随后主机发送数据 byte,从机将一一回应 ACK/NACK。
注意:主机发送最后一个数据 byte 后,从机可回 ACK 或 NACK,没有严格规定。
7bit 主机读(Controller write),即对应从机发,帧格式如图 1.5。在主机发送起始位、7bit 地址及读指令后,从设备检测到地址匹配将会拉低 SDA 线(发送 ACK)。随后从机发送数据 byte,主机将一一回应 ACK/NACK。
注意:从机发送最后一个数据 byte 后,主机需要回 NACK。
10bit 主机写主机写(Controller write),即对应从机收,帧格式如图 1.6。主机需要连续发送两个 byte 的地址,第一个地址包含写指令,需要将高 2bit 地址与 10 位从机寻址地址 0x1E 组合,第二个地址为剩下的 8bit 地址,在两次从机应答之后,主机开始数据传输,从机对数据一一回应 ACK/NACK。
注意:主机发送最后一个数据 byte 后,从机可回 ACK 或 NACK,没有严格规定。
图 1.6 10bit 主机写格式
10bit 主机写主机读(Controller read),即对应从机发,帧格式如图 1.7。同样的,主机需要连续发送两个 byte 的地址,第一个地址包含主机写指令,需要将高 2bit 地址与 10 位从机寻址地址 0x1E 组合,第二个地址为剩下的 8bit 地址,在两次从机应答之后,主机需要再次发送包含主机读的第一个地址,从机应答后,从机发送数据,主机将一一回应 ACK/NACK。
注意:从机发送最后一个数据 byte 后,主机需要回 NACK。
图 1.7 10bit 主机读格式