1. 网络通信分层框架

1.1 OSI 七层参考模型

OSI(Open Systems Interconnection)由 ISO 提出,描述网络通信的分层架构。每一层只与相邻层交互,通过接口提供服务。

层级名称核心职责
7应用层(Application)为应用程序提供接口,定义数据语义与服务
6表示层(Presentation)数据格式转换、加密/解密、压缩
5会话层(Session)建立、管理、终止会话
4传输层(Transport)端到端可靠传输、流量控制、差错恢复
3网络层(Network)逻辑寻址、路由选择、分组转发
2数据链路层(Data Link)帧封装、物理寻址(MAC)、介质访问控制、差错检测
1物理层(Physical)电气特性、机械特性、信号编码、比特流传输

1.2 TCP/IP 四层模型

互联网实际使用的分层模型,将 OSI 的上三层合并为应用层,下两层合并为网络接口层。

TCP/IP 层级对应 OSI 层级核心职责
应用层5~7(会话 + 表示 + 应用)HTTP、FTP、DNS、Telnet 等协议
传输层4TCP(可靠连接)、UDP(无连接)
互联网层3IP、ICMP、ARP、路由协议
网络接口层1~2Ethernet、Wi-Fi、PPP、驱动程序

1.3 IEEE 802 模型

用于局域网(LAN)与城域网(MAN)的标准族,将 OSI 数据链路层拆分为两个子层。

层级名称核心职责
LLC(Logical Link Control)数据链路层上子层与上层协议交互,提供统一接口,处理复用/解复用
MAC(Medium Access Control)数据链路层下子层帧封装、物理寻址、介质访问控制(CSMA/CD、令牌环等)
物理层信号编码、电气特性、连接器规范

1.4 AUTOSAR 分层模型

汽车电子领域最常用的软件架构标准,通信栈将底层硬件抽象为标准化接口。

AUTOSAR 层级名称核心职责
应用层(ASW)Application Software实现软件组件(SWC),通过端口(Port)交互
运行时环境(RTE)Runtime Environment组件间接口映射,信号路由
基础软件(BSW)Basic Software通信栈(Com / PDU Router / CAN/LIN/Ethernet Driver)、存储、诊断、网络管理
微控制器驱动(MCAL)Microcontroller Driver微控制器寄存器级驱动,直接操作 CAN/LIN/UART/SPI 控制器

AUTOSAR 的 BSW 通信栈中,CAN/LIN 的物理层/数据链路层功能由 Com Driver 封装,应用层(ASW)通过 RTE 收发信号,开发者通常不直接操作帧格式。

2. 嵌入式通信总线层级覆盖总览

以下按 OSI 七层完整列出各总线的覆盖情况。

协议物理层(1)数据链路层(2)网络层(3)传输层(4)会话层(5)表示层(6)应用层(7)说明
CAN⚠️需 CANopen/J1939 补充应用层
LIN⚠️需 LDF/UDS 补充应用层
UART⚠️仅起止位同步,无标准帧格式
RS-232纯电气标准,点对点
RS-485纯电气标准,多点差分
I2C设备寄存器语义由厂商定义
SPI⚠️无标准帧格式,片选由 GPIO 控制
USB⚠️传输层/会话层/设备类完整定义
Modbus依赖 RS-485/Ethernet 物理层
Ethernet网络层及以上由 TCP/IP 补充
BLEGATT/GAP 覆盖会话层与应用层

✅ = 完整定义;⚠️ = 部分定义或弱定义;❌ = 未定义,需上层协议补充。

3. 各协议详细说明

3.1 CAN

OSI 层级CAN 协议栈内容
应用层(7)CANopenJ1939DeviceNet 等,定义对象字典、PDO/SDO、网络管理
数据链路层(2)MAC:帧封装、位填充、CRC、位仲裁、ACK、错误检测;LLC:报文过滤、过载通知
物理层(1)ISO 11898-2:差分信号电平、终端电阻(120 Ω × 2)、收发器特性、波特率
  • CAN 的数据链路层功能(仲裁、CRC、ACK、错误帧)由硬件控制器自动完成,软件在应用层几乎无感知。

3.2 LIN

OSI 层级LIN 协议栈内容
应用层(7)LDF(LIN Description File)定义调度表、信号映射;UDS 诊断服务
数据链路层(2)MAC:帧头/响应时序控制、主节点调度;LLC:PID 过滤、校验和计算、事件触发帧冲突处理
物理层(1)ISO 9141(K-line):单线信号电平、上拉电阻、UART 异步位时序
  • LIN 的复杂性从硬件转移到了软件:主节点需在应用层维护调度表与冲突回退逻辑。

3.3 UART

OSI 层级UART 协议栈内容
数据链路层(2)仅定义起止位同步:1 起始位(显性)+ 8 数据位 + 1 停止位(隐性),无寻址、无 ACK、无帧校验
物理层(1)电气特性(TTL / RS-232 / RS-485)、波特率、单工/半双工/全双工
  • UART 本身不定义数据包格式。实际工程中,通常在上层自定义协议帧(如 帧头 + 长度 + 数据 + CRC)来弥补数据链路层的缺失。

3.4 RS-232 / RS-485

OSI 层级内容
物理层(1)纯电气标准:RS-232(单端、点对点、±3V~±15V);RS-485(差分、多点、半双工/全双工)
数据链路层及以上未定义,需叠加 Modbus、自定义协议等
  • RS-485 常与 Modbus RTU 配合使用:RS-485 提供物理层,Modbus 提供数据链路层与应用层。

3.5 I2C

OSI 层级I2C 协议栈内容
数据链路层(2)起始/停止条件ACK/NACK7/10 位地址读写位、字节传输时序
物理层(1)双线(SDA / SCL)、开漏输出、上拉电阻、电气特性、标准/快速/高速模式
  • I2C 的数据链路层相对完整,但不定义数据语义。设备寄存器地址、读写格式、数据含义完全由设备厂商定义(如 EEPROM 的页写时序、传感器的配置寄存器)。

3.6 SPI

OSI 层级SPI 协议栈内容
数据链路层(2)无标准帧格式。通常由设备定义:命令字节 + 地址字节 + 数据字节
物理层(1)四线(MOSI / MISO / SCK / CS)、全双工、推挽输出、时钟极性/相位(CPOL / CPHA)
  • SPI 的**片选(CS)**由 GPIO 控制,不属于协议内置的寻址机制。
  • 相比 I2C,SPI 的协议标准化程度更低,几乎完全依赖设备数据手册定义通信时序。

3.7 USB

OSI 层级USB 协议栈内容
应用层(7)设备类协议:HID(键盘鼠标)、Mass Storage(U盘)、CDC(虚拟串口)、Audio 等
表示层/会话层(6/5)设备配置字符串描述符枚举流程
传输层(4)四种传输类型:控制(Control)、中断(Interrupt)、批量(Bulk)、等时(Isochronous)
数据链路层(2)帧/微帧格式:SYNC、PID、地址、端点号、CRC、握手包(ACK/NAK/STALL)
物理层(1)差分信号(D+/D-)、NRZI 编码、位填充、电气特性、连接器规范
  • USB 是嵌入式领域协议栈最完整的接口之一,从物理层到应用层均有严格定义,因此实现复杂度远高于 UART/SPI/I2C。

3.8 Modbus

OSI 层级Modbus 协议栈内容
应用层(7)功能码(0x01~0x17):读线圈、读保持寄存器、写单个寄存器等;数据模型:线圈、离散输入、保持寄存器、输入寄存器
数据链路层(2)ADU/PDU 格式:从机地址 + 功能码 + 数据 + CRC/LRC;主从问答机制
物理层(1)不定义,依赖 RS-485(Modbus RTU)或 Ethernet(Modbus TCP)
  • Modbus 是应用层协议,本身不规定电气特性。Modbus RTU 运行在 RS-485 之上,Modbus TCP 运行在 Ethernet + TCP/IP 之上。

3.9 Ethernet

OSI 层级Ethernet 协议栈内容
数据链路层(2)MAC 子层:MAC 地址、帧格式(目的 MAC / 源 MAC / 类型 / 数据 / FCS)、CSMA/CD
物理层(1)PHY 芯片:双绞线/光纤、信号编码(Manchester / 4B/5B / PAM5)、连接器规范
  • Ethernet 本身只覆盖物理层与数据链路层,网络层及以上由 TCP/IP 协议栈 补充。

3.10 Bluetooth Low Energy(BLE)

OSI 层级BLE 协议栈内容
应用层(7)GATT Profile:Heart Rate、Battery、HID over GATT 等
表示层/会话层(6/5)ATT 协议(属性协议)、GAP(通用访问规范):角色定义、连接管理、安全配对
传输层(4)L2CAP:逻辑链路控制与适配,信道复用、分段重组
数据链路层(2)Link Layer:状态机(Advertising/Scanning/Initiating/Connected)、帧格式、CRC、ACK
物理层(1)RF 层:2.4 GHz ISM 频段、40 个信道、GFSK 调制、跳频
  • BLE 协议栈分层清晰,从物理层到应用层均有定义,但实现上通常由专用芯片(如 Nordic nRF 系列)固件完成,应用开发者主要与 GATT 层交互。

4. 层级缺失的共性与影响

4.1 为什么这些总线大多只覆盖底层

嵌入式通信总线的设计目标通常是板级或机箱级短距离实时通信,因此:

  • 不需要网络层(3):无跨网段路由需求,所有节点在同一广播域内。
  • 不需要传输层(4):无端到端可靠传输需求,错误处理由数据链路层或应用层完成。
  • 不需要会话层(5):无会话建立/拆除过程(USB 除外,其枚举流程类似会话建立)。

4.2 层级缺失的弥补方式

缺失层级弥补方案示例
数据链路层不完整上层自定义帧格式UART 上叠加 帧头 + 长度 + 数据 + CRC 协议
应用层缺失设备数据手册定义寄存器语义I2C/SPI 传感器的配置寄存器表
网络层缺失网关转发CAN-Ethernet 网关实现跨网段通信
传输层缺失应用层重试机制Modbus 主站超时重发

5. 复杂度对比总结

协议硬件复杂度软件复杂度协议栈完整性
SPI中(设备时序各异)
I2C
UART极低中(需自定义上层帧)
RS-485中(需叠加 Modbus 等)
LIN高(调度表、冲突处理)
CAN低(硬件屏蔽底层)
USB高(驱动/枚举/设备类)
Ethernet + TCP/IP
BLE中(依赖协议栈固件)
  • 硬件复杂度:物理层电气特性、收发器设计难度。
  • 软件复杂度:驱动开发、协议栈维护、应用层集成难度。
  • 协议栈完整性:从物理层到应用层的覆盖程度。