2. SECS-I 协议详解:RS-232 物理层、块传输协议、消息格式与校验重传

SECS-I 是 SEMI Equipment Communications Standard 1 的简称,定义了 SECS/GEM 通信栈中最底层的物理连接与数据链路层规范。它规定了设备与主机之间如何通过 RS-232 串行接口进行字节传输、如何将字节组装成块(Block)、如何将块组合成消息(Message),以及如何通过校验与重传机制保证数据的可靠性。本章将逐层拆解 SECS-I 的核心机制。

2.1 RS-232 物理层与电气特性

SECS-I 物理层基于 EIA RS-232-C 标准,采用点对点串行通信。在实际产线集成中,需重点关注以下参数:

参数SECS-I 规定值说明
传输速率9600 bps(默认)可协商为 19200、38400 等,但产线通常固定 9600
数据位7 位ASCII 字符集,第 8 位用于校验
停止位1 位固定值
奇偶校验偶校验(Even)保证字节级传输正确性
信号电平±3V ~ ±15VRS-232 标准电压范围
连接器DB-25 或 DB-9通常使用 DB-9,仅需 3 根线(TX、RX、GND)
产线集成提示: 许多老旧半导体设备仍使用 DB-25 母头。若主机侧为 DB-9,需制作转接线,注意 TX/RX 交叉连接(Null Modem 方式)。
RS-232 物理连接示意图(Null Modem) 主机 DB-9 母头 设备 DB-25 母头 TX → RX RX → TX GND — GND 注意:TX/RX 必须交叉连接,否则无法通信

2.2 块传输协议(Block Transfer Protocol)

SECS-I 将上层消息切分为固定大小的数据块(Block)进行传输。每个块是物理层传输的最小独立单元,包含块头(Block Header)和数据区(Data Area)。

2.2.1 块结构

字段长度(字节)说明
Length Byte1块总长度(含 Length 自身),范围 10~254 字节
Device ID1设备标识,0x00 通常代表主机
Message ID1消息编号,用于消息重组
Block Number1块序号,从 0 开始递增
System Bytes2系统字节,用于事务匹配
Data可变实际数据内容,最大 244 字节
Checksum2CRC-16 校验和
关键约束: 单个块最大长度为 254 字节(含头尾)。若消息超过 244 字节数据区,必须拆分为多个块传输。
SECS-I 块结构(Block Format) Length 1 字节 Device ID 1 字节 Msg ID 1 字节 Block# 1 字节 System Bytes 2 字节 Data Area 最多 244 字节 CRC 2 字节 块头(6 字节) 数据区 校验 块总长度 = 6(头)+ 数据长度 + 2(CRC),最大 254 字节

2.2.2 多块消息重组

当消息长度超过单块容量时,发送方将消息拆分为多个块,接收方根据 Message ID 和 Block Number 重组完整消息。重组规则如下:

  • 首块标志: Block Number = 0 表示消息的第一个块。
  • 末块标志: 若块数据区长度 < 244 字节,或块总长度 < 254 字节,则该块为消息的最后一个块。
  • 超时机制: 若接收方在 T3 时间内未收到后续块,则丢弃已接收的部分并触发重传请求。
常见错误: 部分设备在末块中填充 0x00 至 244 字节,导致接收方误判还有后续块。集成测试时必须验证末块判定逻辑。

2.3 消息格式(Message Format)

SECS-I 消息由若干块组成,消息本身不额外添加头部,而是通过块头中的字段隐式定义消息边界。消息格式分为两种类型:

消息类型方向说明
Primary Message主机 → 设备 或 设备 → 主机主动发起的请求或数据
Reply Message与 Primary 相反方向对 Primary 的响应,必须携带相同的 System Bytes

消息的完整生命周期包含以下步骤:

  1. 发送方构造消息,分配唯一的 System Bytes(2 字节)。
  2. 若消息长度 > 244 字节,拆分为多个块,依次发送。
  3. 接收方收到所有块后,按 Block Number 顺序重组为完整消息。
  4. 接收方处理消息,构造 Reply Message,使用相同的 System Bytes 返回。
  5. 发送方收到 Reply 后,释放 System Bytes 资源。
SECS-I 消息传输流程 主机 发送方 设备 接收方 ① 发送 Block 0 (Msg ID=1, Block#=0) ② 发送 Block 1 (Msg ID=1, Block#=1) ③ 发送 Block 2 (末块, Msg ID=1, Block#=2) 设备重组完整消息 ④ 发送 Reply Message (System Bytes 相同) System Bytes 用于匹配 Primary 与 Reply,不可重复使用

2.4 校验与重传机制

SECS-I 通过 CRC-16 校验和与超时重传机制保证数据传输的可靠性。两者协同工作,确保物理层错误或丢包能被检测并恢复。

2.4.1 CRC-16 校验

每个块尾部包含 2 字节 CRC-16 校验和,计算范围覆盖整个块(Length 字节到 Data 区末尾)。生成多项式为:

CRC-16-IBM: x¹⁶ + x¹⁵ + x² + 1 (0x8005)
初始值: 0x0000
计算示例(伪代码):
uint16_t crc16(uint8_t *data, int len) {
    uint16_t crc = 0x0000;
    for (int i = 0; i < len; i++) {
        crc ^= data[i];
        for (int j = 0; j < 8; j++) {
            if (crc & 0x0001)
                crc = (crc >> 1) ^ 0xA001;
            else
                crc >>= 1;
        }
    }
    return crc;
}
校验流程: 接收方计算收到块的 CRC,与块尾的 CRC 字段比较。若不一致,则丢弃该块并等待重传。

2.4.2 超时与重传

SECS-I 定义了三个关键超时定时器,用于控制重传行为:

定时器默认值触发条件动作
T11.0 秒发送块后未收到 ACK重传该块,最多重试 3 次
T210.0 秒发送消息后未收到 Reply重传整个消息,最多重试 3 次
T345.0 秒多块消息中块间间隔超时丢弃已收块,等待发送方重传

重传机制遵循以下规则:

  • 发送方在 T1 超时后重传当前块,块内容不变。
  • 接收方收到重复块时,若已正确接收则丢弃重复块并重新发送 ACK。
  • 若重试 3 次后仍未收到 ACK,发送方断开连接并上报通信错误。
  • T2 超时通常由应用层处理,SECS-I 仅负责块级重传。
SECS-I 重传机制流程图 发送块 接收块 CRC OK? 是 发送 ACK 否 丢弃块,等待重传 T1 超时重传 ACK 返回,发送下一块 重试 3 次后仍失败,断开连接并上报错误 T1=1.0s, T2=10.0s, T3=45.0s

2.5 本章小结

SECS-I 协议通过 RS-232 物理层、块传输协议、消息格式与校验重传机制,为上层 SECS-II 消息提供了可靠的传输通道。在产线集成中,需重点检查以下内容:

  • 物理连接: 确认 RS-232 参数(9600, 7, E, 1)一致,TX/RX 交叉正确。
  • 块结构: 验证块头字段(Device ID、Message ID、Block Number、System Bytes)的填充逻辑。
  • 消息重组: 测试多块消息的拆分与重组,特别是末块判定条件。
  • 校验与重传: 模拟 CRC 错误和超时场景,验证重传机制是否符合 SECS-I 规范。
实战建议: 使用串口抓包工具(如 Free Serial Monitor)捕获原始字节流,逐字节解析块结构,是排查 SECS-I 层问题的最有效手段。