[应用相关]

UART、SPI、I2C通信协议入门基础

[复制链接]
55432|283
手机看帖
扫描二维码
随时随地手机跟帖
gaoyang9992006|  楼主 | 2021-5-19 16:27 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2021-5-20 22:31 编辑

#申请原创# @21小跑堂

帖子内容只有I2C的,完整的下载文后的PDF
游客,如果您要查看本帖隐藏内容请回复

一、 协议1.1   通信简介
I²CInter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。 结合了SPIUART的最佳功能。使用 ,您可以将多个从机连接到单个主机(类似 SPI),另外,您可以让多个主机控制单个或多个从机。当您希望多个微控制器将数据记录到单个存储卡或将文本显示到单个 LCD 时,这个特性就非常有用了。与UART 通信一样, 仅使用两根电线在设备之间传输数据:
4535660a4c9c92510f.png

SDA (Serial Data) – 这条线为主机和从机提供数据发送和接收功能。
SCL (Serial Clock) – 这条线为时钟信号线。
SPI 一样,I2C 是同步的,因此位的输出通过主机和从机之间共享的时钟信号同步到位的采样。时钟信号总是由主机控制。
  
使用线数
  
2
最大速度
标准模式(Standard  mode)   =100kbps
快速模式(Fast  mode)       =400kbps
高速模式(High  speed mode)=3.4Mbps
超快速模式(Ultra  fast mode)=5Mbps
同步/异步
同步
串行/并行
串行
最大主机数
不限制
最大从机数
1008
1.2 的工作原理(HOW WORKS
使用 ,数据在消息中传输。消息被分解成数据帧。每条消息都有一个地址帧,其中包含从机的二进制地址,以及一个或多个包含正在传输数据的数据帧。该消息还包括每个数据帧之间的启动和停止条件、读/写位以及ACK/NACK位:
7475260a4c9d93c91b.png

启动条件(StartCondition):SDA 线在SCL线从高到低切换之前从高电位切换到低电位。
停止条件(StopCondition):SDA 线在SCL线从低到高切换之后从低电位切换到高电位。
地址帧(AddressFrame):每个从机都有唯一的7位或10位数列,主机可以通过该序列识别从机,主机如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址。
/写位(Read/Write Bit):指定主机是向从机发送数据(低电位)还是请求从机发送数据(高电位)的1个位。
ACK/NACK位(ACK/NACK Bit):在一条消息中,每一帧后都跟随1个确认应答(ACK)/非确认应答(NACK)位。如果一个地址帧或数据帧是被成功接收,一个确认应答位(ACK bit)将从接收设备返回给发送设备。
1.3  寻址(ADDRESSING
没有像SPI这样的从机片选接口线,所以它需要另一种方式让从机知道数据被发送到它,而不是另一个从机。它需要通过寻址来实现。地址帧始终是新消息中开始位后的第一帧。
主机将它想要与之沟通的从机的地址发送给与之相连的每一个从机。然后,每个从机将从主机发送的地址与自己的地址进行比较。如果地址匹配,它会向主发送低电压ACK位。如果地址不匹配,从机什么都不做,SDA线仍然很高。
1.4  /写位(READ/WRITE BIT
在地址帧的末尾包含一个单独的位,用于通知从机,主机是否想向它写数据还是想从它接收数据。如果主机要将数据发送给从机,读/写位是低电位;如果主机请求来自从机的数据,则该位为高电位1
1.5  数据帧(THE DATA FRAME
在主机检测到从机发出的ACK位后,第一个数据帧已准备好发送。
数据帧始终为8位长,并且首先发送最重要的位。每个数据帧后面都立即有ACK/NACK 位,以验证帧是否已成功接收。在发送下一个数据帧之前,主机或从机(取决于谁发送数据)必须接收ACK位。
在发送完所有数据帧后,主机可以向从机发送停止条件以停止传输。停止条件是在SCL线路上从低到高过渡后,SDA线的电压从低到高过渡,SCL线保持高位。
1.6 数据传输的步骤(STEPS OF I2C DATATRANSMISSION
1. 主机发送启动条件给每一个连接的从机,在SCL线从高到低切换之前,主机将SDA线从高切换到低电平即可触发启动条件,即在SCL高电平时候给SDA一个下降沿,如下图所示,注意箭头的时序方向:
7683460a4c9f907d88.png

2. 主机发送它想与之沟通的7位或10位从机地址,以及读/写位:
84760a4ca078aebc.png

3. 每个从机将从主机发送的地址与自己的地址进行比较。如果地址匹配,则从机通过将SDA 线拉低1个位来返回ACK位。如果主机的地址与从机自己的地址不匹配,则从机会将SDA线留在高电位(通过上拉电阻)。地址匹配的从机返回ACK位如下图所示:
9796460a4ca1837505.png

4.主机发送或接收数据帧:
1915060a4ca270f910.png

5. 传输每个数据帧后,接收设备会将另一个ACK 位返回给发件人,以确认成功接收帧:
1461560a4ca34d9d50.png

6. 为了停止数据传输,主机发送一个停止条件给从机,通过在SDA拉高之前先拉高SCL,即在SCL高电平时候给SDA一个上升沿,如下图所示,注意箭头表示的传输顺序:
1984960a4ca43b7550.png

1.7 单主机与多从机(SINGLE MASTER WITH MULTIPLE SLAVES
由于 使用寻址,因此可以实现单个主机控多个从机。使用7位地址理论上可提供 1282^7)个唯一地址。使用10位地址并不常见,但理论上可提供10242^10)个唯一地址。要将多个从机连接到单个主机,请像下面这样将它们连接起来,并用4.7K Ohm上拉式电阻器将SDASCL线连接到Vcc
9389360a4ca535ffb9.png

1.8  多主机与多从机(MULTIPLE MASTERS WITH MULTIPLE SLAVES
多个主机可以连接到一个单一的从机或多个从机。在多主机系统总,当两个主机尝试同时通过SDA线发送或接收数据时,问题就出现了。为了解决这个问题,每个主机在传输消息之前需要检测SDA线是低电平还是高电平。如果SDA线为低电平,则意味着另一个主机正控制着总线,该主机应等待发送消息。如果SDA线被拉高,则传输消息是安全的。
要将多个主机连接到多个从机,请按下图连接,并使用4.7K Ohm上拉式电阻器将SDA SCL线连接到Vcc
3810060a4ca82b5dcd.png

1.9 的优缺点(ADVANTAGES AND DISADVANTAGES OF
优势
仅使用两根电线
支持多个主和多个奴隶
ACK/NACK 位确认每个帧都成功传输
硬件不如UART复杂
众所周知和广泛使用的协议
缺点
数据传输速率低于SPI
数据框架的大小限制为8位
实现所需的硬件比SPI更复杂
1.10 总结
总线由9bit的块构成。开始条件:当SCL是高电平时候SDA从高到底跳变的下降沿,作为开始条件。在总线上的所有从机都要开始注意了:
1225260a4ca90d4dff.png

地址位为紧跟开始条件的7bit数据,主机想要与该地址从机沟通:
1271160a4cab20d5d8.png

读写位为紧跟7bit地址后的第8位作为读写选择位:该位用于表示主机是想读从机的数据还是想往从机里写数据:为1表示读;为0表示写。
7399160a4cabde5b98.png

主机和从机之间的同步位:0表示ACK1表示NACK0:我在或数据已接收。1:没有我或数据未接收。
1205260a4cace76977.png

数据字节:在地址字节后的8位是来自主机或从机的数据字节。至于来自谁,要看读写位。当写周期,主机发送数据;当读周期,从机发送数据:
28360a4cadc44271.png

停止条件:当SCL是高电平时,数据线SDA从低电平跳变到高电平产生的上升沿作为停止条件。主机通知从机本次沟通结束。
3590360a4caf8590b0.png

完整的 总线协议时序如下图所示:
1694960a4cb021a1c5.png

1.11 备注
本笔记图中带箭头的表示时序传递的优先顺序,箭头表示数据传输的方向或先发生的时序。1.10小结没有标注箭头,以左侧作为先发生的时序,请勿与前面的图弄混。

翻译来自www.circuitbasics.com**,并加上了自己的理解,另外部分翻译来自飞利浦相关技术文档。
PDF下载,后续会添加上UART和SPI,以及其他常用的数据接口学习笔记。
下载地址回复可见
游客,如果您要查看本帖隐藏内容请回复



使用特权

评论回复
评论
zt1997 2021-6-21 14:24 回复TA
跟着大佬脚步走 
谋hunter 2021-6-16 10:40 回复TA
Mark 看看看看,研究下 
zt1997 2021-6-9 15:05 回复TA
学习学习 
北辰溪 2021-6-7 19:36 回复TA
很经典,赞一个 
xp1834431261 2021-6-7 19:24 回复TA
来看看,看看看 
cooldog123pp 2021-5-26 19:26 回复TA
确实是基础知识! 
苦茶微微凉 2021-5-25 17:51 回复TA
学习一下看看 
wcheng13| | 2021-5-19 16:41 | 显示全部楼层
Mark 看看看看,研究下

使用特权

评论回复
643757107| | 2021-5-19 19:33 | 显示全部楼层
精彩,下载学习收藏。

使用特权

评论回复
xinpian101| | 2021-5-19 19:34 | 显示全部楼层
Mark 看看看看,研究下

使用特权

评论回复
hunyuanqi| | 2021-5-20 09:37 | 显示全部楼层
看看,学习学习。

使用特权

评论回复
laocuo1142| | 2021-5-20 09:51 | 显示全部楼层
看看,学习学习。

使用特权

评论回复
gaoyang9992006|  楼主 | 2021-5-20 22:35 | 显示全部楼层
laocuo1142 发表于 2021-5-20 09:51
看看,学习学习。

更新了,可以重新下载,现在3个串行通信协议了。

使用特权

评论回复
gaoyang9992006|  楼主 | 2021-5-20 22:35 | 显示全部楼层
hunyuanqi 发表于 2021-5-20 09:37
看看,学习学习。

更新了,可以重新下载,现在3个串行通信协议了。

使用特权

评论回复
gaoyang9992006|  楼主 | 2021-5-20 22:35 | 显示全部楼层
wcheng13 发表于 2021-5-19 16:41
Mark 看看看看,研究下

更新了,可以重新下载,现在3个串行通信协议了。

使用特权

评论回复
yklstudent| | 2021-5-21 06:52 | 显示全部楼层
感谢楼主分享

使用特权

评论回复
gxs64| | 2021-5-21 14:39 | 显示全部楼层
看看,学习学习。

使用特权

评论回复
wanduzi| | 2021-5-21 17:14 | 显示全部楼层
做的不错,下载学习。

使用特权

评论回复
sangshu| | 2021-5-21 17:59 | 显示全部楼层
看看看看看看看看看看看看

使用特权

评论回复
sangshu| | 2021-5-21 17:59 | 显示全部楼层
看看看看看看看看看看看看看看

使用特权

评论回复
sangshu| | 2021-5-21 18:00 | 显示全部楼层
看看看看看看看看看看看看

使用特权

评论回复
arima| | 2021-5-21 21:56 | 显示全部楼层
感谢楼主分享

使用特权

评论回复
未见| | 2021-5-22 07:28 | 显示全部楼层
Mark 看看看看,研究下

使用特权

评论回复
chenghaichao| | 2021-5-22 14:26 | 显示全部楼层

看看,学习学习。

使用特权

评论回复
LRC123| | 2021-5-22 14:55 | 显示全部楼层
讲得不错

使用特权

评论回复
goodnyf123| | 2021-5-22 16:35 | 显示全部楼层
点赞  学习学习

使用特权

评论回复
评论
HRC22 2021-6-8 16:14 回复TA
学习了,感谢大佬分享 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1888

主题

15607

帖子

197

粉丝