【车载开发系列】IIC总线协议基础篇
【车载开发系列】IIC总线协议基础篇
- 【车载开发系列】IIC总线协议基础篇
- 一. 什么是I2C
- 二. I2C使用场景
- 三. I2C的特点
- 四. 传输速度四种模式
- 五. IIC基本通讯规则
- 1)起始信号S
- 2)停止信号P
- 3)发送数据(一个字节)
- 4)接收数据(一个字节)
- 5)发送应答
- 6)接收应答
- 7)模式切换
- 六. 什么是上拉电阻
- 七. IIC通信步骤
- 1)主机发出起始信号
- 2)发送设备地址和读写控制位
- 3)等待从机应答
- 4)传输数据
- 5)通信结束
- 八. IIC注意事项
- 九. IIC总线寻址
- 十. IIC总线通讯协议与CAN对比
)
一. 什么是I2C
- I2C(集成电路总线),它是Inter-Integrated Circuit的缩写。
- 由Philips公司(2006年迁移到NXP)在1980年代初开发的一种简单、双线双向的同步串行总线,它利用一根时钟线SCL和一根数据线SDA在连接总线的两个器件之间进行信息的传递,为设备之间数据交换提供了一种简单高效的方法。每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。
二. I2C使用场景
- I2C总线协议标准是一个具有冲突检测机制和仲裁机制的真正意义上的多主机总线,它能在多个主机同时请求控制总线时利用仲裁机制避免数据冲突并保护数据。
- 使用I2C总线通信的场景有很多,IIC主要方便连接各种低速外设,例如传感器,存储器时钟芯片,驱动FRAM和E2PROM等。
三. I2C的特点
- 只需要SDA(串行数据总线)、SCL(串行时钟总线)两条总线;
- 同步串行通信接口,半双工工作模式;
- 没有严格的波特率要求;
- 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;
- I2C是真正的多主设备总线,可提供仲裁和冲突检测;
- 最大主设备数:无限制;最大从机数:理论上,1008个从节点,寻址模式的最大节点数为2的7次方或2的10次方,但有16个地址保留用于特殊用途。
四. 传输速度四种模式
- 标准模式(Standard Mode):100 Kbps
- 快速模式(Fast Mode):400 Kbps
- 高速模式(High speed mode):3.4 Mbps
- 超快速模式(Ultra fast mode):5 Mbps
- IIC支持多种速度等级 能满足不同应用环境对数据传输速率的需求。
- 如果使用硬件I2C接口,可以通过配置主设备控制器,选择速率模式。
五. IIC基本通讯规则
- 总线上的START和STOP停止信号必定是唯一的,另外IIC总线标准规定:SDA线的数据变化必须在SCL线的低电平期,SDA线上的数据是稳定的。
- 这里除了起始和终止条件,每个时序单元的SCL都是低电平开始,低电平结束。
1)起始信号S
- 当SCL(serial Clock Line)为高电平的时候,SDA(Serial Data)从高电平变成了低电平。
2)停止信号P
- 当SCL(serial Clock Line)为高电平的时候,SDA从低电平变为高电平。
3)发送数据(一个字节)
- SCL低电平期间,主机将数据位依次放到SDA线上然后释放SCL,从机在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环8次,即可发送一个字节。
4)接收数据(一个字节)
- 在SCL低电平期间,从机将数据位依次放到SDA上,然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有变化,依次循环上述过程8次,即可接收一个字节。
5)发送应答
- 主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
6)接收应答
- 主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,1表示非应答。
- 发送和应答机制和发送接收字节的原理是一样的,只是发送应答机制变成了发送一位数据。
7)模式切换
- 如果主机发送完字节后,要确定从机是否接收到数据,那么就要将主机切换成输入模式。
- 主机立即拉高SDA电平(释放控制权),从机立刻拉低SDA电平(获得控制权),所以主机接收到的是从机拉低后的低电平,这就是数据0表示应答的原因。
六. 什么是上拉电阻
- 它是一种电阻器,当外部电路没有输入信号时,它可以将内部引脚的电平拉高到高电平,通常是3.3V或者5.0V。
- 上拉电阻(Pull-up Resistor)主要功能就是在总线上没有信号的时候,提供一个固定的电平,以确保数据线上的电平稳定,从而保证数据传输的可靠性。
- 对于标准模式的(100kHz)的IIC总线,上拉电阻可以选择4.7K欧姆或者10K欧姆,对于快速模式或者更高速率的IIC总线,可能需要更小的上拉电阻。
七. IIC通信步骤
1)主机发出起始信号
- 主机首先需要发出起始信号来占用总线。这通常是在SCL为高电平的时候,将SDA从高电平拉低来完成。
2)发送设备地址和读写控制位
- 主机发送一个字节的数据,其中高7位为设备的地址,最后一位是读写控制位(R/W位),读写控制位为0时,表示主机要向从设备发送数据(写操作),读写控制位为1时,表示主机要从从设备读取数据(读操作)。
3)等待从机应答
- 主机发送完设备地址和读写控制位后,等待从机信号应答。如果从机的地址与主机发送的地址匹配,并且准备好就行通信,它会发送一个应答信号ACK给主机。这个应答信号是在SCL为高电平时,通过拉低SDA电平(从高电平变为低电平)来表示的。
4)传输数据
- 一旦建立了连接,主机就可以通过SDA线向从机发送数据,数据在SCL的每个时钟周期内传输一位。
- 数据发送的顺序是从最高位到最低位发送(MSB->LSB)。
5)通信结束
- 通信结束后,主机发送停止信号来释放总线。
八. IIC注意事项
- 起始信号和终止信号都是由主机来发送。
- 在I2C总线进行数据传输时,SCL为高电平期间,SDA线上的数据必须保持稳定,只有在SCL为低电平的时候,SDA上面的高电平或低电平状态才允许变化。
- 数据传送格式:主机发送给从机;每一个字节必须保证是8个位的长度,数据传输时先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧一共有9位)。
- 应答信号包括ACK和NACK两种。
- 作为数据接收端,在I2C传输中接收到一个字节数据或者地址后,若希望对方继续发送的话,需要向对方发送ACK信号;向对方发送非应答NACK信号的时候,发送方就会产生一个停止信号,结束信号传输。
九. IIC总线寻址
- 主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同则认为自己正在被主机寻址,根据RW位将自己确定为发送器还是接收器。
- 每次数据传送总是由主机产生终止信号来结束。但是若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
- 每个设备都必须有一个唯一的7位地址,其中最高位是固定的0,剩余7位由设备厂商指定。
SDA和SCL两条总线同时在高电平下,那么IIC总线目前在空闲状态。
十. IIC总线通讯协议与CAN对比
- CAN和IIC都具备总线仲裁和冲突检测,都是半双工,都是串行两线的总线,都是多主机总线(多个设备之间通信)。
- CAN是异步通信,而IIC因为有ACK的报文存在,所以算是同步通信。
- I2C使用了上拉电阻,抗干扰能力比不上CAN,一般只能用于同一块板上的通信。
- I2C的报文中包含有地址信息,CAN报文中没有地址信息,所以在系统柔软性上,在CAN总线上添加单元时,其他单元的软硬件和应用层都不需要进行改变。
- CAN总线采用多主结构,不分主从;IIC总线支持一主多从和多主多从。