4、SECS-I物理层与数据链路:RS-232串口通信、报文格式、块传输、校验与重传机制
SECS-I(SEMI Equipment Communications Standard 1)是SEMI标准E4所定义的物理层与数据链路层协议,它规定了SECS-II消息在设备与主机之间传输时所依赖的电气接口、帧格式、传输控制与错误恢复机制。在半导体工厂自动化集成中,SECS-I是连接设备端与Host端的第一道“物理桥梁”,其稳定性直接决定了上层SECS-II消息能否可靠送达。本章将围绕RS-232串口通信的工程配置、SECS-I报文块(Block)的字节级结构、块传输的状态机、校验算法以及重传与超时机制展开深入讲解,并结合实际设备联机调试中的典型故障案例进行复盘。
4.1 RS-232串口通信的工程配置与信号特性
SECS-I在物理层几乎全部采用RS-232标准(EIA-232),这是因为半导体设备通常位于洁净室环境中,设备与Host之间的通信距离较短(一般不超过15米),且RS-232实现简单、成本低廉、技术成熟。RS-232采用单端信号传输,使用负逻辑电平:逻辑1对应-3V至-15V,逻辑0对应+3V至+15V。这种电平标准与TTL电平不兼容,因此设备端和Host端通常需要经过电平转换芯片(如MAX232、SP3232)与PC的UART控制器连接。
在实际工程配置中,需要重点关注以下参数:波特率(Baud Rate)通常设置为9600、19200或38400bps,SEMI E4标准推荐默认9600bps,但现代设备普遍支持更高速度;数据位通常为7位或8位,配合偶校验(Even Parity)或无校验;停止位固定为1位。流控方式可选择硬件流控(RTS/CTS)或软件流控(XON/XOFF),但在SECS-I应用中,由于报文块本身具有长度字段和超时重传机制,多数集成商选择关闭流控以简化接线。
4.1.1 核心原理:RS-232信号与时序
RS-232的异步串行通信以字符(通常为10位或11位)为传输单位,包括起始位(1位)、数据位(7/8位)、校验位(可选)和停止位(1位)。发送端在空闲状态保持高电平(-12V),发送时先拉低电平产生起始位,随后按低位先出的顺序发送数据位。接收端通过检测起始位的下降沿来同步时钟,并以波特率的16倍或64倍过采样来恢复数据。
在SECS-I应用中,RS-232的DCE/DTE角色定义需要特别注意:设备(Equipment)通常作为DTE(Data Terminal Equipment),Host(主机)也常被配置为DTE,因此两者之间需要使用交叉线(Null Modem)连接,即TXD对RXD、RXD对TXD、GND对GND。若使用直通线,则必须有一端被配置为DCE模式,否则通信完全不通。
4.1.2 操作流程:串口参数配置与验证
- 确认设备端串口参数:查阅设备手册或通过设备面板菜单查看当前波特率、数据位、校验位设置。
- 配置Host端串口参数:在SECS/GEM通信软件(如SECSComm、Equipment Connectivity Manager)中设置与设备端完全一致的参数。
- 使用串口调试工具发送测试字符:发送"0x05"(ENQ)或"0x00",观察设备是否有响应。
- 若通信异常,使用示波器或逻辑分析仪测量TXD/RXD引脚电平,确认信号幅度是否在±3V~±15V范围内。
- 检查线缆长度和屏蔽:超过15米时建议降低波特率或改用RS-422/RS-485。
4.1.3 案例拆解:某CVD设备联机时串口无响应
背景与约束:某半导体工厂新购入一台CVD薄膜沉积设备,需与MES Host进行SECS/GEM联机。设备供应商提供的默认串口参数为9600、8、N、1,Host端使用工业PC的COM1口。
初始现象:Host发送ENQ后,设备无任何响应,串口调试助手显示发送成功但接收区为空。
分析判断过程:首先检查线缆连接,发现使用的是直通串口线,而设备端和Host端均为DTE角色,导致TXD对TXD、RXD对RXD,信号无法到达对方。其次,用万用表测量TXD引脚电压,发现Host发送时TXD有-9V电平跳变,说明Host发送正常;但设备端TXD始终为-9V空闲电平,说明设备未发送任何数据。
实际操作步骤:更换为交叉串口线(2-3交叉,3-2交叉,5-5直连),重新上电后Host发送ENQ,设备立即返回ACK(0x06)。随后进行SECS-I Link Test(S1F1),设备正常响应S1F2。
结果对比:更换交叉线后通信恢复正常,后续SECS-II消息交互全部成功。
复盘经验:RS-232连接前必须确认DTE/DCE角色,交叉线是设备与Host直连的默认选择。建议在项目启动前制作标准的Null Modem线缆,并在线缆两端贴标签注明"TXD/RXD交叉"。
4.1.4 常见误区与总结
- 误区1:认为RS-232支持热插拔。实际上带电插拔串口可能损坏接口芯片,应先关闭设备电源再插拔。
- 误区2:忽略共地问题。RS-232是单端信号,收发双方必须共地,否则地电位差可能导致误码。
- 误区3:盲目提高波特率。长线缆或高干扰环境下,38400bps可能比9600bps更容易出错,需根据现场EMI情况选择。
4.2 SECS-I报文格式与块结构
SECS-I的数据链路层以块(Block)为基本传输单位。一个完整的SECS-I块由长度字节、块头(Header)、块体(Text)和校验和(Checksum)四部分组成。块头固定为10字节,包含设备ID、控制位、Stream/Function编码、块号等关键信息。块体承载SECS-II消息的实际数据,最大长度为244字节。因此,单个块的最大总长度为2 + 10 + 244 + 2 = 258字节。
4.2.1 核心原理:块头各字段详解
| 字节偏移 | 字段名称 | 位数 | 说明 |
|---|---|---|---|
| 0-1 | Length | 16 | 块总长度(含Length自身),即10 + Text长度 + 2 |
| 2 | Device ID | 7 | 设备ID,0~126,127保留 |
| 3 | R-bit | 1 | 保留位,固定为0 |
| 3 | W-bit | 1 | 等待位,1表示需要回复 |
| 4 | E-bit | 1 | 结束位,1表示多块消息的最后一块 |
| 5 | Stream | 8 | 消息流编号,0~255 |
| 6 | Function | 8 | 功能编号,0~255 |
| 7-8 | Block# | 16 | 块号,0~32767;单块消息为0x8000 |
| 9 | Text | 可变 | SECS-II数据,最多244字节 |
| 10~253 | Checksum | 16 | 校验和,对Length之后所有字节累加取低16位 |
W-bit(Wait bit)是SECS-I中一个关键控制位:当W-bit=1时,接收方必须回复一个ACK或NAK块;当W-bit=0时,接收方无需回复。对于多块消息,发送方在每一块中设置W-bit=1,直到最后一块(E-bit=1)发送完毕,接收方才回复整体确认。这种机制减少了握手次数,提高了传输效率。
4.2.2 判断方法:单块与多块消息的识别
判断一个SECS-I消息是单块还是多块,主要依据Block#字段:若Block#=0x8000,则为单块消息;若Block#在0~32767范围内,则为多块消息的一部分。多块消息的块号从0开始递增,最后一块的E-bit置1。接收方通过块号连续性判断是否收到完整消息,若发现块号跳变或缺失,则丢弃整个消息并请求重传。
4.2.3 案例拆解:S1F1消息的块结构分析
以最常见的S1F1(Are You There)消息为例,其SECS-II数据为空(无System Bytes以外的内容)。假设设备ID为5,W-bit=1,单块发送,则块结构如下:
字节0-1: 0x00 0x0E (Length = 14,即10字节Header + 2字节Text + 2字节Checksum)
字节2: 0x05 (Device ID = 5)
字节3: 0x40 (R=0, W=1, E=0)
字节4: 0x00 (保留)
字节5: 0x01 (Stream = 1)
字节6: 0x01 (Function = 1)
字节7-8: 0x80 0x00 (Block# = 0x8000,单块)
字节9-10: 0x00 0x00 (Text为空,但SECS-II消息实际包含System Bytes,此处简化)
字节11-12: 0xXX 0xXX (Checksum,对字节2~10累加取低16位)
实际SECS-II消息中,S1F1的Text部分包含4字节的System Bytes,因此Length应为16。上述示例仅用于说明块结构。
4.2.4 常见误区与总结
- 误区1:将Length字段理解为Text长度。实际上Length是整个块的总长度,包括Header和Checksum。
- 误区2:忽略W-bit的作用。若发送方设置W-bit=0,接收方不会回复ACK,发送方若等待回复将导致超时。
- 误区3:多块消息的块号从1开始。标准规定从0开始,最后一块E-bit=1。
4.3 块传输机制与校验重传
SECS-I的块传输采用停止-等待(Stop-and-Wait)与滑动窗口相结合的机制。对于单块消息,发送方发送后等待ACK/NAK;对于多块消息,发送方连续发送所有块(每块W-bit=1),接收方在收到最后一块(E-bit=1)后统一回复ACK/NAK。若接收方发现某一块校验失败或块号不连续,则回复NAK,发送方需从错误块开始重传。
4.3.1 核心原理:校验和算法与超时参数
校验和的计算方法为:从Device ID字节开始,到Text最后一个字节为止,将所有字节的二进制值累加,取累加和的低16位作为Checksum。接收方按同样方法计算,若结果与接收到的Checksum不一致,则判定该块损坏。
SECS-I定义了四个超时参数:T1(块间超时,默认10秒)、T2(ACK超时,默认15秒)、T3(Reply超时,默认45秒)、T4(Inter-block超时,默认45秒)。T1用于多块消息中相邻块之间的最大间隔;T2用于发送方等待ACK/NAK的最大时间;T3用于SECS-II层等待Reply消息的时间;T4用于接收方等待下一个块的时间。
4.3.2 操作流程:重传与错误恢复
- 发送方发送块后启动T2定时器。
- 若T2超时未收到ACK/NAK,发送方重传同一块,重传次数计数器加1。
- 连续重传3次仍无响应,发送方判定链路故障,断开连接并报告错误。
- 若收到NAK,发送方从NAK指示的块号开始重传。
- 接收方若发现块号不连续,发送NAK并丢弃当前块。
4.3.3 案例拆解:多块消息传输中的块丢失恢复
背景与约束:某刻蚀设备需要向Host上传一份包含5000个数据点的配方参数,SECS-II消息总长度为1200字节,需拆分为5个块(每块最多244字节Text)。
初始现象:Host接收时发现第3块(Block#=2)的Checksum校验失败,回复NAK。
分析判断过程:设备端收到NAK后,从Block#=2开始重传第3、4、5块。Host重新接收后校验全部通过,回复ACK。
实际操作步骤:设备端记录重传次数为1,Host端日志显示"Block#2 Checksum Error, Retransmission Requested"。重传后消息完整接收,SECS-II层正常解析。
结果对比:整个传输过程耗时2.3秒,其中重传增加了0.8秒,但消息最终完整送达,未影响生产。
复盘经验:多块传输中,单块损坏并不罕见,尤其在长线缆或高干扰环境。建议在Host端日志中记录每个块的接收时间和校验结果,便于事后分析链路质量。
4.3.4 常见误区与总结
- 误区1:认为重传是发送方主动发起的。实际上重传必须由接收方通过NAK触发,或发送方因超时自动重传。
- 误区2:忽略T4超时。T4用于接收方等待下一个块,若T4超时,接收方应丢弃已收到的部分块并释放资源。
- 误区3:将SECS-I重传与TCP/IP重传混淆。SECS-I是应用层协议,其重传机制独立于底层网络,即使底层是TCP/IP,SECS-I仍按自身规则进行块级重传。