串口协议的三层结构(物理层、数据链路层、应用层)

目录

1. 串口协议的三层结构:

2. 物理层(Physical Layer)

2. 数据链路层(Data Link Layer)

UART协议概述

UART 数据帧结构

典型数据帧结构

常用物理层标准

Modbus RTU 协议概述

Modbus RTU 消息格式

Modbus RTU 数据帧示例

3. 应用层(Application Layer)


1. 串口协议的三层结构:

层次 功能描述 主要内容 实例协议

物理层

负责数据传输的物理媒介和硬件接口

电压电平、波特率、传输介质、接头类型

RS-232、RS-485、TTL

数据链路层

负责将数据封装成帧并处理错误检测、流量控制和同步

数据帧(起始位、数据位、停止位、校验位)、错误检测、流量控制

UART、Modbus RTU、XMODEM

应用层

负责定义数据格式、命令和响应,实现与上层应用的交互

命令、数据格式、响应内容

Modbus、AT命令、NMEA 0183


2. 物理层(Physical Layer)

物理层负责数据的实际传输,即通过电缆、无线等媒介发送和接收比特流。这一层定义了串口通信所需的硬件标准和传输介质。

功能和内容:

  • 信号传输:定义了通过串口传输的信号类型(如电平、频率等),通常使用的是RS-232RS-485TTL(Transistor-Transistor Logic)等标准。

  • 电压电平:不同标准会有不同的电压电平来表示“0”和“1”。例如,RS-232通常使用 +12V 和 -12V 来表示逻辑“0”和“1”。

  • 传输速率:规定了数据传输的速率(波特率),例如 9600、115200、921600 bps 等。

  • 接头和接口标准:物理连接标准(例如 DB9、DB25 接口)。

典型标准

  • RS-232:常用于计算机与外设的串行连接,最大传输距离一般为15米,速度从300 bps到115200 bps不等。

  • RS-485:适用于远距离或多点通信,支持更高的抗干扰能力。

  • TTL:通常用于短距离设备间的通信,电平为0V和3.3V(或5V)。


3. 数据链路层(Data Link Layer)

数据链路层负责将物理层提供的比特流转化为可管理的数据帧,并处理可靠性问题。它确保了数据的正确传输,并负责错误检测和纠正。

功能和内容:

  • 数据帧封装:这一层把数据封装成帧,包括帧头、数据部分和校验部分。数据帧可能会带有一些控制信息,如起始位、停止位、校验位等。

    • 起始位:标识数据帧的开始。

    • 数据位:实际传输的数据,通常为8位。

    • 停止位:标识数据帧的结束。

    • 校验位:用于检测数据是否出错(如奇偶校验)。

  • 错误检测和纠正:数据链路层会检查数据的完整性,通常使用校验位或校验和来检测传输错误。若发现错误,数据链路层负责请求重发数据。

  • 流量控制:在一些协议中,数据链路层还负责流量控制,确保发送方不会发送超过接收方处理能力的数据量。

典型的协议

  • RS-232RS-485 是常见的串口协议的物理层标准,而 UART、Modbus RTUXMODEM 等则通常在数据链路层运行。

3.1 UART协议概述

UARTUniversal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信接口,用于串口通信,是嵌入式系统中非常常见的硬件模块。UART 是一种点对点通信协议,广泛用于嵌入式系统、计算机、传感器、模块等设备之间的数据传输。

3.1.1 UART 数据帧结构

字段 描述
起始位(Start Bit) 数据帧以 1 个低电平(0) 开头,表示通信的开始
数据位(Data Bits) 实际传输的数据,通常为 5~9 位(常见为 8 位)
校验位(Parity Bit,非必需) 可选位,用于检测数据传输错误。类型包括奇校验(Odd Parity)或偶校验(Even Parity)
停止位(Stop Bit) 数据帧结束的标志,通常为 1 个或 2 个高电平(1)

3.1.2 典型数据帧结构

| Start Bit | Data Bits (8) | Parity Bit (Optional) | Stop Bit (1/2) |

例如,常见的 UART 数据帧为 8N1

  • 8:8 个数据位。

  • N:无校验位(None)。

  • 1:1 个停止位。

3.1.3 常用物理层标准

  • RS-232

    • 早期的串口通信标准,支持点对点通信。

    • 电压范围:-15V~+15V,噪声抗干扰能力较差。

  • RS-485

    • 半双工通信,支持多点通信(最多 32 台设备)。

    • 电压范围:差分信号,+5V 和 -5V,抗干扰能力较强。

    • 常用于工业控制场景。

  • TTL

    • 电压范围:电平为0V和3.3V(或5V)

    • 常用于短距离通信

3.2 Modbus RTU 协议概述

Modbus RTU 是一种广泛应用于工业自动化领域的串行通信协议,尤其用于在设备之间传输数据。Modbus RTU 是 Modbus 协议 的一种实现方式,特别适用于串行通信(如 RS-232 或 RS-485)中,常用于连接PLC、传感器、执行器和其他设备。

3.2.1 Modbus RTU 消息格式

字段

长度(位)

描述

地址字段

8位

表示目标设备的地址。有效范围是 1 至 247

功能码

8 位

定义了从设备执行的操作(如读取或写入)

数据字段

可变长度

包含请求或响应的数据,具体内容取决于功能码

CRC 校验码

16 位

用于检测数据的完整性和传输过程中的错误

3.2.2 Modbus RTU 数据帧示例

假设主设备发送一个读取保持寄存器(功能码 0x03)的请求,目标设备地址为 0x01,读取 2 个寄存器,每个寄存器 16 位(2 字节)

请求数据帧:

| 地址  | 功能码  | 数据长度  | 数据         | CRC  |
|-------|--------|----------|--------------|------|
| 0x01  | 0x03   | 0x02     | 0x00 0x02    | CRC  |
  • 地址0x01,目标设备地址

  • 功能码0x03,表示读取保持寄存器

  • 数据长度0x02,表示请求读取 2 个寄存器

  • 数据0x00 0x02,表示读取的数据或命令

  • CRC:校验和,用于确保数据传输的完整性

响应数据帧(假设设备返回两个寄存器的值 0x00100x0020):

| 地址  | 功能码  | 字节数 | 数据                 | CRC |
|-------|--------|--------|-------------------- |
| 0x01  | 0x03   | 0x04   | 0x00 0x10 0x00 0x20 | CRC |
  • 地址0x01,目标设备地址

  • 功能码0x03,表示读取保持寄存器

  • 字节数0x04,表示返回 4 个字节的数据

  • 数据0x00 0x10 0x00 0x20,表示读取的 2 个寄存器的值

  • CRC:校验和


4. 应用层(Application Layer)

应用层负责与应用程序的交互,是串口协议的最高层,主要用于控制和管理数据的传输内容和格式。应用层协议定义了数据的格式、命令、响应以及如何解释这些数据。

功能和内容:

  • 协议格式和语法:定义如何格式化发送和接收的数据。例如,一些串口协议可能规定数据帧中应包含特定的命令、数据字段和响应。

  • 命令和响应:应用层会定义不同的命令和相应的响应。例如,传感器设备可能通过串口接收查询命令并返回传感器数据。

  • 数据解析与处理:应用层还会负责接收到的数据的解析和处理。收到的数据将被转换成具体的业务数据,如设备的状态、传感器测量值等。

常见协议示例

  • Modbus:一种广泛用于工业自动化的串口通信协议,定义了设备如何通过串口请求数据或发送命令。

  • AT命令:用于控制调制解调器或手机等设备的通信命令集。

  • NMEA 0183:用于船舶和航空电子设备的通信协议,定义了GPS设备、导航设备如何通过串口传递信息。