您的位置  > 互联网

I2C通讯协议物理层和协议层的简单通信知识经验

按照学习通信协议的套路,下面讨论I2C的物理层和协议层。

物理层

在上图中我们可以看到:

那么根据我们所掌握的简单的通信知识和经验,我们可以得出以下初步结论:

有了上面的初步了解,在看协议的具体内容时,我们就能很快接受并记住I2C的物理层特性。

物理层特性 它是支持设备的总线。 可连接多个I2C通信设备,支持多个通信主从。 连接到总线上的每个设备都有一个独立的地址。 总线通过上拉电阻连接到电源。 当I2C设备空闲时,会输出高阻状态。 当所有设备空闲且全部输出高阻状态时,上拉电阻会将总线拉至高电平。 当多台主机同时使用总线时,为了防止数据冲突,采用仲裁的方式来决定哪个设备占用总线。 它具有三种传输模式:标准模式传输速率为/s,快速模式为/s,高速模式可达3.4Mbit/s。 连接到同一总线的IC数量受到总线最大电容400pF的限制。 协议层

协议层定义:

说白了,它定义了传输过程中01字符串的含义。

传输过程

我将最基本的操作(例如启动和停止信号以及响应信号)称为原子操作。

在讨论如何实现原子操作之前,我们首先对I2C传输流程有一个整体的了解。

粗略地说,I2C传输过程中存在三种情况:写、读、混合读写。

写作过程

从上图可以看出,整个编写流程由以下几个部分组成:

这是一个非常严格的过程。 每次发送特定消息时,都需要等待对方的回复。 只有确认接收端已经收到后,才会继续发送数据。 最大程度保证了数据传输的可靠性。

值得注意的是,这里的从机地址协议规定可以选择7位或10位,但大多数情况下都使用7位地址。

阅读过程

整个阅读过程由以下几个部分组成:

读写混合模式

读写混合的过程比读写分离模式要复杂一些。

它在一次通信中有两个操作:

具体流程有以下几个部分:

根据我的初步研究分析,之所以有三种模式,应该是对应三种不同的需求:

原子操作

上述传输过程是比较宏观的。 我们来看看I2C是如何实现上述信号的。

下面的实现都是协议特定的设计,是人为定位的。 虽然它们有一定的内部设计逻辑,但你只需要记住定义即可。

启动和停止信号

当下列条件同时满足时,为启动信号:

当下列条件同时满足时,为终止信号:

数据表示

也称为数据有效性,它具体定义了01数据的级别表示。

1的表示:

0 表示:

当SCL为低电平时,SDA没有意义。 此时01表示切换。

从上面的定义可以看出,I2C在一个时钟周期内只能传输1位数据。

总结以上几点:当SCL为高电平时,数据有效。

地址和数据方向

协议将地址定义为7位或10位。 这个你可以自己选择。 一般选择7位。

原因很简单,一个字节就是8位。 7个地址位+方向位正好是一个字节。

因此,有两个对应的地址名称需要注意:

回复

接收端每收到一个字节信号,就必须向发送端发送一个确认(ACK)或无响应(NACK)信号。

协议规定该信号在发送一个字节数据后的第9个时钟周期内产生。

此时,如果SDA为低电平,则表示响应信号,否则为非响应信号。

概括

有了上面对I2C协议的了解。 你会发现,所谓xxx通信协议,是指总线上的控制电平按照协议标准发生变化。 只要能够达到协议规定的特征级别,协议就可以实现。 因此,软件和硬件都可以实现该协议通信。 不同的是软件实现会消耗CPU资源,而硬件通信可以减轻CPU的负担。