1. 课程导入与SECS-II协议全景

在半导体制造工厂中,一台晶圆刻蚀机、一台量测机台或一套传送机械手,往往需要与工厂主机(Host)持续交换成百上千条指令与数据。设备要上报“晶圆已到位”,主机要下发“开始工艺配方”,量测机台要回传厚度、电阻率等测量结果——这些交互背后,依赖的正是SEMI组织定义的一套通信标准体系。本课程聚焦其中的核心:SECS-II消息解析与设备指令交互实战。在动手解析报文之前,我们需要先建立一张完整的“地图”,弄清楚各层协议各自负责什么、彼此如何衔接,以及我们最终要在哪一层做文章。

一、学习目标

完成本课程后,你应当能够独立完成以下工作:读懂一条SECS-II消息的完整结构,包括流(Stream)、功能(Function)、数据项(Data Item)与列表(List)的嵌套关系;能够手工或借助工具解析十六进制报文,还原出设备实际发送的语义;能够基于HSMS建立与设备或模拟器的连接,完成S1F1、S1F13、S2F41等典型消息的收发;能够定位常见的通信故障,例如连接建立失败、消息超时、数据格式不匹配等。简单说,目标是“看得懂、连得上、发得出、查得清”。

二、半导体设备通信架构

典型的设备通信架构可以自上而下分为四层。最上层是工厂主机系统(MES/EAP),负责生产调度与数据采集;中间是通信协议层,即SEMI标准定义的SECS-I、HSMS与SECS-II;最下层是设备的控制软件与工艺模块。主机与设备之间并非直接“对话”,而是通过协议层完成消息的封装、传输与解析。设备内部的设备控制程序(Equipment Control)把工艺状态、报警、测量值组织成SECS-II消息,再交给下层传输协议发送出去;主机侧则反向解析并作出响应。

理解这个架构的关键在于:SECS-II只定义“消息长什么样、代表什么含义”,它不关心消息怎么在网线或串口上传输。传输任务由SECS-I或HSMS承担。这种分层设计使得同一套SECS-II消息可以跑在不同的物理链路上。

半导体设备通信分层架构与协议关系 工厂主机 Host MES / EAP / 调度系统 半导体设备 Equipment 刻蚀 / 量测 / 传送模块 SECS-II 消息层(SEMI E5) 定义消息语义:Stream / Function / List / 数据项(ASCII、U4、BOOLEAN…) SECS-I(SEMI E4) 串口 RS-232,半双工,块传输 速率低,适合老设备 HSMS(SEMI E37) TCP/IP,全双工,高速 现代设备主流传输方式 FTP / SFTP 文件传输通道 用于大文件:工艺配方、量测数据、日志、图像,不承载SECS-II消息

三、SECS-I、HSMS、SECS-II与FTP的关系

这四者常被初学者混为一谈,其实分工非常清晰。SECS-II是“语言”,规定消息的语法与词汇;SECS-I和HSMS是“嗓门和电话线”,负责把语言传出去;FTP则是“快递”,专门运送大件物品。具体来说:

  • SECS-II(SEMI E5):定义消息内容。每条消息由Stream和Function编号标识,例如S1F1是“Are You There”请求,S1F2是应答。消息体由数据项组成,数据项有格式码(如A表示ASCII,U4表示4字节无符号整数,L表示列表)。
  • SECS-I(SEMI E4):基于RS-232串口的传输协议,采用块传输和握手应答机制,速率通常为9600bps到115200bps。它定义了块头、校验和、重传规则。
  • HSMS(SEMI E37):基于TCP/IP的传输协议,支持全双工、多会话,是现代设备的主流选择。它定义了连接建立、选择、取消选择、心跳等状态机。
  • FTP:不承载SECS-II消息,而是用于传输工艺配方、量测原始数据、设备日志等大文件。主机和设备之间通常约定好文件路径和命名规则。

一个常见的误解是“HSMS就是SECS-II”。实际上HSMS只负责把SECS-II消息字节流可靠地送到对端,消息的含义仍由SECS-II解释。调试时如果连接建立成功但消息无响应,问题往往在SECS-II层而非HSMS层。

四、典型应用场景

在晶圆厂中,SECS-II消息贯穿生产全流程。举几个典型场景:设备启动后,主机发送S1F13建立通信,设备回S1F14确认;生产前,主机用S2F41下发远程命令(如“开始工艺”),设备回S2F42报告执行结果;工艺过程中,设备主动发送S6F11事件报告,携带晶圆ID、腔体状态等数据;量测机台完成测量后,通过S6F11上报测量值,或通过FTP上传详细数据文件。报警发生时,设备发送S5F1报警消息,主机回S5F2确认。这些场景构成了设备与主机交互的主干。

五、实战环境搭建

本课程的实战环境不依赖真实产线设备,而是用软件模拟器搭建。推荐方案如下:

  1. 准备一台开发机(Windows或Linux均可),安装Python 3.8以上版本。
  2. 安装开源SECS/GEM库,例如secsgem,它同时支持HSMS和SECS-I,并提供设备端与主机端模拟。
  3. 编写一个简单的设备端脚本,监听端口5000,等待主机连接。
  4. 编写主机端脚本,连接设备端,发送S1F1并打印收到的S1F2内容。
  5. 使用Wireshark抓包,观察HSMS的Select请求与SECS-II消息的十六进制字节流,对照解析结果验证理解。

下面是一段最小可运行的设备端示例代码,用于接收S1F1并回复S1F2:

from secsgem.hsms import HsmsServer
from secsgem.secs import SecsStreamFunction

def on_s1f1(connection, message):
    # 收到S1F1,回复S1F2,携带设备型号与版本
    reply = SecsStreamFunction(1, 2, {
        "MDLN": "ETCHER-01",
        "SOFTREV": "1.0.3"
    })
    connection.send_response(reply)

server = HsmsServer(port=5000)
server.register(1, 1, on_s1f1)
server.start()
print("设备端已启动,监听5000端口...")

运行后,用主机端脚本连接并发送S1F1,若能在设备端日志看到消息并收到S1F2回复,说明环境搭建成功。此时再用Wireshark抓包,你会看到HSMS的Select.req、Select.rsp,以及后续的Data消息。把Data消息的十六进制内容复制出来,对照SECS-II格式码逐字节解析,就能真正理解“消息长什么样”。