1 IIC
IIC 是一种由飞利浦公司(现恩智浦半导体)开发的简单、双向二线制同步串行总线。它主要用于连接微控制器和外围设备,如传感器、EEPROM(电可擦除可编程只读存储器)、实时时钟芯片等,能够在短距离内实现高效的低速数据传输。
IIC 总线仅使用两根线:串行数据线 SDA(Serial Data Line)和串行时钟线 SCL(Serial Clock Line)。这种简单的连接方式使得它在硬件设计上非常节省空间,并且可以方便地在一个系统中连接多个设备,实现多主多从的通信架构、总线仲裁已经同步功能的高性能串行总线技术。
1.1 总线组成
每一个连接到IIC总线上的器件都有一个唯一的器件地址(ID),主机通过ID建立多机通信机制,因此IIC总线节省了外围器件的片选信号线。虽然IIC总线上可以连接多个主机和多个从机,但是同一时刻,只能有一个主机向从机总线上发起传输,如果有多个主机同时发起传输,则会根据IIC总线的仲裁机制,最终只给一个主机授权,没有得到仲裁的主机则会停止传输。而且,IIC总线上只能由主机主动发起传输,从机无法主动发起传输,这也就意味着从机和从机之间也无法直接交换数据。【注:谁发时钟信号谁就是主机】
1.2 物理层
1、只有两条线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。时钟 线用于数据收发同步,数据线用于收发数据。
2、总线空闲时,两根线均为高电平状态。连接到总线任一器件输出的低电平都 将会总线拉至低电平状态。(总线上拉的上拉电阻,上拉电阻一般4.7K)
3、支持一主一从、一主多从、多主多从,但同一时刻只有一个主机向总线上发起传输。
4、传输速率:标准模式100k bit/s,快速模式 400k bit/s,高速模式 3.4M bit/s
1.3 协议层
空闲状态:两根线均为高电平状态。
起始信号(Start Signal):起始信号用于指示数据传输的开始。在SCL保持 高电平期间,把SDA从高电平拉低产生起始信号。起始信号由主机主动建立的,在建 立该信号之前 I2C 总线必须处于空闲状态。
数据传输(Data Transfer):数据传输发生在起始信号之后。在SCL为高电 平时,SDA必须保持稳定,只有在SCL为低电平时才允许SDA的电平状态改变。
应答信号(Acknowledge Signal):应答信号用于确认数据的接收。在主设备 发送完一个字节的数据后,它会释放SDA线,从设备接收到数据后,如果正确接收到 数据,会拉低SDA线作为应答信号。主设备在SCL的下一个时钟周期内检测SDA线的 电平状态,以确定是否成功接收。
停止信号(Stop Signal):停止信号用于指示数据传输的结束。在 SCL 保持 高电平期间, SDA 被释放,从低电平返回高电平。这表示当前的传输周期已经完成。 在停止信号之后,IIC总线进入空闲状态,准备下一次数据传输。
1.4 主从模式
IIC 总线是一种支持多主机多从机的通信总线,它通过设备地址对从机进行寻址,只有设备地址匹配的从机才会向主机发出应答,然后主机继续传输下一个字节。 而且,主机每发送一字节数据给从机,从机需要向主机发送一 bit的应答信号,当从 机给出有效应答后,主机才会继续传输下一个字节,以此保证主从与从机之间的正常 通信,因此 IIC 总线是一种具有流控机制的可靠串行总线。【 此外,在含有多主机的 IIC 总线上还会有总线仲裁器,它会对每个主机的总线抢 占权进行仲裁,以避免多个主机同时向总线发起通信造成碰撞。】
1.4.1 IIC 总线理论上可以挂载多少个从器件
由IIC地址决定,设备地址8位,其中1位(LSB)为广播地址(即R/W位),则 有7位是地址,2^7=128,广播地址0x00不用,那就是127个地址,固理论上可以挂 载127个从器件。
1.5 应答机制
在每一个字节数据传输完成后,接收方需要向发送方发送一个应答信号(ACK,Acknowledge)或者非应答信号(NACK,Not Acknowledge)。应答信号为低电平,表示接收方已经正确接收数据;非应答信号为高电平,表示接收方出现问题(如接收缓冲区已满等),希望发送方停止发送数据。
2 IIC总线数据传输格式
2.1 主机写与读操作
1、主机首先产生START信号;
2、然后发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W),“0”表示主机向从机发送数据(写),“1”表示主机从从机接收数据(读);
3、主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/W位将自己确定为发送器和接收器;
4、这时候主机等待从机的应答信号(ACK);
5、当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号;
6、当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号;
7、主机产生停止信号,结束传输过程。还有一种情况是从机发送非应答信号表示接受完毕后主机产生停止信号结束传输过程。
2.2 主机先写在读操作
1、主机首先产生START信号;【在这之前写入数据与前面一致】
2、然后紧跟着发送一个从机设备地址,注意此时该地址的第8位为0,表明是向从机写命令;
3、这时候主机等待从机的应答信号(ACK);
4、