OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6803|回复: 9

IIC与SPI及UART通讯原理讲解

[复制链接]

2

主题

2

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-21
在线时间
7 小时
发表于 2019-2-21 15:12:20 | 显示全部楼层 |阅读模式
本帖最后由 浪矢杂 于 2019-2-21 15:17 编辑

回归山顶洞人时期,简单聊一下IIC SPI UART
假如你在一个有电的山顶洞人时期,但你们若干个部落之间正懊恼如何通讯的呢,这时秀儿他来了。

IIC
先解决一些基础问题,定下了一些规则。
1. 他在你们所有部落中架起了两条线,一条叫双向串行数据线(SDA)看名字就是到是用来传数据的一条串行时钟线(SCL) 相当你们部落的一个共同时间用来约定通讯时间让你们达到同步性。(一个I2C 总线只使用两条总线线路
2. 这两条线上的部落都有一个通讯地址(相当于现在的门牌号),在通讯前你肯定要说你和哪个部落通电话是吧。不然不就乱套了嘛。(每个连接到总线的设备都有一个独立的地址
3. 由于你们可能多个部落同时通讯,为了防止通讯错乱,就请一个人来做仲裁 ,决定先给哪个部落用通讯线路。(多个主机同时使用总线时会利用仲裁方式决定由哪个设备占用总线
[size=12.0000pt]4. 还有就是你们说话的速度也要约定,不然你说两分钟我才听一分钟那就不行了。(具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s
然后就来个通讯示范
图片1.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4A.tmp.jpg
芬儿在隔壁部落有一个恋爱对象彬儿,今晚芬儿想约彬儿去虚拟,于是。。。
他们得到了仲裁牙儿的同意可以使用通讯线路
于是芬儿:S(起始信号,接下来就是他的表演时间了)+SLAVE ADDRESS (从机地址,彬儿部落的门牌号)+传输方向的选择位芬选择要说还是要听)
于是彬儿:(应答ACK):好!你说吧!  [从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据]  
于是芬儿:传输数据(DATA) 数据包的大小为 8 )今晚。。。。。
于是彬儿:(应答ACK):哦,知道了
说多少话都没有限制,但是芬说完一句彬一定要回应,芬才会接着说,不然对方不在听而你还在自言自语。(主机每发送完一个字节数据,都要等待从机的应答信号(ACK)主机才能继续发送数据
最后芬儿:(停止传输信号(P)):那今晚B3-4楼等你,再见宝贝!么么哒!(当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据
写和读(反过来通讯)都差不多 不做过多解释!到现在你应该有一个比较清晰的总体框架了。那下面我就一本正经的补全你脑子里的框架了。(程序你只要单独写好下面几个部分的程序,然后配合使用就可以完成了)
一.起始&停止信号
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4B.tmp.jpg
图片2.png
二.发送&接收单个字节(数据有效性 )
图片5.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4C.tmp.jpg
三.三.应答&非应答
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5D.tmp.jpg
图片4.png
到此所有IIC通讯框架完成。通讯按规定来传输即可。


SPI
由于IIC是在所有的部落中对照门牌号来找通讯部落的不方便花心的你,而且通讯只能一方说一方听,不方便心急的你,所以SPI来了。
图片6.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5E.tmp.jpg
这时你应该知道了吧,SPI可以让你边说边听,是不是相对于IIC来说通讯速率提高了。
而且它不用应答了。
下面就在一本正经的讲一下SPI:
图片7.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5F.tmp.jpg
SPIIIC一样有起始和停止信号,数据有效性

1. 起始&停止信号
有点像现在的对讲机按下说话一样。起始信号:NSS 信号线(片选线 S)由高变低,是 SPI 通讯的起始信号。停止信号:NSS 信号由低变高,是 SPI 通讯的停止信号!

2. 数据有效性:
先根据上图模式来说,一个时钟周期传输一位数据,根据上面的图得MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在SCK 的下降沿时被采样。即在 SCK 的下降沿时刻, MOSI 及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0” ,然后在其他时刻都没有效了,不管你说多少次想她她都听不到。还有SPI每次传输得数据可以是8位或16位,但是IIC就不行,因为IIC规定了8位后要应答一声,但SPI不需要。
3. 通讯模式:我也不知道是啥必要让发明他的人这么无聊。做这么多模式。

根据SCK在通讯前的电平状态分为CPOL=0SCK低电平CPOL=1SCK低电平
根据对MOSI MISO 采样时刻是SCK的奇数还是偶数边沿分为CPHA=0奇数边沿”采样 ),CPHA=1 “偶数边沿”采样上面讲的是CPHA=1的模式。
图片9.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F60.tmp.jpg
各种语言代码的实现就根据电平的变化规则来写,难度不大了。
UART(串口异步通讯)
两个村落之间的单独通讯都有了,但是你们开始想做一个来大家开会用的,首领说所有村落都能听到,于是有了串口异步通讯这种方案,一般只使用3条线:TX:(首领和所有部落说话的通道),RX(首领听某个部落发言的通道),GND(你们之间的某种很必要的规定),然后这里需要注意的是首领的TX要和其余部落的RX接上,RX接其余部落的TX,不必要纠结这个线的接法与前面的SPI为啥不一样,总之嘛你们都是嘴对着对方耳朵的,这里只是无聊换了个叫法罢了。
图片8.png
file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F70.tmp.jpg
由于是开大会嘛,大家就没有必要对门牌号了,接上线的大家都听到的,所以串口通讯不需要地址。说话的格式是:开始信号+话的内容+检验位(检验首领的话有没有传错避免三人成虎)+停止信号  这个就简单多了!
现在你们又有了新的对话的规则;
波特率: (官方话:波特率是衡量数据传送速率的指标=每秒钟通过信道传输的码元数有点前面两种通讯的SCK一样,用来约定你说话的速度,前面IICSPI都是大家有一个共同时钟来做约定,比如一秒说一个字,现在不用拉时钟线了但是你说话的速度得有规定(码元的长度),不然下面就没办法听懂你说啥了(信号解码)。

主体数据内容:现在这个说话有一个不足啊就是你说话每一句有字数限制了(有效
数据的长度常被约定为 5 6 7 8 位长)

数据校验:就是检验你说的话有没有在传得过程中出错(校验方法有奇校验、偶校验,0校验,1校验以及无校验 )举个例子:“我爷我爸去你家玩+校验位”如果是奇校验得话就要求刚才说话的内容和检验位的“我”(通讯中数“1”)为奇数,所以检验为“我”,“我”才达到奇数 ,偶检验反之。1校验(检验位一直都是“1”)。0校验反之。无校验,没啥可说的。
GND:串口通讯常用有两种标准“RS-232标准”与“TTL 标准”(只是表示“0”“1”的电压不同)因此两个通讯设备之间的地电位可能不一样,这会影响收发双方的电平信号,以两个串口设备之间必须要使用地线连接,即共地来做约定。
UART与USART:前者就是异步串口通讯,后者就是同/异步串口通讯,简单区分就是否需要通讯同步通讯时钟信号来区分。



好了就先聊这三个通讯方式了,我们以开车来讲解一下通讯分类
1. 按数据传送的方式,通讯可分为串行通讯与并行通讯 以高速路小说一下:并行通讯就是很多个车道,车可以并排行驶,串行通讯就是单通道高速收费站每次只能有序的过一辆车。通讯速率快慢可想而知。


2. 根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯 。小说一下:全双工相当于双向车道,半双工相当于乡间小道那样可以来往但是只通一架车。单工相当单向车道。IIC是半双工SPI,UART与USART是全双工


3. 根据通讯的数据同步方式,又分为同步和异步两种  简单区分就是按是否需要通讯同步通讯时钟信号来区分。就像IIC,SPI都是同步,UART是异步,但是他的老相好USART是同步。




最后再来两句:以上3种通讯方式各有优缺点,但是最基本的原理都一样毕竟它们的世界只有0和1,只是自己的规则不同罢了。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10447
金钱
10447
注册时间
2017-2-18
在线时间
1889 小时
发表于 2019-2-21 15:19:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

13

主题

640

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2019-2-21 16:46:46 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2018-7-11
在线时间
38 小时
发表于 2019-3-23 10:17:16 | 显示全部楼层
秀的飞起
回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

209

帖子

0

精华

禁止发言

积分
276
金钱
276
注册时间
2019-3-4
在线时间
4 小时
发表于 2019-3-30 08:07:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-12-12
在线时间
81 小时
发表于 2019-4-12 09:43:36 | 显示全部楼层
秀,通俗易懂
回复 支持 反对

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-7-4
在线时间
37 小时
发表于 2019-7-30 17:03:18 | 显示全部楼层
秀儿,强啊。都把我教会了。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-8-1
在线时间
5 小时
发表于 2019-8-1 23:29:23 来自手机 | 显示全部楼层
太秀了吧,这两天正在学呢,专门注册账号收藏了
回复 支持 反对

使用道具 举报

4

主题

232

帖子

0

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2018-12-7
在线时间
131 小时
发表于 2019-8-2 16:09:33 | 显示全部楼层
谢谢分享,学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2019-6-29
在线时间
18 小时
发表于 2019-9-5 16:01:17 | 显示全部楼层
收藏了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 06:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表