2、SECS-I协议详解:RS-232物理层、块传输协议、消息格式、校验和计算
SECS-I(SEMI Equipment Communications Standard 1)是SECS/GEM协议栈中最底层的通信协议,定义了数据在物理介质上的传输方式。它基于RS-232C串行通信标准,并在此基础上增加了面向半导体设备的块传输协议、消息帧格式以及校验机制。理解SECS-I是掌握整个SECS/GEM通信体系的基础。
2.1 RS-232C 物理层规范
SECS-I 直接采用 RS-232C 标准作为其物理层。在半导体工厂环境中,设备通常通过专用的串行线缆连接至主机(Host)。
| 参数 | SECS-I 规范值 | 说明 |
|---|---|---|
| 接口标准 | RS-232C | 点对点,全双工 |
| 连接器 | DB-25 或 DB-9 | 通常使用 DB-25 |
| 传输模式 | 异步,全双工 | 可同时发送和接收 |
| 波特率 | 9600 bps(常用) | 标准支持 1200 ~ 19200 bps |
| 数据位 | 7 位 | ASCII 字符传输 |
| 停止位 | 1 位 | — |
| 奇偶校验 | 偶校验(Even) | 用于字节级错误检测 |
| 信号电平 | ±3V ~ ±15V | 标准 RS-232 电平 |
2.2 块传输协议(Block Transfer Protocol)
SECS-I 的核心在于其独特的“块传输”机制。由于 RS-232 是面向字节的流式传输,SECS-I 将上层(SECS-II)的长消息分割成多个固定大小的“数据块”(Block)进行传输,接收方再将其重组。这种设计提高了抗干扰能力和传输可靠性。
2.2.1 数据块(Block)结构
每个数据块是 SECS-I 传输的基本单元,其长度固定为 13 个字节(Header 10 字节 + Data 最多 254 字节,但实际传输时 Data 部分长度可变,总长度仍以块为单位管理)。标准块结构如下:
| 字节偏移 | 字段名称 | 长度(字节) | 描述 |
|---|---|---|---|
| 0 | Length Byte | 1 | 表示该块中后续数据的长度(包括 Header 和 Data) |
| 1 ~ 10 | Block Header | 10 | 包含设备ID、消息ID、块号、系统字节等控制信息 |
| 11 ~ N | Data | 0 ~ 244 | SECS-II 消息的实际载荷(文本或二进制) |
| N+1 | Checksum | 2 | 对整个块(Length Byte + Header + Data)的校验和 |
2.2.2 多块消息传输流程
当一条 SECS-II 消息超过单个块的最大数据容量时,SECS-I 会将其拆分为多个块(Multi-Block Message)。传输遵循“发送-等待-确认”的机制。
2.3 消息格式详解
SECS-I 的消息格式以“块”为单位,每个块包含一个 10 字节的头部(Header)和可变长度的数据部分。头部是控制通信的核心。
2.3.1 10 字节块头部(Block Header)结构
| 字节 | 字段 | 位 | 描述 |
|---|---|---|---|
| 0 | Device ID | bit 0-7 | 设备ID(低8位),用于标识通信的设备 |
| 1 | Device ID / R-bit | bit 0-6 / bit 7 | bit 0-6 为设备ID高7位;bit 7 为 R-bit(回复位) |
| 2 | Message ID (Low) | bit 0-7 | 消息ID低8位 |
| 3 | Message ID (High) | bit 0-7 | 消息ID高8位 |
| 4 | Block Number | bit 0-7 | 块号(低8位),从0开始递增 |
| 5 | Block Number / E-bit | bit 0-6 / bit 7 | bit 0-6 为块号高7位;bit 7 为 E-bit(结束位) |
| 6 | System Bytes (High) | bit 0-7 | 系统字节高8位,用于消息匹配 |
| 7 | System Bytes | bit 0-7 | 系统字节 |
| 8 | System Bytes | bit 0-7 | 系统字节 |
| 9 | System Bytes (Low) | bit 0-7 | 系统字节低8位 |
- R-bit (Reply bit): 1 表示发送方期望接收方回复;0 表示不需要回复。
- E-bit (End bit): 1 表示当前块是该消息的最后一个块;0 表示后续还有块。
- System Bytes: 4 字节的唯一标识符,用于将请求和回复消息配对。
2.4 校验和计算(Checksum)
SECS-I 使用 16 位循环冗余校验(CRC-16) 来保证数据传输的完整性。校验和覆盖从 Length Byte 开始到 Data 结束的所有字节。
2.4.1 校验和算法
标准 SECS-I 使用 CRC-16-IBM 多项式:x¹⁶ + x¹⁵ + x² + 1(多项式值:0x8005)。
计算步骤:
- 初始化 CRC 寄存器为 0xFFFF。
- 对每个字节(从 Length Byte 开始到 Data 的最后一个字节),与 CRC 寄存器低8位进行异或运算。
- 对每个字节的8个位,依次右移一位,如果移出的位为1,则与多项式 0x8005 进行异或。
- 处理完所有字节后,对 CRC 寄存器取反(按位取反),得到最终的 16 位校验和。
- 将校验和以 高字节在前(Big-Endian) 的顺序附加在数据块末尾。
2.4.2 校验和计算示例(C语言风格)
// CRC-16-IBM 校验和计算函数
unsigned short calculate_secs1_checksum(unsigned char *data, int length) {
unsigned short crc = 0xFFFF;
int i, j;
for (i = 0; i < length; i++) {
crc ^= data[i]; // 与当前字节异或
for (j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ 0x8005; // 多项式异或
} else {
crc = crc >> 1;
}
}
}
return ~crc; // 取反得到最终校验和
}
2.5 通信流程与状态机
SECS-I 的通信遵循严格的状态机,确保双方同步。主要状态包括:
- Disabled(禁用): 物理层未连接或初始化失败。
- Enabled(启用): 物理层就绪,等待通信。
- Selected(选中): 已建立逻辑连接,可以发送和接收数据块。
- Communicating(通信中): 正在传输多块消息。
通过以上对 RS-232 物理层、块传输协议、消息格式和校验和计算的详细解析,你已经掌握了 SECS-I 协议的核心机制。这是后续理解 SECS-II 消息结构和 HSMS 通信的基础。