基于ARM开发板从零开始学习STM32 06-I2C通信协议

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/huolu0602/article/details/102689026

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

物理层

它仅仅只需要两条总线线路,一条SDA(双向串行数据线),一条SCL(串行时钟线)。每一个连接到总线的设备都有一个独立的地址,因此主机可以通过地址来访问。当多个主机使用总线时,为了防止数据冲突,使用仲裁方式决定由哪个设备占用总线。具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 。连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

I2C协议层

I2C的协议包括起始和停止条件、数据有效性、响应、仲裁、时钟同步和地址广播等环节,由于我们使用的是STM32集成的硬件I2C接口,并不需要用软件去模拟SDA和SCL线的时序,仅需要了解它的原理即可。首先,由主机的I2C接口产生一个传输起始信号,这是连接到I2C总线的所有从机都会接收到这个信号。起始信号产生后,所有从机就开始等待主机紧接下来广播的从机地址信号。在 I 2 C 总线上,每个设备的地址都是唯一的。当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据 I 2 C 协议,这个从机地址可以是 7 位或 10 位。在地址位之后,是传输方向的选择位,该位为 0 时,表示后面的数据传输方向是由主机传输至从机。该位为 1 时,则相反。从机接收到匹配的地址后,主机或从机会返回一个应答(A)或非应答(-A)信号,只有接收到应答信号后,主机才能继续发送或接收数据。若配置的方向传输位为写数据,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为 8 位,主机每发送完一个数据,都要等待从机的应答信号(A),重复这个过程,可以向从机传输 N 个数据,这个N没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据。若配置的方向传输位为读数据,广播完地址,接收到应答信号后,从机开始向主机返回数据(DATA),数据包大小也为 8 位,从机每发送完一个数据,都会等待主机的应答信号(A),重复这个过程,可以返回 N 个数据,这个 N 也没有大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号(-A),则从机自动停止数据传输。

I2C接口特性

(1)STM32 的中等容量和大容量型号的芯片均有多达2个的I2C总线接口。

(2)能够工作于多主模式或从模式,分别为主接收器,主发送器,从接收器及从发。

(3)支持标准模式 100Kbit/s 和快速模式 400Kbit/s,不支持高速模式。

(4)支持7位或10位寻址。

(5)内置了硬件 CRC 发生器/ 校验器。

(6)I2C的接收和发送都可以使用 DMA 操作。

(7)支持系统管理总线(SMBus)总线 2.0 版。

                      

I2C的所有硬件架构就是根据SCL线和SDA线展开的(其中的 SMBALERT 线用于 SMBUS)。

SCL 线的时序即为I2C协议中的时钟信号,它由I2C接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。而 SDA 的信号则通过一系列数据控制架构,在将要发送的数据的基础上,根据协议添加各种起始信号、应答信号、地址信号,实现以I2C协议的方式发送出去。读取数据时则从SDA线上的信号中取出接收到的数据值。发送和接收的数据都是被保存在数据寄存器(DR)上的。

 

猜你喜欢

转载自blog.csdn.net/huolu0602/article/details/102689026