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 个字节组成,结构如下:

字节偏移字段名称长度 (字节)描述
0Length Byte1数据区长度 (0-12),表示本块数据区有效字节数
1Block Number1块编号 (0-127),高 1 位为保留位
2Control Byte1控制位:Bit7=REPLY, Bit6=EB, Bit5=ENQ, Bit4=ACK, Bit3=NAK, Bit2=ABORT, Bit1=0, Bit0=0
3-12Data10数据区,存放 SECS-II 消息内容或控制信息
13Checksum1校验和,对字节 0-12 进行异或运算

控制字节 (Control Byte) 详解:

  • REPLY (Bit7): 请求回复标志。1 表示发送方期望接收方回复。
  • EB (Bit6): 结束块标志。1 表示这是消息的最后一个块。
  • ENQ (Bit5): 询问标志。用于建立连接或请求重传。
  • ACK (Bit4): 确认标志。接收方发送,表示正确接收块。
  • NAK (Bit3): 否定确认标志。接收方发送,表示块接收错误。
  • ABORT (Bit2): 中止标志。用于异常终止当前消息传输。
SECS-I 消息帧结构 (13 字节) Length Block# Control Data (10 字节) CS 控制字节位域展开 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 REPLY EB ENQ ACK NAK ABORT 说明: Length 字段指示 Data 区有效字节数 (0-12);CS 为校验和,对字节 0-12 进行异或运算。

2.4 校验和计算 (Checksum Calculation)

SECS-I 使用简单的异或(XOR)校验和算法,确保数据在传输过程中未被破坏。

计算规则:

  1. 对消息帧的第 0 字节(Length Byte)到第 12 字节(Data 区的最后一个字节)进行逐字节异或运算。
  2. 运算结果即为校验和(Checksum),填充到第 13 字节。
  3. 接收方使用相同算法计算接收到的字节 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 个超时定时器,用于管理通信流程的可靠性。这些超时是协议一致性的核心测试点。

定时器名称默认值触发条件超时后动作
T1Inter-Character Timeout0.5 秒同一块内两个连续字符之间的最大间隔接收方丢弃已接收的不完整块
T2Block Timeout10 秒发送方发送一个块后,等待接收方回复(ACK/NAK)的最大时间发送方重传该块(最多重试次数由实现定义)
T3Reply Timeout45 秒发送方发送消息的最后一个块(EB=1)后,等待接收方回复消息的最大时间发送方认为消息传输失败,可中止或重试
T4Inter-Block Timeout10 秒多块消息中,两个连续块之间的最大间隔接收方丢弃已接收的部分消息,等待新消息
T5Connect Timeout10 秒设备等待建立连接(ENQ/ACK 交换)的最大时间设备报告连接失败,进入空闲状态
SECS-I 超时机制交互流程 设备 (Equipment) 主机 (Host) 连接建立阶段 (T5) ENQ ACK 块传输阶段 (T1, T2, T4) 块 N (Data) ACK 消息完成阶段 (T3) 最后块 (EB=1) Reply (SECS-II 消息) T1 监控字符间间隔;T2 监控块 ACK 等待;T3 监控消息回复等待;T4 监控块间间隔;T5 监控连接建立。
测试策略: 一致性测试应分别验证每个超时定时器的精度和超时后的行为。例如,通过人为延迟发送 ACK 来触发 T2 超时,观察设备是否执行重传;通过延迟发送最后一个块来触发 T4 超时,观察接收方是否丢弃部分消息。

2.6 本章小结

SECS-I 协议作为 SECS/GEM 通信的基石,其 RS-232 物理层参数、块传输协议、消息帧格式、校验和算法以及 T1-T5 超时机制共同构成了可靠的数据传输基础。在一致性测试中,必须逐项验证这些要素的实现是否符合 SEMI E4 标准,任何偏差都可能导致上层 SECS-II 通信失败。掌握 SECS-I 的细节,是设计和执行有效测试用例的前提。