IIC的物理层特点
SCL和SDA是两根总线, 支持多设备。所有要进行通信的设备都要引出两个引脚,连接到这两根总线上。
- IIC协议只使用两条总线,** 一条双向的串行数据线(SDA), 一条串行时钟线(SCL)**,一根数据线,一次只能传输一位。用到时钟,是同步通讯
- 每个连接到上边的设备都有个独立的地址,主机能利用这个地址进行不同设备之间的访问。
- 总线通过上拉电阻接到电源,当IIC设备空闲时,设备输出高阻态,当所有设备都空闲时,所有设备都输出高阻态,上拉电阻会把总线拉成高电平
- IIC的传输模式,具有多种传输速度,标准100KBit/s,快速模式400KBit/s,高速模式3.4MBit/s,大多数IIC设备不支持高速模式,传输速度由时钟的频率决定,频率越高自然越快。
- 当多个设备通信时,会有优先级、仲裁
IIC的协议层
IIC的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节
1、IIC读写的基本过程(以stm32和EEPROM通信为例)
1、写数据
- 首先由主机发送一个开始信号
- 然后主机在数据总线上广播从机地址
- 确定数据的传输方向(是读还是写)
- ‘ A ’ 代表EEPROM的应答,因为主机广播了地址,EEPROM知道在找它,产生应答信号发往主机
- 主机发送一个字节的数据,从机接收到之后,会返回给主机一个应答信号,直到从机返回一个非应答信号,主机才会停止线传输,并发送一个停止信号。
2、读数据
对于主机读数据,开始信号,地址、读写控制信号、应答信号,仍然由主机产生,从机在一个响应信号之后,发送一个字节的数据给主机,这时是主机产生应答信号,然后从机继续给主机传输,直到主机说我不要了,产生非应答信号,主机最后在发送一个停止信号。
2、通讯的起始和停止信号
- 当SCL线是高电平时,SDA从高到底的过程表示起始信号
- 终止信号:SCL线高电平时,检测到SDA上升沿则为终止信号
- 起始和终止信号都是由主机产生
3、数据有效性
IIC在传输数据的时候,仅当SCL线为高电平时,SDA表示的数据才有效。高电平采集数据,低电平切换数据
4、地址
在配置从机地址的时候,一般地址用7位2进制数表示,但是一般情况下,会和最后的读写控制位合并,正好一个字节
5、主机的发送和从机的响应
当主机发送完成数据之后,主机会释放SDA线的控制权,,怎么释放?让发送端处于高阻态,就相当于断开状态,在下一个高电平时刻,数据总线的控制权交给数据接收端。由接收端产生应答信号ACK(或者非应答信号NACK)
IIC的具体配置
时钟
IIC的时钟是由CCR的低12位来决定的 Thigh和Tlow是SCL线的高低电平持续的时间,可以看出在标准模式下,SCL的高低电平持续时间是一样的。
数据控制部分
- DATA REGISTER数据寄存器8位有效,数据寄存器通过数据移位寄存器,一位一位的从SDA线上传输,这个移位寄存器是缓存的作用
- 比较器:当作为从机的时候,主机要广播一个地址,这个比较器的作用就是,把自己自身地址寄存器的值和总线上收到的地址作比较,以便知道是否是在 “叫自己” 。
- PEC做错误校验,一般不用
发送过程
发送过程有两行,第一行是操作控制寄存器(CR),第二行是操作完之后的检验是否完成的事件,严格符合IIC的通信标准