目录

一、什么是UART?

二、UART的帧格式

2.1 为什么UART的传输需要起始位?

2.2 UART基本的数据形式

2.3 为什么UART的数据位可变?

三、UART的波特率

3.1 什么是波特率

3.2 如何换算波特率

3.3 波特率和采样频率是一样的吗?


一、什么是UART?

UART的全称是通用异步收发器(Universal Asynchronous Receiver/Transmitter)
Universal 通用性体现在UART使用范围广上,作为一个通用的接口协议,UART广泛的应用在各类MCU和SOC产品上。
Asynchronous 异步性体现在“不需要额外的时钟线进行数据的同步传输”即只要信号拉低,即可开始传送数据,而另一些通讯协议,需要引入时钟信号来进行操作,如AMBA,需要在时钟的上升沿发送数据
Receiver/Transmitter:收发器则更好理解,即一个数据的发送方和一个数据的接收方,也意味着在数字IC设计中需要分别设计Receiver和Transmitter

二、UART的帧格式

UART的一帧由起始位、数据位、校验位和停止位组成。数据逐位传输,如下图所示

2.1 为什么UART的传输需要起始位?

因为UART没有控制线,要让接收方知道什么时候开始接收数据,需要一些手段,UART数据的传输中,只有一根线,所以在发送数据之前,先发一位逻辑“0”作为数据发送的起始标志,接收方在空闲时,当检测到有一个低电平,则开始接逐位接收数据。

2.2 UART基本的数据形式

  • 默认无传输数据时,为高电平
  • 当信号拉低,传输线上的电平拉低,意味着开始进行数据传输
  • 紧接着起始位的是数据位,它可以是5、6、7或8位
  • UART的“校验位”紧挨着“数据位”,采用奇偶校验方式,根据设置,校验位可以存在也可以不存在
  • UART将停止位作为停止标志,是在数据位(没有校验位)和校验位(有校验位)之后发送1~2位的逻辑“1”高电平。当发送完停止位之后,UART总线进入空闲。

2.3 为什么UART的数据位可变?

因为UART是一种低速总线,每多发一位都占用不少的时间(由传输波特率决定),所以可以根据传输数据的特点,采用不同位宽以节约数据传输的时间

三、UART的波特率

如果从更高的level审视UART传输协议,如嵌入式开发者的角度,我们会发现,在使用具体的UART协议前,我们需要对发送端和接收端进行波特率的同步,以此来确保发射端的数据可以在接收端得到正确的采集。常用的波特率可以是300,1200,2400,9600,19200,38400,115200,这些数意味着什么呢?别着急,我们接下来要讨论这个内容。

3.1 什么是波特率

波特率等于每秒钟传输的数据位数,假如我们的全局时钟频率为100MHz,波特率设置为9600,那么意味着每秒该UART传输协议可以传输9600bits的数据,换句话说传输1比特需时间约为:10^9(ns)/9600=104166(ns)。

3.2 如何换算波特率

书接上文,时钟频率假如为100MHz,这意味着我们的时钟周期为10ns,因此10416个时钟周期我们就可以传输1bit数据,换言之我们需要一个大小为10416的分频电路来对100MHz时钟进行处理,因此在设计UART的过程中,我们需要使用分频电路依据波特率处理全局时钟,依据分频后的时钟节奏来发送数据和接收数据。

3.3 波特率和采样频率是一样的吗?

按照前文所说,好像波特率和采样频率是一个意思,即9600波特率对应接收端1s进行9600次采样,也对应发射端1s进行9600bit的发射,那么请读者思考,真的是这样吗?
答案其实是否定的
这是因为:在数据的传输中,信号可能受到一些干扰而产生一些抖动(比如说电磁兼容性设计中的近端串扰),如果接收端只对这些信号进行一次采样,那么它有可能采样到的是不准确的数据,所以接收端在采样时,通常都要采样多次,然后通过处理获得准确的数据,比如说,我们可以用多数表决的方法来在接收端进行多次采样,得到准确值,下图展现了16倍频采样的多数表决电路结构和它的真值表。

通过对真值表的观察,我们可以发现,使用三个与门与一个异或门,我们实现了多数表决的功能,(即有两bit为1即输出为1,两bit为0则输出为0)

原文链接:https://blog.csdn.net/weixin_43698385/article/details/124689958

Linux·UART协议相关推荐

  1. Linux UART驱动分析及测试

    1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面.TTY的层次接口包括TTY应用层.TTY文件层.TTY线路规程层.TTY驱动层.TTY设备驱动层.T ...

  2. linux uart m200平台波特率500kbps乱码问题和输入不响应问题

    [问题] linux uart m200平台波特率500kbps乱码问题 [解答] [问题] linux uart m200平台波特率500kbps输入不响应问题 [解答] 转载于:https://w ...

  3. 几种常用通信协议:IIC协议、SPI协议、UART协议

    通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...

  4. UART协议驱动设计

    UART协议驱动设计 在不通信时,发送高电平. 发送信息时,应该首先发送起始位(1bit.低电平).可以理解为告诉接收方,应该接收信息了. 发送数据位,由于是串行通信,规定从低位开始发,最后到高位(协 ...

  5. Linux uart驱动框架

    Linux uart驱动框架 串口驱动框架包括两部分 struct uart_driver int uart_register_driver(struct uart_driver *uart); vo ...

  6. UART协议概述与实现

    UART协议概述(一) 协议描述 关键代码逻辑 写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议. 非常简单的协议,协议细节不需要多说,只说需要注意的点. 空闲位为高位,起始 ...

  7. 如何在浏览器中运行Linux程序,在linux自定义协议,让浏览器可以调用本地程序...

    在linux自定义协议,让浏览器可以调用本地程序 第一种是在gnome桌面环境下,执行以下步骤 并且重启系统 gconftool-2 -t string -s /desktop/gnome/url-h ...

  8. 关于linux UART驱动和tty架构的理解

    关于linux UART驱动和tty架构的理解 最近要开发一个驱动程序,需要用到串口和SPI接口.平台的串口驱动程序本身在开发板中已经被实现了,也可以就这样直接使用,但是这样分开使用的结果就是在串口和 ...

  9. UART项目验证(一) uart协议与uart ip的理解

    1.1 uart协议 uart(universal asynchronous reciver and transmitter):通用异步收发器,是一种通用串行数据总线,用于异步通信,将数据的二进制位一 ...

最新文章

  1. 什么?分布式事务现在不是都在用么?你还不会?
  2. rails笔记 cache系统
  3. DBHelper 使用的是存储过程
  4. Linux下读写芯片的I2C寄存器
  5. 1582年日历怎么了_【知乎周边】知乎2020年日历开箱+测评
  6. C++|Qt工作笔记-Windows平台下的句柄与Qt中QWindow::winId()以及 QPlatformWindow::handle的区别与联系
  7. 模拟cmos集成电路设计_单级放大器中的噪声--CMOS模拟集成电路视频课程节选
  8. linux i2c adapter 增加设备_「正点原子Linux连载」第六十二章Linux SPI驱动实验(一)...
  9. 阿里的下一个15年:大数据是核心
  10. hive函数参考手册
  11. c语言程序怎样缩进整体,C语言程序设计基础概念
  12. linux13:(1.0k)ISO映像文件,镜像文件
  13. 二阶无源低通滤波器幅频特性曲线_低通无源滤波器设计-详细
  14. 计算机本科生可以发SCI论文吗?
  15. windows系统重装步骤
  16. 松鼠症 知识过载与疲于奔命
  17. 若能坚定信念,就能开创美好的未来
  18. sort函数的用法(C++排序库函数的调用)对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。
  19. CMake Error: The current CMakeCache.txt directory is different than the other
  20. CSMA/CD 协议 详解

热门文章

  1. 如何使用ricequant量化平台进行落单和回测
  2. 马尔可夫模型(MC, HMM, POMDP, MOMDP)
  3. VSCode配置golang
  4. 技能高考c语言经典试题及答案,技能练习题
  5. 2022年辽宁最新初级消防员模拟试题题库及答案
  6. 使用java实现自动扫雷
  7. C语言图形函数【转】
  8. 为啥电脑从C盘开始?A、B盘去哪了?
  9. 《痞子衡嵌入式半月刊》 第 57 期
  10. PW4054原厂锂电池充电管理芯片常规小封装5PIN充电IC产品