目录
背景知识
协议
在了解UART协议之前,我们首先要清楚什么是协议。
那什么是协议呢?
协议简单来说是标准,是规定,是”语言“。
双方遵守协议,才能友好交流,有效传达信息。
如果不遵守协议,就是不在同一个频道,鸡同鸭讲,无效沟通。
举个例子:
英文中“apple”表示苹果,你跟不懂中文的美国佬讲中文“苹果”,我想他一定会懵逼。
但当你准确地说出英文“apple”时,我相信他可以听懂了,因为你们用的是同一种语言,遵守了同一种协议。
协议我们现在清楚了,简单理解就是通信语言,双方遵守协议,用同一种通信语言,才有可能有效传输信息。
那什么是UART呢?
UART英文全称(Universal Asynchronous Receiver/Transmitter)
Universal是通用的
Asynchronous是异步的
Receiver是接收器
Transmitter是发射器
把它们连起来,Universal Asynchronous Receiver/Transmitter就是通用异步收发器。
UART协议是一种串行全双工异步通信协议。
串行-并行
串行全双工异步通信协议,这里边的“串行”是什么意思呢?
串行表示串行通信,通信双方一般有两种通信方法
并行通信
串行通信
并行通信的传输原理是数据各个位同时传输
串行通信的传输原理是数据按位顺序传输
用核酸检测举例:
比如有8个人要去进行核酸检测,
并行通信相当于拥有8个检测通道,一次同时可检测8人,8人1次检测完成。
串行通信相当于只有1个检测通道,一次只能够检查1人,8人需要检查8次。
从上边例子我们可以明显发现并行检测速度(通信速度)比串行快,一次同时查8个,这就是并行通信的优点:通信速度快。
同时我们又发现,同是8个人检查,并行需要占用8个检测通道(引脚资源),串行只需要1个,占用的通道少,这就是串行通信的优点:占用引脚资源少。
万物相生相克,并行的优势就是串行的劣势,串行的优势也是并行的劣势。
所以
并行通道的缺点是占用引脚资源多
串行通信的缺点是通信速度较慢
单工-半双工-全双工
相信大家已经理解串行这个概念了,
接下来迎接我们的是串行全双工异步中的”“全双工”,什么是全双工呢?
通信按照数据传送方向,分为:
单工
半双工
全双工
所谓单工,单工单工,单向工作,数据传输只支持数据在一个方向上传输。
有单就有双,双工双工,那就是双向工作,假如我们手里只有单工,那怎么实现双工呢?
假设我们拿1个单工出来,试着调换线路方向,上一时刻数据传输方向是A到B,下一时刻数据传输方向是B到A,这样就实现了双向工作。
这种允许数据在两个方向上传输,但是,在某一时刻只允许数据在一个方向上传输的通信方式就是半双工,实际上它是一种切换方向的单工通信。
但是这样切换,好累啊,我不如直接拿2个单工出来,1个单工的传输方向是A到B,1个单工的方向是B到A,这样就不用一直切换了,在同一时刻,可以从A传输数据到B,也可以从B传输数据到A。
这种允许数据同时在两个方向上传输,就是全双工,实际上它是两个单工通信方式的结合,它要求发送设备和接收设备都要有独立的接收和发送能力。
同步-异步
全双工搞定了,现在串行全双工异步只剩下“异步”了,什么是异步呢?
异步异步,就是不同步,而同步指的是两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。在计算机系统中时间变化离不开时钟信号,所以同步离不开时钟信号。于是,新的通信分类方式出现了。
通信按照是否带时钟同步信号传输分为:
同步通信
异步通信
同步通信时带时钟同步信号传输的通信方式(同步通信除了数据线之外,还要有时钟线,在串行同步通信中,数据的每一位传输是随着时钟信号来传输的,比如说,我们以时钟信号上升沿作为触发数据传输的条件,时钟信号的上升沿来了,A传输1个比特到B,下一个上升沿来了,又传输一个比特,即数据传输是根据时钟信号(同步信号)来确定的)
异步通信是不带时钟同步信号传输的通信方式(由于没有时钟同步信号,那通信双方就必须事先进行约定,像UART是异步通信,因此通信双方必须约定好波特率(数据传输速度),才能保证传输没有错误。如果通信双方没有进行约定,比如A的波特率是8bits/s,也就是发送或接收1个bit需要1/8秒,而B没有跟A约定,所以不知道A的波特率,假设B的波特率是4bits/s,也就是发送或接收1个bit需要1/4秒,A向B发送了二进制数据11,耗时1/4秒,但是1/4秒B只接收一个bit,所以B端收到的数据只是二进制数据1,这样在数据传输过程中就出现了数据丢失)
一般来说,
当数据量大、实时性要求高、传输距离短时,可采用同步通信
当数据量小、实时性要求低、传输距离长时,可采用异步通信
UART协议
好,基本概念清楚了,接下来开始正题
UART引脚介绍及连接
TX是Trasmit的缩写,表示发送,RX是Receive的缩写,表示接收,
TxD是Trasmit Data的缩写,RxD是Receive Data的缩写,
所以TX是发送引脚,RX是接收引脚,电平类型相同的引脚接线如下图。
UART帧结构
兄弟们,梦回小学,看图说明
空闲状态:高电平1
起始位(1bit):低电平0
数据位(5~8bit)
校验位(0~1bit)
模式 | 说明 |
No Parity(无校验) | 校验位占0bit,数据位紧接着就是停止位 |
Odd Parity(奇校验) | 校验位占1bit,数据位中1的个数为偶数则为1,反之为0 |
Even Parity(偶校验) | 校验位占1bit,数据位中1的个数为奇数则为1,反之为0 |
Mark Parity(1校验) | 校验位始终为1 |
Space Parity(0校验) | 检验位始终为0 |
停止位(1~2bit):高电平1
UART波特率
数据传输速率使用波特率表示,单位bps(bits per second)每秒比特数。
可配置选择的有8种波特率:
1200,2400,4800,9600
19200,38400,57600,115200
UART传输方式
LSB(Least Significant Bit,最低有效位),低位优先。
如十六进制0x36,对应二进制0b00110110,传输时发送bit的顺序是:
0→1→1→0→1→1→0→0,
从最低位到最高位。
UART通信前的约定
由于UART传输机制中仅定义了数据帧,没有定义控制帧,
所以当两个设备需要通过UART协议进行通信时,它们需要约定好以下内容:
(1)比特宽度(每一位信号的时间长度T,波特率=1/T),即规定好波特率
(2)帧结构中每一项的具体位数
(3)是否有检验位(无/奇/偶/0/1校验)
UART通信举例
通信前规定两个设备的波特率为115200bps
起始位1bit
传输ASCII码,数据位为8bit
停止位1bit
'H'字符ASCII码为0x48,'i'字符ASCII码为0x69
标签:协议,异步,UART,基础,通信,单工,传输,串行 From: https://blog.csdn.net/muacxj/article/details/141958050