UART
[ai, I get it]
-
NOTE
- TTL 是 UART 的一种实现。[ai] 在实现UART通信时,可以使用不同的电气接口标准,如TTL、RS-232、RS-485等。这些标准定义了信号的电压范围和电气特性。
(1) 发送 0x55
(二进制 01010101
)
字段 | 电平序列(TTL) | 说明 |
---|---|---|
起始位 | 0V(低电平) | 持续 1 比特时间(≈104 μs @9600bps),表示帧开始。 |
数据 0x55 | 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V | 从 LSB(最低位 1 )到 MSB(最高位 0 )依次发送。 |
停止位 | 3.3V(高电平) | 持续 1 比特时间,表示帧结束。 |
空闲 | 3.3V(高电平) | 持续任意时间(直到下一帧起始位)。 |
(2) 发送 0xAA
(二进制 10101010
)
字段 | 电平序列(TTL) | 说明 |
---|---|---|
起始位 | 0V(低电平) | 同上。 |
数据 0xAA | 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V | LSB(0 )到 MSB(1 )依次发送。 |
停止位 | 3.3V(高电平) | 同上。 |
空闲 | 3.3V(高电平) | 持续任意时间。 |
起始位下降沿的同步原理
注意:收发端波特率可能稍有不同,偏差最多 5% 左右。接收端并不会计算发送端的比特时间(即波特率).
(1) 检测下降沿(硬件触发)
- 空闲状态:UART 总线在无数据传输时保持高电平(逻辑 1)。
- 起始信号:发送端通过拉低电平(逻辑 0)表示帧开始,形成一个高→低的跳变(下降沿)。
- 接收端硬件:通过边沿检测电路(如施密特触发器)捕获下降沿,触发接收流程。
(2) 重新同步采样时钟
接收端在检测到下降沿后,会启动一个本地时钟计数器,按以下步骤同步: 1. 延迟至比特中点: - 从下降沿开始,等待 1.5 个比特时间(例如,波特率 9600 bps 时,1 比特 ≈ 104 μs,1.5 比特 ≈ 156 μs)。 - 此时采样点位于第一个数据位的中心位置(抗干扰最强)。 2. 后续比特的同步采样: - 之后每 1 个比特时间 采样一次,依次读取数据位、校验位和停止位。 - 采样时刻严格依赖初始下降沿的同步,而非全局时钟。
关键点:起始位的下降沿相当于一个“时间锚点”,后续所有比特的采样均以它为基准。
2. 硬件如何实现?以 16x 过采样为例
现代 UART 模块(如 STM32)通常采用过采样技术增强鲁棒性。以下是典型流程:
-
过采样频率:
- 接收端以 16 倍波特率 的时钟频率采样 RX 线(例如 9600 bps → 153.6 kHz)。
- 每个比特周期内采样 16 次(编号 0~15)。
-
下降沿检测与确认:
- 连续检测到 3 个低电平采样点(如采样点 0、1、2)时,确认起始位有效(防噪声干扰)。
- 记录下降沿的时刻(如采样点 0)。
-
同步采样点计算:
- 第一个数据位的采样点位于 第 8、9、10 次采样(对应比特时间的中心区域)。
- 通过多数表决(取 3 次采样中的多数值)确定比特值。
-
后续比特采样:
- 每 16 个采样周期(即 1 比特时间)后,重复中心采样(如第 24、25、26 次采样对应第二个数据位)。