嵌入式通信协议-IIC

[复制链接]
查看690 | 回复6 | 2024-1-14 10:48:00 | 显示全部楼层 |阅读模式

本帖最后由 timo 于 2024-1-14 11:48 编辑

简介

IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。

这里要注意IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI

物理层

20200212223950467.png

IIC一共有只有两个总线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL

SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的

SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

通信过程

image.png

仲裁机制

连接多于一个微控制器到I²C总线的可能性意味着超过一个主机可以同时尝试初始化传输数据。为了避免由此产生混乱,发展出一个仲裁过程。它依靠线与连接所有I²C总线接口到I²C总线。

如果两个或多个主机尝试发送信息到总线,在其他主机都产生“0 ”的情况下首先产生一个“1” 的主机将丢失仲裁。仲裁时的时钟信号是用线与连接到SCL线的主机产生的时钟的同步结合。

在I²C总线上产生时钟信号通常是主机器件的责任;当在总线上传输数据时,每个主机产生自己的时钟信号。主机发出的总线时钟信号只有在以下的情况才能被改变:慢速的从机器件控制时钟线并延长时钟信号,或者在发生仲裁时被另一个主机改变。

用时钟同步机制作为握手

时钟同步机制除了在仲裁过程中使用外,还可以用于使能接收器处理字节级或位级的快速数据传输。

在字节级的快速传输中,器件可以快速接收数据字节,但需要更多时间保存接收到的字节或准备另一个要发送的字节。然后,从机以一种握手过程(见图6)在接收和响应一个字节后使SCL 线保持低电平,迫使主机进入等待状态,直到从机准备好下一个要传输的字节。

在位级的快速传输中,器件(例如对I²C总线有或没有限制的微控制器)可以通过延长每个时钟的低电平周期减慢总线时钟。从而,任何主机的速度都可以适配这个器件的内部操作速率。

在Hs 模式中,握手的功能只能在字节级使用。

信号

起始信号

数据传输

【技术大神】用C8051F380实现特殊的IIC时序

IIC原理超详细讲解---值得一看-CSDN博客

典型时序

单一收发数据

IIC要不主机给从机发数据

要不,从机给主机发数据

区别在于7位地址后的一位

0为主机发,1为主机收

image.png

同时收发数据

由于IIC要不只能发,要不只能收,于是有了这版,既可以发也可以收

区别在于,发送完数据后,不发送停止信号,直接再次发送起始信号

这样避免了中途发送停止信号后,被其他主机占用总线情况 image.png

回复

使用道具 举报

1084504793 | 2024-1-14 14:38:05 | 显示全部楼层
回复

使用道具 举报

干簧管 | 2024-1-14 18:22:42 | 显示全部楼层
回复

使用道具 举报

san | 2024-1-14 20:47:55 | 显示全部楼层
回复

使用道具 举报

bzhou830 | 2024-1-15 08:36:10 | 显示全部楼层
选择去发光,而不是被照亮
回复

使用道具 举报

WT_0213 | 2024-1-15 08:37:13 | 显示全部楼层
回复

使用道具 举报

爱笑 | 2024-1-15 09:28:02 | 显示全部楼层
用心做好保姆工作
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则