记得过去的打印机,鼠标和调制解调器吗,它们都配备着体积庞大,线缆粗壮的接口,并且需要紧固在机器上。这些设备都是通过串行通信标准与电脑交换数据。尽管通用串行总线已经几乎淘汰了老式的线缆和接口,但串行通信协议依然非常实用。可以见到当前众多项目中,采用UART接口的GPS设备、蓝牙适配器以及RFID识别模块等,会与不同的微控制器设备相连接。
通用异步收发传输器uart是什么意思,俗称UART。它负责将数据在串行方式与并行方式之间进行切换。作为一款将并行输入转为串行输出的芯片,UART常常被整合在其他通信接口的连接部分。以云里物里为例,作为蓝牙模块的制造商,他们所有的低功耗蓝牙模块都配备了UART串口。
它不同于SPI和I2C这类传输方式,而是微控制器内部自成一体的硬件线路,或者是单独的集成电路芯片。
UART最突出的优势在于仅需两根线缆就能实现设备间的数据交换,其工作原理也相当容易掌握。
UART通信简介
在串行通信过程中,两个串行接口设备可直接进行数据交换。发送端将来自中央处理单元等控制单元的并行信息转变为串行格式,再通过串行方式发送给接收端。接收端则将收到的串行信息重新变回接收设备的并行形式。这种数据传输方式仅需两根连接线即可完成。信息从发送端的发送引脚出发,沿着线路传输,最终到达接收端的接收引脚。
UART采用非同步模式传输数据,不存在时钟信号来同步发送端比特输出与接收端比特采样。发送端不提供时钟信号,而是通过在数据帧中附加起始位和停止位来标识传输内容。这些附加位明确标示了数据帧的起始点和终止点,使接收端能够准确判断何时开始解析数据位。
接收UART识别到起始信号后,便以一个叫做波特率的标准速率去读取输入信号,波特率表明数据传输的快慢,单位是每秒传输多少位,即bps,发送和接收的UART,它们的波特率应该基本一致,两者之间的差异不能太大,一般不超过10%。
两个UART还必须配置为发送和接收相同的数据包结构。
UART如何工作
UART传输数据借助的是UART总线,数据总线用来经由CPU,存储器或微控制器等设备将数据传给UART。数据以并行方式从数据总线送往发送UART。发送UART接收到数据总线上的并行数据后,会加上起始位,奇偶校验位和停止位,构成数据包。然后,数据包在Tx引脚上一位一位地转为串行输出。UART接收端在Rx引脚上一位一位地读取数据包。接收器随后把数据变回并行状态,同时去掉起始位、奇偶校验位和停止位。接收器接着把数据包通过并行线路送给接收设备的数据总线上。
串行通信传输的信息被封装成信息单元。每个单元由一个起始标记,若干个信息位,信息位数根据串行通信协议而定,可能附带校验位,以及一个或两个终止标记组成
开始位
在没有数据传输的情况下,串行通信线路一般维持在高压状态。要启动数据发送,发送端会先将线路从高电位切换到低电位一个时间单位。接收端在察觉到电压由高变低的变化后,便按照预定速率读取数据序列中的各个比特位。
数据框
数据框里装着准备传送的真实内容,要是有校验码的话,它就有五到八个字符那么长,要是没有校验码的话,它就有九个字符那么长,通常情况下,数据都是先从最不起眼的那个位开始发出去的。
奇偶校验位
奇偶校验能够体现数值的对称性或非对称性。奇偶校验码是接收端在数据传输时用以判定信息是否出现改动的一种手段。当存在电磁干扰、波特率不一致或传输距离过长等情况时,信息内容容易发生偏差。接收端在获取数据包之后,会统计其中值为1的比特数量,并核对该数量呈现偶数状态还是奇数状态。当奇偶校验码为0,实施偶校验时uart是什么意思,数据包里所有位中1的总数必须是偶数个。当奇偶校验码为1,执行奇校验时,数据包里所有位中1的总数必须是奇数个。当奇偶校验码和数据内容相吻合时,串行通信设备就能确认信息传输没有发生差错。一旦奇偶校验码为0,但1的总数却是奇数个;或者奇偶校验码为1,而1的总数却是偶数个,那么就可以判定数据包里的位已经发生了变化。
停止位
为了表明数据包传输已经完成,发送端会通过数据线将信号从低电平切换到高电平,并且维持这个状态超过两个时间单位。
UART传输步骤
1.发送UART从数据总线并行接收数据,
2.发送UART将起始位,奇偶校验位和停止位添加到数据帧,
整个数据包经由UART串行传送至接收端UART那里,接收端UART按照预设的波特率对数据线实施采样。
4.接收UART丢弃数据帧中的起始位,奇偶校验位和停止位,
通过串行通信接口接收数据,将其由串行格式改换成并行格式,然后发送到目的地的数据传输线路上去
UART的优点和缺点
没有任何通信协议能够做到十全十美,以下列举了其长处与短处,供您参照,以判断其是否适合您的项目用途,
优点
只使用两根电线
不需要时钟信号
有一个奇偶校验位
一旦双方设定完成,便能够调整数据包构造,存在详尽资料,并且应用范围很广。
缺点
数据帧的大小限制为最多9位
不支持多个从属或多个主系统
每个UART的波特率必须在10,之内