I2C通信(读写EEPROM)

谁都会走 提交于 2020-01-07 02:05:33

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

I2C协议简介

I2C通信协议(Inter-Integrated Circuit)是由Phiilps公司开发的,它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通信协议的外部收发设备,被广泛的应用在系统内多个集成电路(IC)间通讯。

它是一个多设备总线,即总线可以挂载多个I2C通信设备,支持多个通讯主机及多个通信从机。I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。

每条连接到总线的设备都有一个独立的地址(7位地址或者10位地址),主机可以利用这个地址进行不相同设备之间的访问。

I2C物理层

在电路中有三种状态

①高电平表示逻辑 1

②低电平表示逻辑 0

③高阻态

当通讯设备为高阻态时,即电阻很大,就像和总线断开一样

当通讯设备想表达逻辑1的时候或者空闲时,都要设置高阻态

所以当配置I2C引脚时不能配置成推挽输出,而是要配置成开漏输出(一般用在总线上输出高阻态)

总线数目受到电容限制

I2C协议层

主机写数据到从机

主机先广播从机的地址,在地址后面的这一位表示读写位,0表示写,当有这个地址的从机时,从机会回复一个应答位(ACK),然后主机向从机写数据,每发一个字节的数据,从机会回复一个应答位,当从机无法接收数据时,会回复给主机一个非应答信号,主机会发送一个停止位

主机由从机读数据

由从机读数据与写数据到从机略有不同,首先读写位不同,因为是读数据所以读写位为1,然后从机向主机发送数据,主机来回复应答信号,当主机不在接收数据时,主机会回复一个非应答信号,并发送一个停止信号,注意这里的停止信号也是主机发送的。

复合格式

是由写后读复合而成

写方向(设备地址)---写入数据(存储器的内部地址或寄存器)即先选择由从机哪个地址开始,再来读和写

通讯的起始和停止信号

起始和停止信号都是由主机产生的

数据有效性

地址及数据方向

1个字节(8位)

7位的设备地址+1个读写位

举例:

0x78 + 1 =8位设备的读地址 = 0xF1

0x78 + 0 =8位设备的写地址 = 0xF0

响应

当主机向从机写数据时,主机的数据位会在应答位时主动释放数据线SDA的控制权 ,来接收从机数据线SDA的应答信号

STM32的I2C特性及框架

在业界都了解,STM32片上外设的硬件协议会出现一些BUG,但对于初学者并没有什么影响

STM32的I2C硬件框架刨析

SMBA总线用的比较少

时钟控制逻辑

由时钟控制寄存器(I2C_CCR)控制

第15位控制I2C速度模式

0:标准模式I2C 100kbit/s

1:快速模式I2C 400kbit/s

在I2C标准模式或SMBus模式下:

Thigh = CCR ×TPCLK1(高电平时间), TPCLK1为AHB1时钟, CCR的值由我们自己写上去

Tlow = CCR ×TPCLK1(低电平时间) TPCLK1为AHB1时钟 同上

当想设置快速模式时,应该设置DUTY位设置占空比

0:低电平的时间是高电平的时间的2倍

1:低电平的时间是高电平的时间的16/9倍

[图片]

数据控制逻辑

地址及数据方向

I2C为高位先行的

STM32的I2C通信过程

1、做为主发送器

2、做为主接收器

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!