• UART 协议


    UART(universal asynchronous receiver-transmitter) 通用异步收发器

    分类特点
    导线2
    速度9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000,1500000
    传输方法异步
    通信方式串行通信
    工作方式全双工
    最大主机数1
    最大从机数1

    电气层

    UART 使用标准的 TTL/CMOS 逻辑电平(0-5V, 0-3.3V,0-2.5V或者0-1.8V)来表示数据,1 表示高电平,0 表示低电平。

    为了提高抗干扰能力,提高传输的距离,通常也会 TTL/CMOS 逻辑电平转换为 RS-232/RS-485 电平。

    硬件拓扑

    在 UART 通信中,两个 UART 直接相互通信。发送 UART 将控制设备(如 CPU)的并行数据转换为串行形式,以串行方式将其发送到接收 UART。只需要两条线即可在两个 UART 之间传输数据,数据从发送 UART 的 Tx 引脚流到接收 UART 的 Rx 引脚
    在这里插入图片描述

    当然也可以单个 MCU 自发自收
    在这里插入图片描述

    基本原理

    UART 属于异步通讯,这意味着没有时钟信号,取而代之的是在数据包中添加开始和停止位。这些位定义了数据包的开始和结束,因此接收 UART 知道何时读取这些数据。

    当接收 UART 检测到起始位时,它将以特定波特率的频率读取。波特率是数据传输速度的度量,以每秒比特数(bps)表示。两个 UART 必须以大约相同的波特率工作,发送和接收 UART 之间的波特率只能相差约 10%。

    发送 UART 从数据总线获取并行数据后,它会添加一个起始位,一个奇偶校验位和一个停止位来组成数据包并从 Tx 引脚上逐位串行输出,接收 UART 在其 Rx 引脚上逐位读取数据包。

    在这里插入图片描述

    协议

    UART 数据包含有 1 个起始位,5 至 9 个数据位(取决于 UART),一个可选的奇偶校验位以及 1 个或 2 个停止位:
    在这里插入图片描述

    空闲位

    UART 协议规定,当总线处于空闲状态时,信号线的状态为 1 即高电平。

    起始位

    UART 数据传输线通常在不传输数据时保持在高电压电平。开始传输时发送 UART 在一个时钟周期内将传输线从高电平拉低到低电平,当接收 UART 检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。

    数据位

    数据帧内包含正在传输的实际数据,在大多数情况下,数据以最低有效位优先方式发送(LSB)

    • 如果使用奇偶校验位,则可以是 5 位,最多 8 位。
    • 如果不使用奇偶校验位,则数据帧的长度可以为 9 位。

    在这里插入图片描述

    奇偶校验位

    奇偶性描述数字是偶数还是奇数。通过奇偶校验位,接收 UART 判断传输期间是否有数据发生改变。电磁辐射、不一致的波特率或长距离数据传输都可能改变数据位。

    串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位(即1的个数为偶个或者奇个)。

    接收 UART 读取数据帧后,将计数值为 1 的位,检查总数是偶数还是奇数。当奇偶校验位与数据匹配时,UART 认为传输未出错。如果未匹配则认为传输出错。

    例如,如果数据是 0b011,

    • 如果是偶校验,校验位为 0,保证逻辑高的位数是偶数个。
    • 如果是奇校验,校验位为 1,保证逻辑高的位数是奇数个,这样就有 3 个逻辑高位。

    无校验

    没有校验位也是可以的,没有校验位是最多可以传输 9 bit 数据。

    奇校验

    • 如果数据中 1 的数据为偶数,则校验位为 1
    • 如果数据中 1 的数据为奇数,则校验位为 0

    偶校验

    • 如果数据中 1 的数据为偶数,则校验位为 0
    • 如果数据中 1 的数据为奇数,则校验位为 1

    mark parity

    校验位始终为 1(不常用)

    parity

    校验位始终为 0(不常用)

    停止位

    为了向数据包的结尾发出信号,它是一个字符数据的结束标志 。可以是 1 位、1.5 位、2 位的高电平。

    由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

    波特率

    UART 接口不使用时钟信号来同步发送器和接收器设备,而是以异步方式传输数据。发送器根据其时钟信号生成的位流取代了时钟信号,接收器使用其内部时钟信号对输入数据进行采样。同步点是通过两个设备的相同波特率来管理的。如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。允许的波特率差异最大值为 10%,超过此值,位的时序就会脱节。

    数据传输速率使用波特率来表示,单位 bps(bits per second),常见的波特率9600bps,115200bps 等等,其他标准的波特率是1200bps,2400bps,4800bps,19200bps,38400bps,57600bps。举个例子,如果串口波特率设置为 9600bps,那么传输一个比特需要的时间是 1/9600≈104.2us

    以 9600 8N1(9600 波特率,8 个数据位,没有校验位,1 位停止位)为例,这是目前最常用的串口配置,现在我们传输 0x55,对应的二进制数据为 01010101

    串口波特率为 9600,1bit 传输时间大约为 104us,传送一个数据实际是 10 个比特(1 个开始位,8 个数据位,1 个停止位),一个 bytes 传输速率实际为 9600*8/10 = 7680bps

    优缺点

    优点

    • 通信只需要两根线
    • 无需时钟信号
    • 有奇偶校验位,方便通信的差错检查
    • 只需要接收端和发送端设置好数据包结构,即可稳定通信

    缺点

    • 传输速率低
    • 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗干扰性弱
    • 传输距离有限,数据帧最大只支持 9 位数据

    参考

    https://zhuanlan.zhihu.com/p/600121894
    https://www.yii666.com/blog/335083.html
    https://mp.weixin.qq.com/s/N36JOLDHGHDU8EHro4uS9w
    https://blog.csdn.net/qq_48641886/article/details/127756365

  • 相关阅读:
    关于mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止问题
    ZLMediaKit - webrtc录像
    探索云世界的无限可能
    线性判别分析(机器学习)
    Spring @Component、@Repository和@Service注释之间的区别
    为什么要构建垂直切片
    redis集群模式下key过期时间监听
    Prometheus 采集vCenter7监控数据
    python基础——列表【创建,下标索引,常见操作方法】
    智能合约是什么?
  • 原文地址:https://blog.csdn.net/tyustli/article/details/132924933