在半导体行业工作多年,我见过太多这样的场景:凌晨两点,产线工程师拿着纸质工艺参数单,一台一台地敲设备面板输入 Recipe;MES 系统里显示 Lot 已经进站,但设备那边其实根本没收到指令,两边数据对不上,最后发现是人工抄录时把一位小数点写错了。
这就是没有标准通信协议之前的工厂。设备是哑巴,MES 是聋子,中间全靠人传话。
后来,SECS/GEM 协议成了这个行业的通用语言。它本质上是给半导体设备和 MES 之间装了一部"翻译电话",让机器之间能自动对话。这篇文章我想用通俗的方式,讲讲这部电话是怎么打通的。
一、没有协议之前,工厂是怎么"鸡同鸭讲"的
早年的半导体设备,各家厂商的通信接口五花八门。有的设备只给一串数字信号,有的设备用串口传文本,有的设备干脆只留一个 DB9 接口,连文档都没有。MES 系统想统一调度这些设备,难度极大。
工程师的日常工作就是:MES 打印出工艺参数 → 人工走到设备前 → 手动输入到设备面板 → 设备开始加工 → 加工完成后人工记录结果 → 回录到 MES。
这个流程里,只要有人输错一个参数,或者漏记一个结果,一整批晶圆就可能报废。更麻烦的是,设备出了报警,MES 往往不知道;MES 想紧急叫停,设备也听不见。
行业需要一个标准:让设备说同一种语言,让 MES 能听懂设备在说什么,还能远程指挥设备。
这就是 SECS/GEM 诞生的原因。
二、SECS/GEM 到底是什么?
很多人第一次听到 SECS/GEM 会被一堆缩写搞晕。其实可以把它拆成三层来理解:
SECS-I / HSMS:这是"物理层"和"传输层"。早期的 SECS-I 走 RS-232 串口,速度慢、距离短,基本已经淘汰。现在主流是 HSMS(High-Speed SECS Message Services),基于 TCP/IP,设备接上网线就能和 MES 通信。
SECS-II :这是"消息格式层"。它规定了设备之间能发哪些消息,消息长什么样。比如 S1F1 是"你在吗",S1F2 是"我在";S2F41 是"远程启动";S6F11 是"我有事件要上报"。
GEM:这是"语义层"。如果说 SECS-II 是"语法",那 GEM 就是"语义"。GEM 定义了设备应该具备哪些状态(在线/离线/本地面板/远程控制),应该上报哪些事件,应该提供哪些变量。它让不同厂商的设备,在 MES 眼里看起来是"同一个模型"。
打个比方:SECS-II 是"英语语法",GEM 是"商务礼仪"。语法让你知道怎么说,礼仪让你知道什么时候该说什么。

三、设备和 MES 的"三段式握手"
设备进厂后,不是插上网线就能干活。它要和 MES(准确说是 EAP,设备自动化程序)完成一次"三段式握手"。
第一段:TCP 连接。 设备作为服务端(Passive),监听一个端口(通常是 5000)。EAP 作为客户端(Active),发起 TCP 连接。这一步跟普通网络通信没区别。
第二段:HSMS 选择。 TCP 连上后,EAP 发送 Select.req,设备回 Select.rsp。只有 HSMS 会话建立成功,双方才能开始交换 SECS 消息。
第三段:SECS 通信建立。 EAP 发送 S1F13(建立通信请求),设备回 S1F14(同意建立)。然后 EAP 发 S1F1(Are you there?),设备回 S1F2(I am here)。
到这一步,"电话"才算真正打通。以后 EAP 和设备之间可以持续发消息,设备也可以主动上报事件。
四、一条晶圆的"派工之旅":消息实录
光知道握手不够,要看懂 SECS/GEM,必须跟着一条 Lot 走完产线。下面是一个极简版的对话实录。
场景:MES 决定让 Lot A123 去蚀刻机 E-01 加工。
步骤 1:MES 把指令发给 EAP MES 通过数据库或 API 告诉 EAP:"Lot A123,下一站 E-01,Recipe 用 ETCH_V2.1,优先执行。"
步骤 2:EAP 翻译为 SECS 消息 EAP 连上 E-01,先确认设备在线、状态为 REMOTE(远程可控)。然后 EAP 发送 S2F41(远程命令),里面包含命令代码"START"和参数"LotID=A123;RecipeID=ETCH_V2.1"。
步骤 3:设备收到并执行 设备收到 S2F41,解析参数,确认 Recipe 存在且版本匹配。然后设备返回 S2F42(命令确认),状态码是"OK"。
步骤 4:设备主动上报事件 设备开始加工,自动发送 S6F11(事件报告)。这个消息里嵌套了多层数据:CEID(事件 ID)= 100,表示"LotStart";RPTID(报告 ID)= 200,里面绑定了 VID(变量 ID):LotID=A123,RecipeID=ETCH_V2.1,ChamberTemp=85.0。
步骤 5:EAP 翻译回 MES EAP 收到 S6F11,解析出结构化数据,推送给 MES。MES 界面上的 Lot A123 状态立刻从"等待"变成"加工中"。
步骤 6:加工完成,再次上报 设备加工结束,再次发送 S6F11(CEID=101,LotEnd)。EAP 上报 MES,MES 更新状态为"完工",准备派去下一站。
整个过程里,人没有碰过设备面板。Recipe 是 EAP 自动下载的,加工数据是设备自动采集的,状态是实时同步的。
五、为什么 Recipe 管理是重中之重?
在上面这个流程里,有一个环节最容易出错,也是半导体厂最紧张的环节:Recipe 下载。
Recipe 就是工艺参数文件,直接决定刻蚀多深、沉积多厚。不同产品用不同 Recipe,同一产品升级后也要换版本。如果设备用了错的 Recipe,良率会断崖式下跌。
SECS/GEM 里有专门的 S7 流消息管这件事:
-
S7F5:EAP 请求下载 Recipe -
S7F6:设备发送 Recipe Body -
S7F1:设备请求上传 Recipe -
S7F2:EAP 同意上传
实际产线中,Recipe 管理通常是最严格的环节。EAP 下载完 Recipe 后,设备会做 Checksum 校验,确认文件完整性和版本一致性。校验不通过,设备会拒绝加工,并上报报警。
我见过的情况:设备厂商更新了 Recipe 格式,多了一个字段,EAP 没同步更新,导致下载后 Checksum 不匹配,产线停了一个小时。这种细节,只有真正调过设备的人才懂。
六、给初学者的建议
如果你刚接触 SECS/GEM,我的建议是分三步走:
第一步:先理解 GEM 状态机。 不要急着背消息代号。先搞懂设备的 Communication 状态(连没连上)、Control 状态(LOCAL 还是 REMOTE)、Processing 状态(IDLE 还是 EXECUTING)。状态机是骨架,消息是血肉。
第二步:再读 SECS-II 消息字典。 重点看 S1(状态)、S2(控制)、S5(报警)、S6(事件)、S7(Recipe)。不需要全背,用的时候查就行。
第三步:最后看实际产线日志。 拿到一段真实的 EAP 日志,逐条翻译。看多了你就会发现,再复杂的通信,本质上就是"请求-确认-上报"的循环。