number headings: auto, first-level 2, max 6, 1.1
2 串口总线
串口总线都是在通信双方约定固定波特率之后,分别在波特率对应的时间长度下,通过不同的电平或电气特性,分别表示0或1后,再约定固定的起始位、数据位、校验位、停止位、流控制位等数据传输的规则和格式后组成的一种通信协议。
2.1 串口总线的电气特性分类
为了应对不同的应用场景,德州仪器和EIA定义了若干串口的电气参数来进行二进制的数据传输,其主要有如下几种:
- TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑):
- 输入电压准位
- 逻辑高电平范围:2.0V以上
- 逻辑低电平范围:0.8V以下
- 输出电压准位
- 逻辑高电平范围:2.4V以上
- 逻辑低电平范围:0.4V以下
因此TTL仅有0.4V的抗干扰能力,其抗干扰能力较差,一般通信距离不超过15m。是全双工通信。
- RS232(Recommended Standard):
RS232仅仅只是修改了电平定义,在一定程度上增加了其抗干扰能力。其所定义的电平范围为±(3~15)V,即:
- 输入电压准位
- 逻辑高电平范围:-3~-15V
- 逻辑低电平范围:+3~+15V
- 输出电压准位
- 逻辑高电平范围:-5~-15V
- 逻辑低电平范围:+5~+15V
其增加了容许干扰的电压范围。仍是全双工通信。
- RS422:
#TODO
- RS485(半双工版):
RS485将原先的高低电平表示逻辑电平的方法修改为了查分信号表示逻辑电平。如下图所示:

RS485定义了一个 U+
(或 A
)和一个 U-
(或 B
)线路,通过定义这两个线路之间的电压差来定义逻辑电平。其两根线的共模电压为-7V~+12V:
- 逻辑高电平:
- 逻辑低电平:
由于其只保留了一对差分线路,因此该版本为半双工,但是RS485有全双工版本。
但是由于是原生半双工,因此其天生无法离开通信协议的支持,通常使用Modbus或者Profibus作为其通信协议,Modbus支持一主多从模式。Modbus是应用层报文传输协议。
- RS485(全双工版):
#TODO
但是无论电气特性如何改变,其数据传输的规则和格式都是相同的。因此这些电平之间也可以使用电平转换芯片来做电平转换。
2.1.1 RS485
RS485规定了允许的最大设备数量为32个节点,即单位负载下可以接32个从机。当大于32个设备时需要增加中继器。这是电气负载、电容阻抗、噪声干扰层面进行考虑的。
2.2 串口总线的基础时序
无论串口使用哪种物理层定义或电气定义,其接口的时序均一致。
2.2.1 数据帧格式
- 空闲位:
- 串口空闲时保持为逻辑高电平,包括TX和RX。
- 由于起始位被定义为逻辑低电平,因此RX在空闲时一定是逻辑高电平!
- 在连续的数据帧传输中,当设备速度可以满足时,空闲位可以不出现。具体可见下一章节串口总线标准 > 2 2 2 空闲帧和断开帧。
- 起始位:
- 起始位通常只有一个位,用逻辑低电平表示。用于通知接收设备一个新的数据字节即将开始传输。
- 数据位:
- 数据位长度可以配置为5-9位,但是绝大多数情况为8位。
- 5位主要用于老设备上的部分ASCII字符传输
- 7位主要用于传输标准的ASCII字符
- 8位是最常用的传输形式
- 9位用于传输特定的额外信息或者控制信息,例如:
- Modbus的某些变种中使用9位数据处理寻址或路由信息
- 多点总线网络中,额外的一位用于区分是数据帧还是地址帧
- 如果使用5-7位的数据位格式传递8位数据,则只有最低几位会被传输,高位会被截断
- 如果使用支持9位的硬件传输8位数据,则可以在硬件中设置额外位的值,用于传递额外信息。
- 校验位:
- 校验位有如下五种:
- 无校验(None):不进行奇偶校验
- 奇校验(Odd):设置校验位,使得 "数据位+校验位" 的逻辑1的数量为奇数
- 偶校验(Even):设置校验位,使得 "数据位+校验位" 的逻辑1的数量为偶数
- 标记校验(Mark):校验位始终设置为逻辑高
- 空校验(Space):校验位始终设置为逻辑低
- 停止位:
- 停止位的长度有1位、1.5位、2位三种:
- 1位停止位为最常用的传输模式
- 1.5位停止位通常只在5位数据位传输模式下使用
- 2位停止位一些需要额外错误检查和信号稳定性的应用中使用,尤其是在较慢的波特率下。
2.2.2 空闲帧和断开帧
在完成数据帧格式的定义后,其自然而然地就有了如下的定义引申:
- 假设数据帧长度为10(1起始位+8数据位+无校验+1停止位),那么任何一个数据帧都是在10位的整数倍位开始传输的。
- 而上一章节中我们规定空闲时电平为高电平,而数据帧又一定是在10的整数倍位开始传输。则自然而然的有了长度也为10的空闲帧,且也一定是在10的整数倍位开始传输。即连续n个的高电平帧就成为了空闲帧。
- 而串口协议中又额外规定:当串口数据中遇到了连续的逻辑低电平状态,则会表示线路错误或物理断开。因此连续n个的低电平帧就成为了断开帧或错误帧。
2.2.3 [八股] 波特率与比特率
基本概念为计算机网络中的物理层概念,简单回顾一下码元、波特率、比特率的定义:
- 码元:指使用一个固定时长的信号波形能传输的数字信号的信息量。例如一个波形可以表示一个二进制,则就是1码元,称为二级制码元;可以表示四进制就是2码元,称为四进制码元;N进制就是 码元,称为N进制码元。
- 速率、数据率、数据传输速率:表示单位时间内传输的数据量,可以按照单位不同分为如下两种说法:
- 码元传输速率、波特率:单位时间内传输的码元个数,单位波特(Baud),例如2秒传输4800个码元,则波特率为2400B。码元速率与进制数无关,只与码元长度(码元宽度)有关。
- 信息传输速率、比特率:单位时间内传输的二进制码元个数,单位比特每秒(bit/s或bps)。
(详见计网 物理层基本概念)
- 串口传输中的波形只有逻辑高电平和逻辑低电平两种电平状态,则串口传输中的码元为1码元
- 而串口传输中不止有数据位,其还有起始位、停止位、校验位等概念。因此假设:
- 某一串口的配置为:9600波特率、1起始位、8数据位、0校验位、1停止位,则:
2.3 串口总线常用物理层协议
2.3.1 DB9接口
引脚 |
名称 |
用途 |
DCD |
载波检测(Data Carrier Detect) |
|
RXD |
|
|
TXD |
|
|
DTR |
数据终端就绪(Data Terminal Ready) |
|
GND |
|
|
DSR |
数据设备就绪(Data Set Ready) |
|
RTS |
请求发送(Request To Send) |
|
CTS |
允许发送(Clear To Send) |
|
RI |
响铃指示(Ring Indicator) |
|