2. SECS-I物理层与数据链路层:RS-232C接口标准、SECS-I帧格式(Block、Message)、校验和计算、多块消息传输机制

SECS-I(SEMI Equipment Communications Standard 1)是SECS/GEM协议栈中最底层的通信标准,定义了物理层和数据链路层的规范。它基于经典的RS-232C串行通信接口,并在此基础上构建了面向半导体设备的消息帧结构。理解SECS-I是掌握整个SECS/GEM协议体系的基础,也是进行底层通信故障排除的关键。

2.1 RS-232C接口标准与SECS-I物理层

SECS-I物理层直接采用RS-232C标准,定义了主机(Host)与设备(Equipment)之间的电气特性、机械连接和信号定义。虽然RS-232C在现代工业中逐渐被USB或以太网取代,但在半导体设备领域,其简单、可靠的点对点通信特性仍被广泛保留。

2.1.1 电气特性与信号定义

RS-232C使用非平衡(单端)传输方式,信号电压相对于信号地(GND)进行测量。SECS-I强制要求使用以下关键信号线:

信号名称 DB-25引脚 方向(Host→Equip) 功能描述
TX (Transmitted Data) 2 Host → Equip 主机发送数据给设备
RX (Received Data) 3 Host ← Equip 主机接收来自设备的数据
RTS (Request To Send) 4 Host → Equip 主机请求发送(硬件流控)
CTS (Clear To Send) 5 Host ← Equip 设备允许主机发送(硬件流控)
GND (Signal Ground) 7 — 信号地参考点
测试要点:在排查物理层故障时,应首先使用万用表测量GND引脚是否连通,以及TX/RX引脚上的电压是否在±3V至±15V范围内。若电压为0V或接近0V,通常表示线路断路或接口芯片损坏。

2.1.2 波特率与通信参数

SECS-I标准定义了固定的通信参数,以确保不同厂商的设备能够互操作:

  • 波特率:9600 bps(标准值,部分设备支持19200或38400)
  • 数据位:7位(ASCII字符集)
  • 校验位:偶校验(Even Parity)
  • 停止位:1位
  • 流控制:硬件流控(RTS/CTS)
常见故障:数据位设置为8位是导致SECS-I通信失败的常见原因。虽然8位数据位在通用串口通信中很常见,但SECS-I强制使用7位数据位+偶校验,以确保帧头中的长度字段能被正确解析。

2.2 SECS-I帧格式:Block与Message

SECS-I数据链路层将上层(SECS-II)的消息封装成帧进行传输。帧的基本单位是Block(块),一个或多个Block组成一个Message(消息)。

2.2.1 Block帧结构

每个Block由10个字节(Byte)组成,固定长度为10字节。其结构如下:

字节偏移 字段名称 长度(字节) 描述
0 Length Byte 1 表示后续数据字节数(通常为9)
1 Device ID / Control Byte 1 高7位为设备ID,最低位为R-bit(回复位)
2 Message ID (Low) 1 消息ID的低8位
3 Message ID (High) 1 消息ID的高8位
4 Block Number 1 当前Block在Message中的序号(0~127)
5 System Bytes 2 系统字节,用于消息匹配与超时控制
7 Data[0] 2 数据载荷的前2个字节
9 Checksum 1 校验和(对字节0~8进行异或运算)
关键字段说明:
  • Length Byte:固定为0x09(9),表示后续9个字节为有效数据。
  • Device ID:用于区分总线上的不同设备,范围0~127。
  • R-bit:0表示需要回复(Reply),1表示不需要回复。
  • Block Number:最高位(bit 7)为E-bit(结束位),0表示还有后续Block,1表示这是最后一个Block。

2.2.2 Message与多块传输机制

当SECS-II消息的数据长度超过2字节时,需要将消息拆分为多个Block进行传输。多块消息的传输遵循以下规则:

  1. 第一个Block:Block Number = 0,E-bit = 0。
  2. 中间Block:Block Number = 1, 2, 3...,E-bit = 0。
  3. 最后一个Block:Block Number = N,E-bit = 1。
  4. 数据重组:接收方根据Block Number顺序重组数据,当收到E-bit=1的Block时,表示消息完整。

以下SVG图展示了单个Block与多块消息的帧结构对比:

SECS-I 帧结构:单块消息 vs 多块消息 单块消息(Single-Block Message) Length DevID MsgID Block# System Data[0:1] Checksum Block# = 0, E-bit = 1 (结束位为1,表示消息结束) 多块消息(Multi-Block Message) Length DevID MsgID Block#0 System Data[0:1] CS Block#=0, E-bit=0 Length DevID MsgID Block#1 Block#=1, E-bit=0 Length DevID MsgID Block#N System Data[0:1] CS Block#=N, E-bit=1 (结束) 说明:多块消息中,除最后一个Block的E-bit=1外,其余Block的E-bit均为0。接收方根据Block Number顺序重组数据,当收到E-bit=1时,表示消息完整。

2.3 校验和计算

SECS-I使用异或(XOR)校验和来检测传输错误。校验和字段(Checksum)是对Block中前9个字节(字节0~8)进行逐字节异或运算的结果。

2.3.1 计算规则

  1. 初始化校验和变量为0x00。
  2. 依次对字节0到字节8进行异或运算:checksum = checksum XOR byte[i]。
  3. 将最终结果写入字节9(Checksum字段)。

2.3.2 计算示例

假设一个Block的前9个字节为:09 81 01 00 00 12 34 56 78,计算其校验和:

初始值: checksum = 0x00
第1步: checksum = 0x00 XOR 0x09 = 0x09
第2步: checksum = 0x09 XOR 0x81 = 0x88
第3步: checksum = 0x88 XOR 0x01 = 0x89
第4步: checksum = 0x89 XOR 0x00 = 0x89
第5步: checksum = 0x89 XOR 0x00 = 0x89
第6步: checksum = 0x89 XOR 0x12 = 0x9B
第7步: checksum = 0x9B XOR 0x34 = 0xAF
第8步: checksum = 0xAF XOR 0x56 = 0xF9
第9步: checksum = 0xF9 XOR 0x78 = 0x81
最终校验和: 0x81
验证方法:接收方收到完整的10字节Block后,对前9个字节进行同样的异或运算,将结果与第10字节(Checksum)比较。若相等,则校验通过;否则,说明传输过程中发生了错误,应丢弃该Block并请求重传。

2.4 多块消息传输机制详解

当SECS-II消息的数据长度超过2字节时,SECS-I必须将数据拆分为多个Block进行传输。多块消息的传输涉及发送方和接收方之间的协调机制。

2.4.1 发送流程

  1. 拆分数据:将SECS-II消息数据按每2字节一组进行拆分,最后一组可能不足2字节。
  2. 构建Block:为每个数据组构建一个10字节的Block,设置正确的Block Number和E-bit。
  3. 顺序发送:按Block Number从小到大的顺序依次发送每个Block。
  4. 等待确认:发送完最后一个Block后,等待接收方的确认(ACK/NAK)。

2.4.2 接收流程

  1. 接收Block:逐个接收Block,检查校验和和帧格式。
  2. 检查E-bit:若E-bit=0,则继续等待下一个Block;若E-bit=1,则开始重组消息。
  3. 重组数据:按Block Number顺序提取Data字段,拼接成完整的SECS-II消息数据。
  4. 发送确认:若所有Block接收正确,发送ACK;否则发送NAK并请求重传。

以下SVG图展示了多块消息的发送与接收流程:

多块消息传输流程 发送方 (Host) 接收方 (Equipment) 拆分数据为2字节组 发送 Block 0 (E=0) Block 0 发送 Block 1 (E=0) Block 1 发送 Block N (E=1) Block N (最后一块) 接收 Block 0 接收 Block 1 接收 Block N 发送 ACK ACK 确认 说明:发送方按顺序发送所有Block,接收方在收到E-bit=1的Block后,重组数据并发送ACK确认。若校验和错误,接收方发送NAK请求重传。

2.5 故障排除要点

常见故障与排查方法:
  • 物理层故障:检查RS-232C电缆连接、电压电平、波特率设置是否匹配。
  • 帧格式错误:使用串口抓包工具(如Serial Port Monitor)捕获原始数据,检查Length Byte是否为0x09,Block Number是否连续。
  • 校验和错误:在测试工具中实现校验和自动计算与验证功能,快速定位错误Block。
  • 多块消息超时:检查T3(Reply Timeout)和T5(Connect Timeout)定时器设置,确保接收方有足够时间处理多块消息。

2.6 本章小结

SECS-I作为SECS/GEM协议栈的底层基础,其RS-232C物理层和帧结构设计直接影响了上层协议的可靠性和效率。掌握Block帧格式、校验和计算方法以及多块消息传输机制,是进行SECS/GEM协议测试与故障排除的前提。在实际测试中,应重点关注物理层连接质量、帧格式正确性和校验和一致性,这些是确保通信稳定的关键因素。