串口物理层和协议层

串口通讯(Serial Communication)是一种非常常用的设备间串行通讯方式,因其简单易用而广泛应用于各种电子设备中。

1 物理层

串口通讯的物理层有多种标准和变种,其中RS-232标准是最为广泛使用的一种。RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准,是串口通讯的基础。

1.1  RS-232 标准概述

  • 信号用途: RS-232标准定义了不同信号的功能,包括发送数据、接收数据、控制信号和地线等。常见的信号包括:
    • TXD: 发送数据线
    • RXD: 接收数据线
    • GND: 地线
    • RTS: 请求发送
    • CTS: 清除发送
  • 通讯接口: RS-232通常使用DB9DB25连接器,DB9连接器是最常见的形式,适用于大多数设备间的连接。
  • 电平标准: RS-232标准规定了信号的电平标准,通常在-15V至+15V之间。逻辑“1”(空闲状态)通常表示为负电压(如-3V到-15V),而逻辑“0”则表示为正电压(如+3V到+15V)。这一电平标准使得RS-232能够在一定距离内进行可靠的通讯。

1.2  串口通讯结构

在使用RS-232标准的串口设备间,常见的通讯结构如下(假设为图示):

  • 两个设备通过DB9接口连接,形成一条串口信号线。
  • 信号线中使用RS-232标准传输数据信号,以实现设备间的通讯。

1.3 电平转换

由于RS-232的电平标准与大多数微控制器(如Arduino、STM32等)使用的TTL(Transistor-Transistor Logic)电平标准不兼容,因此需要使用电平转换芯片。电平转换的过程如下:

  • RS-232信号通过电平转换芯片转换为TTL电平信号,TTL信号的电平通常为0V(逻辑0)和5V(逻辑1)。
  • 转换后的TTL信号可以被控制器直接识别,从而实现数据的发送和接收。

1.4 RS-232

在传统台式计算机中,通常会有一个RS-232标准的COM口(DB9接口)。这个接口通常由公头(针式)和母头(孔式)构成。计算机一般使用公头接口,而调制解调器通常使用母头接口。通过串口线连接这两种设备,可以实现数据的传输。

1.4.1 DB9接口的引脚定义

引脚号信号名称说明
1DCD (Data Carrier Detect)数据载波检测
2RXD (Receive Data)接收数据
3TXD (Transmit Data)发送数据
4DTR (Data Terminal Ready)数据终端准备就绪
5GND (Signal Ground)信号地
6DSR (Data Set Ready)数据设备准备就绪
7RTS (Request to Send)请求发送
8CTS (Clear to Send)清除发送
9RI (Ring Indicator)响铃指示

由于两个通讯设备之间的收发信号 (RXD 与 TXD)应交叉相连,所以调制调解器端的 DB9 母头的收发信号接法一般与公头的相反

2 协议层

串口通讯的数据包由发送设备通过其TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,数据包的内容结构明确规定,通常由以下几个部分组成:

  1. 启始位 (Start Bit)
  2. 主体数据 (有效数据)
  3. 校验位 (Parity Bit)
  4. 停止位 (Stop Bit)

为了确保通讯双方能够正常收发数据,数据包的格式必须在通讯双方之间达成一致。

2.1波特率

在本章中,主要讨论串口的异步通讯。异步通讯中,由于缺乏时钟信号(例如,在DB9接口中并没有时钟信号),因此两个通讯设备必须约定好波特率。波特率定义了每个码元的长度,以便于信号的解码。图示中用虚线分隔的每一格代表一个码元。常见的波特率包括4800、9600、115200等。

2.2 通讯的起始和停止信号

串口通讯的数据包从起始信号开始,直到停止信号结束:

  • 起始信号: 数据包的起始信号由一个逻辑0的数据位表示。
  • 停止信号: 数据包的停止信号可以由0.5、1、1.5或2个逻辑1的数据位表示。只要双方约定一致即可。

2.3 有效数据

在数据包的起始位之后,紧接着就是要传输的主体数据内容,称为有效数据。有效数据的长度通常被约定为5、6、7或8位长。

2.4 数据校验

在有效数据之后,可能会有一个可选的校验位。由于数据通信容易受到外部干扰,可能导致传输数据出现偏差,因此可以在传输过程中增加校验位。常见的校验方法有:

  • 奇校验 (Odd Parity): 有效数据和校验位中“1”的个数为奇数。例如,一个8位的有效数据为01101001,此时总共有4个“1”。为了达到奇校验效果,校验位为“1”,最后传输的数据将是8位的有效数据加上1位的校验位,总共9位。
  • 偶校验 (Even Parity): 要求帧数据和校验位中“1”的个数为偶数。例如,数据帧11001010中“1”的个数为4个,因此偶校验位为“0”。
  • 0校验 (Space Parity): 无论有效数据的内容如何,校验位总为“0”。
  • 1校验 (Mark Parity): 校验位总为“1”。
  • 无校验 (No Parity): 在这种情况下,数据包中不包含校验位。

发表评论