UART简介
UART全称universal asynchronous receiver transmitter,翻译过来就是通用异步收发器(一般也很少有人这么叫啦)。UART的应用场景非常广泛,比如上位机与下位机之间的通信,各种外接模块,比如GPS和蓝牙模块等等。UART作为串行通信,利用一条传输线将数据按bit进行顺序传送,特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。
物理层
在物理层上,UART协议只有三条信号线:TX,RX和GND。看到这儿看官您就要问了,为什么没有时钟线?对,UART协议就是这么任性,不需要时钟线,那么它是怎么通信的呢?下面的协议层章节会做详细的介绍。
UART使用标准的TTL/CMOS逻辑电平(0~5V,0~3.3V,0~2.5V或0~1.8V)来表示数据,1表示高电平,0表示低电平。为了提高抗干扰能力、提高传输的距离,通常也会TTL/CMOS逻辑电平转换为RS-232逻辑电平,3~15V表示0,-3~-15V表示1。
举个例子,对于传输数据0x55,即二进制的01010101,RS232和TTL的区别如下;
协议层
波特率
协议层上,首先来介绍一下波特率的概念。波特率可以被理解为一个设备在单位时间内发送(或接收)了多少码元的数据,它是对符号传输速率的一种度量,表示单位时间内传输符号的个数(传符号率)。说白了,波特率是串口数据的传输速度,即Bit/s,常见的波特率有:9600,19200,38400,57600,115200。假设目前UART的配置为,1个起始位,8个数据位,0个校验位,1个停止位,那么9600的波特率,可以计算出每一位数据的时间宽度为104us,那么传输一个数据包(也就是10 bit 数据)需要的时间为 1.04 毫秒。
数据包格式
介绍完了波特率,再来介绍一下数据包的格式。UART传输的数据被封装成数据包,每个数据包包含1个起始位,5~8个数据位(取决于UART的具体设置),一个可选的奇偶校验位以及1个或2个停止位,具体如下图所示:
起始位:UART数据传输线在空闲状态时时保持高电平。当master先发出一个逻辑”0”的信号时,表示传输数据的开始。
数据位:可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。
校验位:在串口通信中一种简单的检错方式。有下面四种检错方式:偶校验、奇校验、高校验和低校验。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用1bit确保传输的数据有偶个或者奇个逻辑高位。
举个例子,如果数据是011,假如为偶校验,则校验位为0,保证逻辑高的位数是偶数个。假如为奇校验,校验位为1,保证逻辑高的位数是奇数个。
停止位:发送端UART将数据传输线从低电压驱动到高电压至少持续两位数据的时间宽度来表示整个数据包的传输已经结束。由于数据是在传输线上定时的,不同设备之间的时钟存在偏差,误差的积累有可能会造成数据位的传输错误。因此停止位不仅仅是表示传输的结束,并且提供校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容错性越好,但是数据传输率同时也越慢。
优缺点
没有任何通信协议是完美的,以下是UART的一些利弊,可帮助您确定它们是否适合您的项目需求:
优点:通信只需要两条数据线;
无需时钟信号;
有奇偶校验位,方便通信的差错检查;
只需要接收端和发送端设置好数据包结构,即可稳定通信;
数据帧最大支持9位数据;
不支持多主机或多从机的主从系统;
参考文献:https://blog.csdn.net/u010632165/article/小麦大叔声明:本文转自“知芯情报局”,版权归作者所有。如有侵权,请联系我们删除!❤「有用请分享」❤
????点击关注,技术干货准时送达!????