【车载开发系列】一文读懂IIC通信
【车载开发系列】一文读懂IIC通信
- 【车载开发系列】一文读懂IIC通信
- 一. 概念
- 二. 两条总线
- 三. 特点
- 四. 主机和从机
- 五. 软件和硬件IIC
- 1)软件IIC
- 2)硬件IIC
- 3)区别
- 六.与CAN总线区别
- 1)传输特征
- 2)应用场景
- 3)协议标准
- 七. 读数据
- 八. 写数据
一. 概念
IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS飞利浦)公司开发的两线式串行总线,广泛用于连接微控制器及其外围设备。
二. 两条总线
IIC总共有两条总线:SDA与SCL。
SDA(Serial data)是数据线,D代表Data也就是数据,Send Data也就是用来传输数据的SCL(Serial clock line)是时钟线,C代表Clock也就是时钟也就是控制数据发送的时序的。
I2C总线上的每个设备都自己一个唯一的地址也叫做DeviceAddress,来确保不同设备之间访问的准确性。
三. 特点
1.IIC是半双工,而不是全双工。只有SPI和uart通信为全双工通信。
2.SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
3.支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)
4.小数据量通信,传输距离短,适用于主从器件之间通信。
5.IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI
6.IIC地址是8位地址,减去1位广播地址,是 7位地址。
四. 主机和从机
主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。一般情况下,发布主要命令的称为主机,而接受命令的称为从机。
I2C总线是一种多主机总线,连接在I2C总线上的器件分为主机和从机。
1)主机有权发起和结束一次通信,从机只能被动呼叫;
2)当总线上有多个主机同时启用总线时,I2C具备冲突检测和仲裁的功能来防止错误产生
3)每个连接到 I2C 总线上的器件都有一个唯一的地址(7 bit),且每个器件都可以作为主机也可以作为从机(但同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;
4)I2C 总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
五. 软件和硬件IIC
IIC分为软件IIC和硬件IIC两种类型。
1)软件IIC
通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
2)硬件IIC
一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。
3)区别
硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
六.与CAN总线区别
I2C和CAN总线是两种不同的串行通信协议,主要区别体现在传输特性、应用场景和协议标准上。
1)传输特征
I2C采用同步串行通信,而CAN支持差分信号传输,速率范围灵活。
2)应用场景
I2C适用于微控制器与外围设备连接,如消费电子、通信设备等低速数据传输场景;而CAN广泛应用于汽车、工业自动化等领域,支持多节点同时通信,复杂系统的实时交互数据。
3)协议标准
I2C由恩智浦公司开发,采用主从架构,支持半双工双向通信,而CAN支持ISO国际标准化协议,包含J1939等扩展协议,支持高可靠性数据传输。
七. 读数据
1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令
3.然后主机等待从机的应答信号(ACK)
4.当主机收到应答信号时,主机发送要访问的地址,继续等待从机的应答信号
5.当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据
6.这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不在接收数据
7.主机进而产生停止信号,结束传送过程
八. 写数据
1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读)
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/T位将自己确定为发送器和接收器
4.此时主机等待从机的应答信号(Ack)
5.当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号
6.当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号
7.主机产生停止信号,结束传送过程。