目录
IIC总线通讯(Inter-Integrated Circuit)
一、IIC协议简介
IIC总线通讯(Inter-Integrated Circuit)
中文名:集成电路总线,特点:硬件结构简单、成本低、引脚少、近距离、低速的芯片之间的通信,不需要UASRT,CAN通讯协议的外部收发设备,属于半双工的通信方式。广泛使用在系统内多个集成电路IC(integratedcircuit )间的通讯(适用于电路板上芯片间交互一些简单的数据)。由于抗干扰能力差一些,带宽要求高的场合不适用。
IIC通信的同步和仲裁是自动进行的,可以了解,但不必掌握。
IIC总线物理层
在一个IIC通讯总线中,支持多个通讯主机及多个通讯从机,可连接多个IIC通讯设备。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备直接的访问。
一个IIC总线由SCL(串行时钟线)和SDA(双向串行数据线)两根线组成:
1. 数据线即用来表示数据(双向串行):设备输出电路用于向SDA线上发送数据;输入电路用于接收SDA线上的数据;
2. 时钟线用于数据收发同步,时钟信号从始至终都是由主设备发送。
各设备的SDA是“与”关系,SCL也是“与”关系: 总线空闲时,设备都是开漏输出,由电路中的上拉电阻Rp使SDA和SCL都保持高电平。当任一设备输出低电平时都会使总线上的信号线变低。
1. 当IIC设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态,由上拉电阻把总线拉成高电平。
2. 每个设备都可作为主机/从机且都有唯一的7/10位地址(7位的地址更多),但同一时刻只能有一个主机控制总线。在多个主机同时使用总线时,为了防止数据冲突,IIC会自启动仲裁功能,决定哪个设备先占用总线。
3. IIC三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4M/s,但目前大多IIC设备尚不支持高速模式。连接到总线的接口数量只由总线电容是 400pF 的限制决定。
IIC总线协议层
IIC的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等。
(一)空闲状态
在总线未被主机占用时,电路中的上拉电阻 Rp 使 SDA 和 SCL 线保持高电平状态,并等待主机启用总线。
(二)起始和停止信号
起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后,总线再次处于空闲状态。
1. 起始条件:在 SCL 线是高电平时 SDA 线从高到低的跳变
2. 停止条件:在 SCL 线是高电平时 SDA 线由低到高的跳变
3. 重复起始:在不产生停止条件时产生重复起始条件,会让总线一直处于忙的状态,该条件的功能和起始条件一样。
(三)应答信号
发送器每发送一个字节,会在第九个时钟脉冲期间释放数据线(低电平),由接收器反馈一个响应(ACK/NACK)。
1. ACK(应答信号):应答信号为低电平(0),表示接收器已经成功地接收了该字节;
2. NACK(非应答信号): 应答信号为高电平(1)时,一般表示接收器接收该字节没有成功。
1. 对于反馈有效应答位ACK的要求是:接收器在第九个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
2. 当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平(相当于NACK),主机再产生一个停止信号终止传输或者产生重复起始条件开始新的传输。
3. 如果接收器是主机,则在它收到最后一个字节后,发送一个NACK信号,以便通知发送器(从机)停止发送,并释放SDA线,以便主机发送一个停止信号P。(数据传输中有图例)
(四)数据的有效性
在IIC总线进行数据传输时,SCL时钟信号为高电平期间,SDA数据线上的数据必须保持稳定。只有在SCL时钟线上的信号为低电平期间,SDA数据线上的电平状态才允许变化。SDA数据线在SCL的每个时钟周期传输一位数据。
(五)七位地址的传输
起始信号后发送的第一个字节(8位)是从机地址+数据方向位。
从机地址共有 7 位,紧接着的第 8 位是数据方向位 R/ W(表示从机进行读/写)操作。
“0” 表示“写”发送数据,“1” 表示“读”请求数据。
(六) IIC的数据传输
数据位传输:边沿触发。 在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。
1. 发送到 SDA 线上的每个字节必须为 8 位,每次传输的字节数量不受限(字节为单位)。
2. 传输的数据方向:从高位->低位(第八位(R/W)->第七位->......->第一位)。
3. 每个字节后必须跟一个应答信号,若从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线 SCL 保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续。
4. 在某些情况下,可以用与IIC总线格式不一样的格式(例如兼容 CBUS 的器件)。甚至在传输一个字节时)可以通过产生停止条件来终止,此时不会产生响应 (遇到这种再说)。
此图片转自:
(12条消息) I2C协议靠这16张图彻底搞懂(超详细)_小麦大叔的博客-优快云博客_i2c电路图
(七)IIC基本读写过程
数据传输一般由主机产生的停止位 P 终止,起始信号和停止信号均由主机发送,在起始条件后面不能立刻跟着一个停止条件,主机和从机均可以当发送器/接收器。
1. 主机写数据到从机(写格式)
①S:起始信号(主机使用总线)
②SLAVE ADDRESS:从机地址 (7位/10位)
一般是7位,当主机广播的地址与某个设备的地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。
③R/W:数据方向位(R/W = 1/0,包含在含有从机地址的字节中),主机读/写数据(接收器/发送器)
④A(ACK)/A~(NACK):响应位(应答信号/非应答信号),发送器接收到接收器的应答信号(ACK)后才会发送下一个字节数据。
⑤DATA:传输的字节数据
⑥P:停止信号(数据传输结束,总线恢复空闲状态)
IIC写数据过程:主机发送起始信号(S)->从机地址(SLAVE ADDRESS,由主机广播寻址,从机地址7/10位+R/W1位数据方向位)->等待从机反馈应答信号(ACK)->主机传输字节数据->等待从机反馈应答信号(ACK)->...(n个字节+ACK(应答信号))...->主机发送停止信号(P)(主机传输完毕,总线回归空闲状态)
当从机不能响应主机时,从机在第九个时钟脉冲时,必须使数据线保持高电平(非应答信号NACK),主机会产生一个停止条件终止传输或者产生重复起始条件开始新的传输。
2. 主机在从机读数据(读格式)
IIC读数据过程:主机发送起始信号(S)->从机地址(SLAVE ADDRESS,由主机广播寻址,从机地址7/10位+R/W 1位数据方向位)->等待从机反馈应答信号(ACK)->从机传输字节数据->等待主机反馈应答信号(ACK)->...(n个字节+ACK(应答信号))...->当从机传输完毕/主机不想接收时,主机会发送非应答信号(NACK)->主机发送停止信号(P)
(传输完毕,总线回归空闲状态)
3. 通讯复合格式
在1和2中,主机接收/发送最后一个数据字节后仍希望在总线上通讯,则在接收器反馈最后一个响应位(ACK/NACK)后,主机不发送停止信号,并产生一个重复起始条件 Sr 和发送一个字节(寻址相同/不同从机地址+R/W位)。在这种传输过程中,可以有不同的读/写格式结合。