IIC通信协议(硬件实现IIC通信详解I)
IIC通信协议
什么是IIC协议
I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串⾏总线,⽤于连接微控制器及其外围设备。是微电⼦通信控制领域⼴泛采⽤的⼀种总线标准。 IIC通信由两根线构成,⼀根为信号线(SDA),另外⼀根为时钟线(SCL)。故IIC通信的物理层构成如下: 注意!此处的信号线与地址线都是总线。只要有⼀对设备在使⽤,总线便被占⽤,其他设备不能使⽤。
为了区分设备,每个连接到总线的设备都有⼀个独⽴的地址,主机可以利⽤这个地址进⾏不同设备之间的访问。当有多个主机同时使⽤总线时,为了防⽌数据冲突,会利⽤仲裁⽅式决定由哪个设备占⽤总线。 这⾥解释⼀下这个“地址“。这个地址是IIC设备的地址,在IIC通信中,需要指定传送设备的地址。这个应该很容易理解,最常⽤的IP协议也有IP地址之说,TCP协议也有端⼝之说。不指定地址,就⽆法得知数据要发送到哪⾥去,通信就⽆法构成。这个不需要过多赘述。 乳胶模具
但笔者在刚刚开始使⽤时,不知道这个地址究竟是以哪⼀种形式存在在通信中的。在MCU中,初始化IIC接⼝时,就需要你定义⼀个IIC地址,这就是你这个IIC接⼝的通信地址了(⼀般都是0)代码如下:
hi2c1.Init.OwnAddress1 = 0;
⽽我们⼀般⽤的IIC芯⽚的地址,如何得知呢?这个地址是以什么形态存在的?是连上MCU后MCU分配的吗?
IIC芯⽚的地址,都由IIC芯⽚⾃⾝决定。⽽且⼀般来说,都会提供⼏位(多数为3位)给⽤户⾃定义。拿LM75A温度传感器芯⽚来说,IIC通信地址为7bit,前4位是固定的(1001)后三位提供给⽤户⾃定义,做在引脚上通过⽤户输⼊的电平来决定地址位的⾼低。⽤户输⼊低电平,表⽰该位为0,⽤户输⼊⾼电平,表⽰该位为1。若把低三位拉低,地址就为0x90。如图:
协议层
S 表⽰传输起始信号,此时连接到 I2C 总线上所有的从机都会接收到这个信
号。
Slave Address 表⽰从机地址,此地址可以是 7 位或 10 位。当主机⼴播的地
址与某个设备地址相同时,这个设备就被选中了。
之后就是 R/W(传输⽅向选择位),该位为 0 时,表⽰后⾯的数据传输⽅向
是主机会写信息到被选中的从机;为 1 表⽰主机会向从机读信息。
当从机已经和从机“匹配”好了,那么此时主机或从机会返回⼀个应答(ACK)
或⾮应答(NACK)信号,只有收到信号后,主机才会继续发送或接收数据。这⾥的“继续”之所以提出来是因为发送和接收,对应从机发出的应答信号和主机发出的应答信号,是重复的。
热锻工艺
当主机向从机发送⼀个停⽌信号(P),表⽰不再传输数据。当主机希望停⽌
接收时,向从机返回⼀个(NACK),则从机⾃动停⽌数据传输。
这是IIC通信的数据帧。可以看出。通信由1位的起始信号,7位地址位,1位表⽰读写的信号位,⼀位ACK应答信号,⼀字节的数据位,1位ACK应答信号,⼀字节数据位……直到数据全部发送完毕,产⽣⼀位终⽌位。
硬币组合⽽IIC通信还⽀持⼀种⽐较复杂的通信模式。通信时和设备的某⼀寄存器进⾏通信。如图下⽅的数据帧。数据帧内发送了两段起始信号S。在第⼀段数据的DATA中,常常⽤于表⽰内部的寄存器地址,在第⼆次传输中,则是对内部的寄存器进⾏访问和读写
以上是IIC通信协议层读写的基本过程。
下⾯我们进⼀步了解每⼀个信号在IIC协议中是如何规定的
起始信号和停⽌信号
起始信号和终⽌信号是两种特殊的状态,如图 ,当 SLC 为⾼电平时 SDA 由
⾼电平向低电平切换,表⽰通讯的起始;当 SCL 是⾼电平时 SDA 由低电平向⾼电平切换,表⽰通讯的停⽌。这两种信号⼀般由主机产⽣。如图:
数据的有效性
组织培养瓶I2C 的 SDA ⽤来传输数据,SCL 进⾏数据的同步,如下图。SDA 数据线在SCL 的每个时钟周期传输⼀位数据。有效和⽆效看图即可,需要主要的是当 SCL为低电平时,SDA 数据⽆效,⼀般此时 SDA 进⾏电平转换,为下⼀次表⽰数据做好准备
传输⽅向依靠R/W位来判断路灯节电
应答信号:响应包括应答(ACK)和⾮应答(NACK)两种。当设备(主机或从机)接收到 I2C 传输的⼀个字节数据后,若希望对⽅继续发送数据,则需要向对⽅发送应答(ACK)信号,发送⽅则会继续发送数据;若接收端希望结束数据传输,则向对⽅发送⾮应答(NACK)信号。发送⽅收到后会产⽣停⽌信号,结束数据发送。
以上为IIC协议层内容。STM32的IIC架构和STM32中的IIC接⼝如何使⽤,下⼀部分来提及。
课堂教学模式
后篇:
1. 指多个设备公⽤的信号线,在⼀个 I2C 通讯总线中,可连接多个 I2C
设备通讯,⽀持多个通讯主机及多个通讯从机