I2C

1、I2C协议简介
2、STM32的I 2C外设
3、固件库中的I2C

1、I2C协议简介
物理层:①②③④⑤⑥⑦⑧⑨⑩
①只有两根总线,分别是SCL总线(串行时钟线)、SDA总线(串行数据线)。主机和从机都要挂载在这两根线上。【CL代表时钟、D代表数据】
②寻址机制,在I2C总线上,有那么多设备,如何确定主机是和EEPROM通信,而不是其他传感器或者设备。因为每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的寻址。地址可以7位或者10位**,这个地址写在协议的前面就可以识别了。
③总线通过上拉电阻接到电源。当I2C上的一个设备空闲时,不需和其他设备通信,这个设备输出高阻态,而当所有设备都空闲时,都输出高阻态时,由上拉电阻把总线拉成高电平【高阻态:相当于像是那个设备的引脚与总线断开了,电阻非常大像是断开了一样,A、总线不受它的电压影响了,B、也防止3.3V 和 0V 产生短路。相互影响 :很多总线都这样,因为所有设备都连在总线上,很容易相互影响、干扰,高阻态是个好东西。在I2C里面有两个电压3.3V和0V,0V接地,3.3V不会是输入3.3V,而是高阻态。如果两个设备同时在I2C总线上,一个输入0V,一个输入3.3V,瞬间两个设备之间短路了,所以高电平和空闲都用高阻态来表示。】
在这里插入图片描述
④多个主机同时使用总线时,为了防止数据冲突,会利用仲裁的方式决定哪个设备用总线。当一个设备在工作,是逻辑0,其他设备是高阻态,没办法影响,那么其他设备即使也在工作,也报废了。所以,每当设备要工作之前都要检查一下,现在总线上有没有逻辑0,有没有设备在传输数据,如果有就等待一下子。
在这里插入图片描述
⑤有三种传输模式:根据时钟线的差别,标准:100kbit/s ,快速 :400kbit/s,高速:3.4Mbit/s。但目前大多I2C设备尚不支持高速模式。
⑥连接到相同总线的I2C数量收到最大电容的限制。
I2C协议层
①主机写数据到从机:老师讲课
STM32产生起始信号 -> 从机地址 -> 读写方向位 -> 从机应答 -> 传输数据 -> 从机应答 -> 传输数据 -> 从机不应答 -> 结束
从机地址是7位或者10位,在线上广播这个地址。读写方向位,是跟数据方向有关,如果数据位是0,代表写方向,主机写到从机,如果是1,代表是读方向。当从机得到匹配后,返回一个应答信号,主机知道从机可以使用。主机传输数据,每传输一个字节,从机应答一次,我接收到了。当从机的应答信号是不应答,代表传输要结束了,我接收不了了,要满了。
在这里插入图片描述
②主机由从机中读数据:老师提问
STM32产生起始信号,之后发出要提问的学生的地址,在读写方向位是设置为1,设置为从学生那里读取信息的模式,之后学生接到提问信号,回应一下他在,之后便传输信息DATA模式,STM32接收到信息回应,学生再传输信息,STM32回应,代表着学生还可以传输,如果STM32不想要了便回复非应答信号,之后由STM32出面结束。
在这里插入图片描述
③通讯复合格式
这种模式是为了方便主机在茫茫存储器地中读取想读取的地址,先来一个写方向把想要操作的寄存器地址写到EEPROM里面,再来一个读方向,再把信息返回回去。过程如下:传输起始信号 -> 广播设备地址 -> 写信号 -> 从机应答 -> 主机发送即将要读取的存储信息的地址 -> 存储器的内部地址或者传感器的寄存器地址-> 从机非应答 -> 读过程
在这里插入图片描述
④通讯的起始信号和终止信号:
当SCL线为高电平,SDA线由高电平向低电平切换,这个情况代表通讯开始。
当SCL线为高电平,SDA线由低电平向高电平切换,这个情况代表通讯结束。
起始信号和终止信号一般都由主机产生
⑤数据有效性:
SCL为高电平的时候SDA表述数据有效,在SCL为低电平时,SDA线进行数据切换。一个时钟传输一个bit.
在这里插入图片描述
⑥ 地址及数据方向:
一般用7个数据位表示从机地址,如果是主机写从机是0,主机读从机是1。如果说8位数据地地址就是把方向位加上了。
⑦响应
当数据发送端发送一个字节之后,进入高阻态,释放总线控制权,等待数据接收端的响应,在第九个时钟信号里面,如果数据发送端把SDA线拉低代表应答,接收端高阻态代表不应答。非应答信号用NACK表示。在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章