写这篇文章,主要是为了记录一下工作中用到的一些技术、协议等等,随时填充一些细节,方便后续需要,不用再到处找资料了。如有错误的地方,希望各位大佬予以指教!
一、UART简介
UART是一种通用的串行、异步通信总线,它有两条数据线,可实现全双工的收发数据,但是速度较慢,在嵌入式系统中常用于主机与辅助设备之间的通信。
二、硬件连接
UART有两条线,一根为TXD用于发送数据,一根为RXD用于接收数据,连接方式如图1所示。
三、通信过程
空闲位
UART协议规定在空闲时SDA数据线必须是高电平。
起始位
发送数据前SDA要先发送一个低电平作为起始信号,表示为一次通信的开始。
数据位
根据串口协议规定,发送数据先发送低位,一般发送数据时,可以是5~8位,但通常会发送8位数据,内存是以字节为单位,C语言中最小数据类型char也是8位,为一个字节。
校验位
如果使用校验位,通信速度会变慢,由于目前没有用到,暂不做介绍。
停止位
停止位可以是1位、1.5位或者2位,停止位为高电平,它的作用表示一次通信的结束。
这里强调一点,当接收方检测到起始位电平变化时,它会按照设定的波特率开始读取数据。串口协议不允许连续发送数据,每次通信最多发送一个字节,以防止累计误差的出现。
没有校验位就是一帧10位数据 115200 (位/秒) = 11520 (字节/秒)
四、URAT缺点
UART通信时一般用TTL电平,但不同的处理器的电平存在差异,当不同的处理器使用UART通信时一般不能直接连接。
抗干扰能力差,UART直接使用TTL来表示0 1,但TTL抗干扰能力较差,数据在传输过程中容易出错。
通信距离很短,一般只用于一个电路板上的两个芯片间的传输。