通信协议 | 一文玩转UART协议就够了

协议基础

1、UART简介

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。典型的串口通信使用3根线完成,分别是:发送线(TX)、接收线(RX)和地线(GND),通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信,如下图所示:

2、UART特性

UART 接口不使用时钟信号来同步发送器和接收器设备,而是以异步方式传输数据。发送器根据其时钟信号生成的位流取代了时钟信号,接收器使用其内部时钟信号对输入数据进行采样。
同步点是通过两个设备的相同波特率(UART和大多数串行通信一样,发送和接收设备需要将波特率(波特率是指信息传输到信道的速率)设置为相同的值。对于串行端口,设定的波特率将用作每秒传输的最大位数)来管理的。

如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。允许的波特率差异最大值为10%,超过此值,位的时序就会脱节。

在这里插入图片描述

下总结了关于UART必须了解的几点:

  • 导线数量 3根(TX、RX和GND)
  • 速度 1200、2400、4800、9600、19200、38400、57600、115200等
  • 传输方式 全双工异步
  • 最大主机数量 1
  • 最大从机数量 1

3、UART协议帧

在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。

3.1、起始位

当不传输数据时, UART 数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。

当接收 UART 检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。

3.2、数据位

数据帧包含所传输的实际数据。如果使用奇偶校验位,数据帧长度可以是5 位到 8 位。如果不使用奇偶校验位,数据帧长度可以是9 位。

在大多数情况下,数据以最低有效位优先方式发送。

3.3、奇偶校验位

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

校验位可以配置成 1 位偶校验或 1 位奇校验或无校验位。

接收UART 读取数据帧后,将统计数值为 1 的位,检查总数是偶数还是奇数。如果奇偶校验位为0 (偶数奇偶校验),则数据帧中的1或逻辑高位总计应为偶数。如果奇偶校验位为 1 (奇数奇偶校验),则数据帧中的1 或逻辑高位总计应为奇数。

当奇偶校验位与数据匹配时,UART 认为传输未出错。但是,如果奇偶校验位为0 ,而总和为奇数,或者奇偶校验位为 1 ,而总和为偶数,则UART 认为数据帧中的位已改变。

3.4、停止位

为了表示数据包结束,发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。

4、UART通信步骤

第1步:数据从数据总线到发送器。

第2步:发送 UART 将起始位、奇偶校验位和停止位添加到数据帧。

第3步:从起始位到结束位,整个数据包以串行方式从发送器送至接收 器 。
接收 UART 以预配置的波特率对数据线进行采样。

第4步:接收 器 丢弃数据帧中的起始位、奇偶校验位和停止位。

第5步:接收 器 将串行数据转换回并行数据,并将其传输到接收端的数据总线。

最详细的UART通讯协议分析


详细内容点击:原文链接:最详细的UART通讯协议分析在这里

Verilog代码实现


通过RS232总线实现PC端和FPGA端数据组的通信,为了防止误操作或者干扰导致的通信错误,在实现PC机和FPGA端通信中加入相应的帧协议。只有在接收端收到正确的镇协议时,才会对发送来的数据进行解析处理。

在该镇协议中已经确定了相应的指令,可以通过PC端发送相应的指令来控制FPGA端处理相应的数据,比如可以在PC端发送写入数据的功能,当帧解析模块接收到对应的指令后,则会将帧协议内的数据写入到对应的存储区域。

代码链接:https://github.com/chinkwo/uart_frame

UART接口模块驱动

ESP8266 UART接口的WIFI模块驱动

代码链接:https://github.com/qiangnubing/ESP8266

相关推荐

  1. UART通信协议:串行通信的精华

    2024-07-13 15:34:07       54 阅读
  2. FPGA常用通信协议UART(二)---UART接收

    2024-07-13 15:34:07       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 15:34:07       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 15:34:07       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 15:34:07       58 阅读
  4. Python语言-面向对象

    2024-07-13 15:34:07       69 阅读

热门阅读

  1. AI工具网站

    2024-07-13 15:34:07       18 阅读
  2. 什么是ipc

    2024-07-13 15:34:07       22 阅读
  3. 红帽虚拟化REST API指导文档

    2024-07-13 15:34:07       22 阅读
  4. 层次分析法:matlab代码实现

    2024-07-13 15:34:07       20 阅读
  5. Tg机器人开发:实现自动化图片审核功能

    2024-07-13 15:34:07       18 阅读
  6. Mojo AI编程语言(三)数据结构:高效数据处理

    2024-07-13 15:34:07       22 阅读
  7. postgresql创建只读权限的用户

    2024-07-13 15:34:07       17 阅读
  8. Oracle数据文件扩容

    2024-07-13 15:34:07       22 阅读
  9. vue3的服务端渲染实战项目(1)共12节

    2024-07-13 15:34:07       23 阅读
  10. ubuntu 24.04 安装telnet服务

    2024-07-13 15:34:07       21 阅读
  11. 【Docker Install SQL Server】

    2024-07-13 15:34:07       18 阅读