2. SECS-I 协议详解:RS-232 物理层、块传输协议、消息格式、校验和计算、超时机制 (T1-T5)
SECS-I(SEMI Equipment Communications Standard 1)是 SEMI 标准 E4 定义的通信协议,位于 SECS/GEM 协议栈的最底层。它规定了半导体设备与主机之间通过 RS-232 串行接口进行数据交换的物理层、数据链路层和部分传输层规范。本章将深入解析 SECS-I 的核心要素,包括物理层特性、块传输协议、消息帧格式、校验和计算方法以及关键的 T1-T5 超时机制。
2.1 RS-232 物理层规范
SECS-I 物理层基于 EIA RS-232-C 标准,定义了设备间点对点串行通信的电气特性和机械接口。
| 参数 | SECS-I 规范值 | 说明 |
|---|---|---|
| 接口标准 | EIA RS-232-C | 点对点,全双工 |
| 连接器 | DB-25(推荐) | 也可使用 DB-9,但需保证信号完整 |
| 传输模式 | 异步,全双工 | 同时发送和接收 |
| 波特率 | 9600 bps(默认) | 可选 19200, 38400 等 |
| 数据位 | 7 位 | ASCII 字符集 |
| 校验位 | 偶校验(Even) | 保证数据完整性 |
| 停止位 | 1 位 | 帧结束标志 |
| 信号电平 | ±3V ~ ±15V | 逻辑 1 = -3V ~ -15V,逻辑 0 = +3V ~ +15V |
测试要点:在一致性测试中,需验证设备是否支持 9600 bps 默认波特率,并能在 7 位数据位、偶校验、1 位停止位的配置下正常通信。任何参数偏离都可能导致连接失败。
2.2 块传输协议 (Block Transfer Protocol)
SECS-I 采用块传输协议将上层 SECS-II 消息分割成多个数据块(Block)进行传输。每个块是物理层传输的最小数据单元。
- 块大小: 每个块固定为 13 个字节(104 bits)。
- 块结构: 包含 1 个字节的块头(Header)和 12 个字节的数据区(Data)。
- 多块消息: 当 SECS-II 消息长度超过 12 字节时,必须拆分为多个块传输。最后一个块的数据区可能不足 12 字节,需填充空白字符(通常为 NULL,0x00)。
- 块编号: 每个块在块头中携带块编号(Block Number),用于接收端重组消息。
关键概念: 块传输协议确保了长消息的可靠分段与重组。测试时需验证设备能否正确处理块编号的递增、回绕(0-127 循环)以及最后一个块的填充逻辑。
2.3 消息格式 (Message Frame Format)
SECS-I 消息帧由 13 个字节组成,结构如下:
| 字节偏移 | 字段名称 | 长度 (字节) | 描述 |
|---|---|---|---|
| 0 | Length Byte | 1 | 数据区长度 (0-12),表示本块数据区有效字节数 |
| 1 | Block Number | 1 | 块编号 (0-127),高 1 位为保留位 |
| 2 | Control Byte | 1 | 控制位:Bit7=REPLY, Bit6=EB, Bit5=ENQ, Bit4=ACK, Bit3=NAK, Bit2=ABORT, Bit1=0, Bit0=0 |
| 3-12 | Data | 10 | 数据区,存放 SECS-II 消息内容或控制信息 |
| 13 | Checksum | 1 | 校验和,对字节 0-12 进行异或运算 |
控制字节 (Control Byte) 详解:
- REPLY (Bit7): 请求回复标志。1 表示发送方期望接收方回复。
- EB (Bit6): 结束块标志。1 表示这是消息的最后一个块。
- ENQ (Bit5): 询问标志。用于建立连接或请求重传。
- ACK (Bit4): 确认标志。接收方发送,表示正确接收块。
- NAK (Bit3): 否定确认标志。接收方发送,表示块接收错误。
- ABORT (Bit2): 中止标志。用于异常终止当前消息传输。
2.4 校验和计算 (Checksum Calculation)
SECS-I 使用简单的异或(XOR)校验和算法,确保数据在传输过程中未被破坏。
计算规则:
- 对消息帧的第 0 字节(Length Byte)到第 12 字节(Data 区的最后一个字节)进行逐字节异或运算。
- 运算结果即为校验和(Checksum),填充到第 13 字节。
- 接收方使用相同算法计算接收到的字节 0-12 的异或值,并与接收到的校验和字节比较。若相等,则校验通过;否则,请求重传。
示例代码(C 语言风格):
unsigned char calculate_checksum(unsigned char *frame, int length) {
// length 应为 13(整个帧长度)
unsigned char cs = 0;
for (int i = 0; i < length - 1; i++) { // 不包含校验和字节本身
cs ^= frame[i];
}
return cs;
}
测试陷阱: 某些设备实现可能错误地将校验和计算范围扩大到整个 13 字节(包含校验和自身),导致校验和恒为 0。一致性测试必须验证设备是否严格按标准计算(仅对字节 0-12)。
2.5 超时机制 (T1-T5)
SECS-I 定义了 5 个超时定时器,用于管理通信流程的可靠性。这些超时是协议一致性的核心测试点。
| 定时器 | 名称 | 默认值 | 触发条件 | 超时后动作 |
|---|---|---|---|---|
| T1 | Inter-Character Timeout | 0.5 秒 | 同一块内两个连续字符之间的最大间隔 | 接收方丢弃已接收的不完整块 |
| T2 | Block Timeout | 10 秒 | 发送方发送一个块后,等待接收方回复(ACK/NAK)的最大时间 | 发送方重传该块(最多重试次数由实现定义) |
| T3 | Reply Timeout | 45 秒 | 发送方发送消息的最后一个块(EB=1)后,等待接收方回复消息的最大时间 | 发送方认为消息传输失败,可中止或重试 |
| T4 | Inter-Block Timeout | 10 秒 | 多块消息中,两个连续块之间的最大间隔 | 接收方丢弃已接收的部分消息,等待新消息 |
| T5 | Connect Timeout | 10 秒 | 设备等待建立连接(ENQ/ACK 交换)的最大时间 | 设备报告连接失败,进入空闲状态 |
测试策略: 一致性测试应分别验证每个超时定时器的精度和超时后的行为。例如,通过人为延迟发送 ACK 来触发 T2 超时,观察设备是否执行重传;通过延迟发送最后一个块来触发 T4 超时,观察接收方是否丢弃部分消息。
2.6 本章小结
SECS-I 协议作为 SECS/GEM 通信的基石,其 RS-232 物理层参数、块传输协议、消息帧格式、校验和算法以及 T1-T5 超时机制共同构成了可靠的数据传输基础。在一致性测试中,必须逐项验证这些要素的实现是否符合 SEMI E4 标准,任何偏差都可能导致上层 SECS-II 通信失败。掌握 SECS-I 的细节,是设计和执行有效测试用例的前提。