Uart协议——硬件时序

通信协议概述

电平标准:

Uart使用TTL电平标准,即3.3V/5V表示1,0表示0

补充一下另一种常见的电平标准 RS485

两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

硬件电路:

从硬件电路可以得到的信息是,uart是一种全双工,异步的协议

即:

全双工--发送的同时可以接收

异步  --没有时钟线,依赖其他约定来进行同步

同时,可以看到TX和RX是不需要上拉/下拉的,这是因为:

UART的输出使用的是推挽输出,TX由自身的推挽输出保证电平;RX由对端的推挽输出保证电平

时序

任何一种协议在电路上的表现就是高低电平两种状态,而UART由于没有时钟线,因此必须解决通信双方的时许问题;

同时也没有SPI那种单独的使能信号,因此也需要有一种状态来表明通信开始和结束

基于以上两个问题,引出UART的重要参数

波特率:用于两个设备间同步信息的速率

起始位:一个bit的时间,必须为低电平

停止位:可配置的bit时间,必须为高电平,也必须要有

校验位:可配置奇偶检验,可以不配置

数据位:1表示1,0表示0,低位先行

波特率

含义:

波特率是通信双方同步的基准,他的意义是单位时间内传输的符号数

对于UART来说,如果波特率为115200,也就意味着1秒传输115200个bit的数据,如果设置none校验,1停止位,那么一秒就能传输11520帧数据,也就是11520byte有效数据

时钟来源:

       波特率对于UART的时钟来说,都是一个非常低的速率,因此,都是通过对UART的时钟进行分频DIV来生成的。分配后的时钟也并不会对电平进行直接采样,这里还涉及一个超采样OSC的概念

超采样:

       为了尽可能地保证信号的可靠,防止采样时因为毛刺对通信的影响,会对接收到的电平进行超采样,假设以实际波特率8倍的速率对接收信号进行采样,一般而言,有两种超采样方式:

  1. 取中间3次超采样的值,如果中间三个值是101,则认为该次信号为高
  2. 简单得选取最中间的值

由于UART总是用在短途通信,尤其是调试上,因此这两种方式都没啥问题

起始/停止/校验位

UART没有像SPI的EN信号,单独控制通信的开始与结束,因此他必须有方式来告之对方接收端通信开始,通信结束

这里就涉及几个概念:

-idle电平,在UART中,空闲时为高电平

-起始条件,既然空闲是高电平,那么起始条件就理所当然的是一个下降沿,这也就是UART中的起始位,固定为1个bit长度

-终止条件,从通信状态回到空闲状态,也就是停止位,一个上升沿,高电平的时间可配置,支持1/1.5/2个bit

       由于uart是没有时钟的,因此除了超采样之外,还提供了可选的校验位,他在数据位和停止位之间,所谓偶校验,就是让数据位中的高电平+校验位中高电平的数量保持偶数,奇校验同理

数据位

数据位的长度也是可配的,一般常用的有8位和9位

8位数据长度是最常用的,有效的数据就是一个byte,非常适合用于端对端的通信

唯一可以聊的就是他是低位先行

如果发送0X55,即01010101

在时序上,是按照 10101010来发送的

PS:这里再补充一下内存中的大端序,小端序,要记住这个顺序是字节序,也就是一个字节内的数据是始终不变的,大端序小端序决定的是相邻字节的排序

再补充一下MSB和LSB

MSB指的是Most Significant Bit,这里就是P前面那个0

LSB 指的是 Least Significant Bit,这里就是S后面那个1

另一种较为常见的是9bit数据位

在多机通信(multi-drop 或 multi-processor communication)中,通常有一个主机(Master)和多个从机(Slaves)。在这种场景下:

  • 9-bit 作为地址位:主机发送数据时,使用 9-bit 模式,其中第 9 位(MSB)用于区分数据帧和地址帧
  • 从机的行为
    • 当接收到地址帧(第 9 位 = 1)时,从机检查是否匹配自己的地址,如果匹配,就继续接收数据。
    • 当接收到数据帧(第 9 位 = 0)时,仅被选中的从机会处理数据,而其他从机则忽略它。

这种方式减少了从机不必要的处理,提高了系统效率。

### UART协议详解 #### 一、UART协议概述 UART代表通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter)。该技术起源于19世纪60年代,最初由贝尔公司开发用于连接计算机与电传打字机之间的通信[^2]。 #### 二、通信方式分类 ##### (一)串行通信 vs 并行通信 - **串行通信**:指数据一位接一位地按顺序传送,在同一时间只有一位有效。这种方式减少了所需的物理线路数量,适合长距离传输。 - **并行通信**:多个位同时通过多条线缆一起传递给对方设备。虽然速度快但是成本较高且布线复杂度增加。 对于UART而言,属于典型的串行接口类型之一[^1]。 ##### (二)同步通信 vs 异步通信 - **同步通信**:双方需保持相同的时钟频率才能正常工作;而 - **异步通信**:不需要严格的时序匹配,每帧数据都有自己的起始位和停止位作为边界标记,这使得UART能够更加灵活地适应不同的波特率设置。 ##### (三)单工、半双工及全双工模式 - **单工**:仅支持单一方向的数据流动; - **半双工**:可以在两个方向上传输信息但不能同时进行; - **全双工**:允许在同一时刻向两端互相对话交流。 值得注意的是,标准的UART设计为全双工操作模式,意味着它可以同时处理输入输出请求。 #### 三、UART协议的具体描述 ##### 1. 数据传输格式 当涉及到实际的数据交换过程时,UART采用了一种特定结构化的方法: - 起始位 (Start Bit): 表明即将开始一个新的字符序列。 - 数据位 (Data Bits): 实际要发送的信息部分,默认情况下长度可以是5到9比特不等。 - 奇偶校验位 (Parity Bit, 可选): 提供额外错误检测功能。 - 停止位 (Stop Bits): 结束当前消息周期,并准备接受下一个字符的到来。 这种组合确保了即使在网络条件不佳的情况下也能维持较高的可靠性水平[^3]。 ##### 2. 电平标准 不同类型的硬件可能遵循各自的电压范围来表示逻辑高低状态。例如TTL电路通常使用+5V/-0V对应于高/低电平,而在工业环境中更常见的是负逻辑体系(-12V/+12V),如RS-232C所规定的那样。因此,为了与其他系统兼容或者满足特殊应用场景的需求,有时还需要借助专门的转换芯片完成相应的适配任务。 #### 四、优势与局限性分析 优点方面,由于其实现原理较为基础直观,所以易于理解和维护;而且无需外部时钟源即可独立运作,降低了整体系统的复杂性和功耗开销。然而也存在一些不足之处——比如最大吞吐量受限于选定的工作速率以及缺乏内置的安全机制防止恶意篡改等问题。 ```python import serial ser = serial.Serial( port='/dev/ttyS0', # 设定端口号 baudrate=9600, # 设置波特率为9600bps parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS ) if ser.isOpen(): print("Serial is open!") else: print("Failed to open serial.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值