协议层
已更新到SPI:新版协议,IIC、SPI
IIC总线:(inter IC bus)
参考IIC学习链接:
CSDN博客,IIC详解
B站视频—江科大,IIC详解
1、两条线:SDA、SCL。所以是同步半双工模式。
SDA:数据线--------------半双工
SCL:时钟信号------------同步
2、IIC总线,何为总线,即IIC协议的这两条线:SDA、SCL上可以挂载其他支持IIC协议的设备。即:支持一主多从、多主多从
此时,就需要引入一个概念:IIC器件地址,每个IIC硬件都会有一个地址信息,(可类比为:MAC地址)。举个例子:EEPROM,前四个地址已经确定了的:1010,后面三个地址有硬件确定的,所以一个IIC总线上只能最多连接8个EEPROM器件。第8位为读写位。
当主机连接从机的时候,从机会将自己的一个地址信息发送到总线上,多个从机就会依次发送。均会被保存到主机上面。
当主机需要给IIC总线上的某个IIC设备发送信息时,均需要先发送一个IIC地址信息,当有IIC从机的地址信息与BUS总线上的信息匹配时,从机会给主机发送一个应答信号。从而建立通讯。
类似于:
上课老师(主机)点名,每个学生(从机)都有唯一的学号信息(地址)。现在老师要开始提问了(主机开始发送数据),“9527,请学号:9527的同学起来回答老师的问题”。(此时9527就是一个IIC从机的地址信息)。此刻,全班的同学都收到了这条消息。只要学号为:9527的同学站了起来,并回答道:老师,我在。(给主机发送应答信号)。老师表示点点头,并开始想该学号为:9527的同学提问。(总计收到从机的应答,并成功建立连接,开始主机和从机间的通讯。)
注意:倘若此时,这个班上的同学,没有学号为:9527的;或该同学今天请假了,那么老师的提问,就不会有同学应答。
那么此刻会出现两者情况:
1、没有同学回答。(忽略该消息)
2、有同学给老师说:该同学请假了(返回一个错误信息响应)
上面的例子是:一主多从,但是IIC也是支持多主多从的。所以如果突然有同学突然说:老师,你不行,让我来。然后这个同学就上去讲了。老师和其余的同学就开始听他讲课了。这个时候呢,老师就变成从机了,这个讲课的同学就变成的主机。
总之呢:谁说话,谁就是主机,但是一个时间段,只能有一个主机
线与:
其中这个“与”,就是与、或、非中的与。表明:主要有一个拉低SDA,那么总线上的SDA线,就一直为低电平。直到所以设备都放手(不拉低)。可理解为:有0全0。
时序流程:
-
起始条件:SCL高电平期间,SDA从高电平到低电平的一个跳变。
-
终止条件:SCL高电平期间,SDA从低电平到高电平的一个跳变。
-
发送一个字节:
SCL低电平期间,主机将数据依次放在SDA线上(高位先行),然后释放SCL(SCL被弱拉高),从机将在SCL高电平期间读取SDA数据位。 注:在SCL高电平期间,SDA的数据必须保持稳定、不变。 否则就产生了终止条件了
-
接受一个字节:
SCL低电平期间,从机将数据依次放在SDA线上(高位先行),然后释放SCL(SCL被弱拉高),主机将在SCL高电平期间读取SDA数据位。 注:在SCL高电平期间,SDA的数据必须保持稳定、不变。 否则就产生了终止条件了
-
指定地址写:对指定设备,在指定地址下,写入指定数据。
起始信号 + 发送7位从机器件地址+读写位(0:写入需要读取的地址) + 发送8位需要读写的地址(移动从机的指针地址) + 发生需要写入的数据。(将data写入到指定指定地址)
-
当前地址读:对指定设备,在当前地址下,读取从机数据。(未指定读取地址,一般默认为0)
起始信号 + 发送7位从机器件地址+读写位(1:读取) + (主机不在发送数据,转换对象。从机开始操作SCL,向SDA中依次放入数据,释放SCL,主机在SCL高电平的时候,就开始读SDA。) + 主机开始接受从机发送的数据
-
指定地址读:对指定设备,在指定地址下,读取数据。(指定地址写 + 当前地址读)
起始信号 + 发送7位从机器件地址+读写位(0:写入需要读取的地址) + 发送8位需要读写的地址(移动从机的指针地址) + 重新发送一个起始信号 + 发送7位从机器件地址+读写位(1:读取) + 主机开始接受从机发送的数据。
特点:谁控制SCL(时钟线),谁就是主设备
-
支持一主多从,多主多从。(IIC器件地址)
期间地址: 分7位或者10位,但是一般采用的是7位,加一位读写位。
-
SCL、SDA都要接上拉电阻(一般是4.7K),保证数据稳定性。
-
为了避免总线信号的混乱,要求各设备连接到总线的输出端均为:漏极开路、或集电极开路
读写位。
* SCL、SDA都要接上拉电阻(一般是4.7K),保证数据稳定性。
* **为了避免总线信号的混乱,要求各设备连接到总线的输出端均为:漏极开路、或集电极开路**