客户身份依 NDA 保密——下文以“一家全球自动驾驶领军企业”代称。
车规相机进入量产阶段后,每一台产品都必须通过六个质量维度的检验——身份、光学、电气与链路、加密、可靠性与老化——且每一项结果都要可测量、可判定、可追溯。本案例展示这些要求如何落地到一条 GMSL(SerDes)相机产线上:要盯什么指标、每项测试如何执行与判定,以及支撑这一切的工具——搭载 Python 与 C++ SDK 的 ECFG 图像采集盒。
| 客户 | 全球自动驾驶与辅助驾驶领军企业(NDA 保密) |
| 产品 | 车规 GMSL 相机模组——前视、环视与后视 |
| 验收要求 | 六大维度逐台检验:身份、光学、电气与链路、加密、可靠性、老化 |
| 测试平台 | ECFG 图像采集盒 + SDK(Python 与 C++) |
本案例导读
客户是全球自动驾驶与辅助驾驶领域的领军企业,其相机随量产车型与感知平台出货。以下内容是双方团队在产能爬坡过程中打磨出的质量控制方法——它同样适用于任何 GMSL 相机项目。
对自动驾驶系统而言,相机是感知的门户。一台存在潜在缺陷的相机,会让下游处处出现误检与漏检。行业对出货质量本就有一套硬性框架:IATF 16949 质量管理体系、通过 PPAP 完成零部件审批并附全套验证数据、元器件按 AEC-Q100 温度等级选型、感知链路按 ISO 26262 做功能安全。在此基础上,每家主机厂还会叠加自己的测试标准——本项目的 DV 遵循客户的企业测试标准。落到相机本身,要求浓缩为三个词:
到了产线上,这变成四个棘手的问题:
C1 · 看不见的失效
一台相机画面可能完美,而链路余量已近耗尽;中心锐利的模组,四角可能发虚。显性失效好办,难的是那些今天能工作、上路才出问题的。
C2 · 车载环境不宽容
相机要承受持续振动与剧烈温差,而胶水固化会让光学在首轮检测通过后继续变化。决定性的测量必须放在应力之后。
C3 · 数据安全是硬性要求
感知视频属于敏感数据,相机链路必须加密。“配置了”不够:每台模组都要证明加密已生效、配对唯一。
C4 · 产线等不起
逐台检测必须跟上节拍时间。测试要自动化,判定要标准化、不依赖操作员,每条记录都要可调取。
在客户的验收文件里,“相机质量”不是一句话,而是六个维度,每一台都要检验:
| 维度 | 客户要求 |
|---|---|
| 1 · 身份与追溯 | 每台模组以唯一序列号标识,出厂 OTP 数据完整可读。标定与测试记录归档在该序列号下,任何一台出货相机都能追溯到完整的测量历史。 |
| 2 · 光学与图像 | 中心与四角的锐度都要量化,色彩与曝光同样覆盖。阈值按模组型号书面约定——“看着锐利”不是验收标准。 |
| 3 · 电气与链路 | PoC 供电电压与电流必须落在书面限值内,链路余量必须高于下限——为车载线缆与连接器多年老化预留裕量。 |
| 4 · 链路加密 | 视频全程加密传输,发送端与接收端唯一配对,拒绝明文回退。作为安全属性,逐台验证、绝不抽检。 |
| 5 · 可靠性 | 振动扫频与高低温浸泡后,图像与光学性能不得出现可见偏移——以应力后的复测数据判定,而非装配前数据。 |
| 6 · 老化 | 高温连续拉流下:帧率稳定、无坏帧、参数无漂移。只在长时间运行才暴露的问题,不能流到车上。 |
车规可靠性分阶段交付,理解这个结构,产线测试才好读。
设计验证(DV)先行。量产之前,设计要按主机厂标准与 IEC 60068 系列(环境试验)、ISO 20653(防护等级)、UN ECE R10(EMC)等车规规范,跑完整的环境与可靠性程序。以一个完整的车规相机 DV 项目为参考:200 多台样机、约 40 项测试、历时约六周。这类项目覆盖的内容如下:
DV 一览 · 一个参考项目
| 类别 | 典型测试 | 示例参数 |
|---|---|---|
| 机械类 | 综合振动、机械冲击(两个等级)、自由跌落、外壳抗压、连接器插入力、强度与插拔耐久 | 冲击 25 g/10 ms 与 50 g/11 ms;1 m 跌落;110 N 抗压 1 s;插入力 ≤ 75 N |
| 气候类 | 低温存储与工作、高温存储、带电温度循环、温度冲击、交变与恒定湿热、凝露、盐雾、防水防尘 | −40 °C 持续 24 h;95 °C 持续 48 h;温度冲击 −40 ↔ 95 °C 循环数百次;交变湿热最高 65 °C / 93% RH;盐雾 12 × 12 h 循环 |
| 电气与 EMC | ESD、辐射与传导发射、大电流注入、辐射抗扰、便携发射机抗扰、低频磁场 | ESD 接触放电 ±4–8 kV、空气放电最高 ±25 kV;发射与抗扰按 ECE R10 分级 |
| 耐久类 | 高温工作耐久;热疲劳后的综合振动 | 连续运行 500 h,80% 时间额定供电,下限 10%,上限 10% |
| 工艺与材料 | PCB 切片、镜头耐磨、碎石冲击、工业化学品、限用物质 | 焊锡空洞 ≤ 25%;镀铜 ≥ 25 µm |
| 功能基线 | 每个测试项目前后各做一次五点功能与参数测试 | 五个温度 × 电压角点全部通过(−40 °C 至 85 °C,9 V 至 16 V) |
解读:这些参数来自一份真实的 DV 报告。各家主机厂的具体数字不同,但框架惊人地相似——看懂这张表,你就能读懂任何车规相机的 DV 计划。
DV 还带来一套好用的判定语言:功能状态等级。每个测试都写明产品必须保持的等级。A 级表示测试中与测试后所有功能正常;少数严苛项目(如 ±25 kV 空气放电)只要求产品事后自行恢复。达不到规定等级,设计就要返回修改并重测。
接下来是生产验证(PV)。同类测试——全部或关键子集——在生产工装、生产线上产出的零件上重复进行。DV 证明设计;PV 证明工艺能稳定地造出它,其结果进入量产前的 PPAP 提交。
下线测试(EOL)是本案例的重点。验证回答不了“今天下线的这台好不好”——它跑在抽样批次上,以周计。EOL 测试把验证程序中能在产线节拍内逐台执行的部分拿出来,应用到每一台模组上,拦住工艺漂移与个体缺陷。
| DV · 设计验证 | PV · 生产验证 | EOL · 下线测试 | |
|---|---|---|---|
| 样机数量 | 抽样批次(参考项目 200+ 台) | 生产工装与产线产出的零件 | 每一台出货模组 |
| 时间点 | 设计冻结前 | PPAP 与量产启动前 | 产线上,按节拍 |
| 范围 | 约 40 项:机械、气候、化学、EMC、耐久、工艺 | 重复 DV 测试,全部或关键子集 | 七道闸门:身份、光学、电气、链路、加密、应力与老化、记录 |
| 周期 | 每轮约 6 周,多个项目并行 | 数周,基于生产件 | 与产线节拍同步 |
| 回答的问题 | 设计是否满足车规要求? | 工艺能否稳定地造出它? | 这一台能不能出货? |
解读:三个阶段是接力,不是重复:DV 守设计,PV 守工艺,EOL 守每一台。第 6 节的可靠性与老化检查,正是从 DV 借来参数与判定逻辑,换成产线真正跑得动的形式。
先讲四条经验:
经验 1 · 首检通过不等于合格
胶水固化与结构固定会让光学在首轮检测之后继续变化。决定性的测量属于应力之后——测量顺序错了,精度再高也没有意义。
经验 2 · 温度与长线缆是同时出现的
在车上,热应力与整车长度的线缆同时存在。分开测试,你永远看不到真实答案。
经验 3 · 安全属性绝不抽检
锐度的抽样比例还可以商量,加密不行:车队里有一台未加密的相机,整条链路就有风险,所以加密逐台验证。
经验 4 · 测试必须跟上节拍
逐台、多维度、每条记录按序列号归档——这样的量,手工流程撑不住。流程必须自动化,判定必须标准化。
每道闸门的起点都一样:把相机接到图像采集盒上,几个 SDK 调用即可点亮。
ret = ecfg_ptr.set_poc_voltage(12000) # 1. PoC supply 12 V (value in mV) ret = ecfg_ptr.poc_power_on(port_id) # 2. power the port ret = ecfg_ptr.init(grp_id, "init.json") # 3. deserializer set-up ret = ecfg_ptr.start(port_id, "start.json") # module set-up, stream on ret = ecfg_ptr.get_frame_data(port_id, raw_buffer) # grab a frame
| 闸门 | 检查内容 | 判定 | SDK 接口 |
|---|---|---|---|
| 1 · 寄存器 | 读取序列号与 OTP,确认型号身份。传感器若暴露安全机制(如 Sony IMX735),其模拟 BIST、OTP CRC、看门狗与存储保护检查也在此运行。 | 身份存在且匹配,产品才能流入下一站 | get_i2c_dev_list() 列出芯片节点;read_i2c() 读序列号与 OTP;imx735_* 诊断 |
| 2 · 光学 | 五点锐度(中心+四角,按 ISO 12233 斜边 SFR)、色卡与曝光 | 按型号阈值判 PASS/NG;边缘个案由 Imatest MTF50 仲裁 | get_frame_data() 采集测试卡与色彩图像 |
| 3 · 电气 | PoC 供电电压与电流;电气工作范围 | 实时读数落在书面限值内 | get_poc_voltage()、get_poc_current() |
| 4 · 链路 | 正向与反向信道的 GMSL 链路余量,10 mV 步进 | 余量不低于书面下限 | link_margin(port_id, alg, t_des, t_ser) |
| 5 · 加密 | 链路加密与配对 | 加密生效、唯一配对、无明文回退 | 参数在 JSON 配置中下发;采集盒作为协商对端完成验证 |
| 6 · 应力与老化 | 振动扫频、高低温浸泡、高温连续运行 | 与应力前基准无偏移;计数器在限值内 | get_frame_rate()、get_dropped_frames_cnt()、get_error_frames_cnt()、get_module_temperature() |
| 7 · 记录 | 全部读数与图像汇总为判定报告 | PASS 归档 NG 拦停 | 测试脚本把一切归档在序列号之下 |
每道闸门背后,都有一条值得带走的经验:
纪律
阈值按模组型号书面约定并纳入版本管理,每台模组的数据归档在其序列号下。剥离了测试条件的数字,不是测量值。
正在拉流的画面,只能告诉你链路此刻是好的。链路余量告诉你还剩多少安全距离。方法遵循ADI 的 GMSL2 通道规范:从串行器默认发送幅度出发,按 10 mV 步进逐级下调,每级驻留并盯错误——正向信道(视频)与反向信道(控制)都测。首次出错之前能干净走完的步数,就是链路剩余的余量。
健康的模组在低于标称幅度很多级时仍在正常工作。老化的线缆、不到位的连接器或受损的均衡器,会表现为提前出错——而此时相机画面依然完美。这正是链路余量被设为产线闸门、而非实验室好奇心的原因:它抓住的是今天能用、上路才坏的那一台。
在 ECFG 上,这只是一个 SDK 调用。link_margin() 接收端口、算法编号与解串器/串行器节点,返回实测余量。算法随相机侧串行器而定:
| 相机侧串行器 | 正向信道算法 | 反向信道算法 |
|---|---|---|
| MAX9295A / B | #1 | #3 |
| MAX96717 / K / F | #2 | #3 |
| MAX96793(GMSL2 模式) | #2 | #3 |
| MAX96793(GMSL3 模式) | #4 | #5 |
在采集盒一侧,MAX9296A/B 与 MAX96792A 解串器跟随串行器的设置。
nodes = ecfg_ptr.get_i2c_dev_list() # '/dev/G1-des', '/dev/port1-ser', ... fwd = ecfg_ptr.link_margin(1, 1, '/dev/G1-des', '/dev/port1-ser') # MAX9295A, forward (#1) rev = ecfg_ptr.link_margin(1, 3, '/dev/G1-des', '/dev/port1-ser') # MAX9295A, reverse (#3)
这是客户盯得最紧的验收环节:装配之后光学仍在变化,电气薄弱点只在温度下才露头。产线上的每项可靠性与老化检查,在 DV 计划里都有原型——DV 用抽样批次和长周期证明设计,产线用跑得动节拍的形式看守每一台。
| DV 测试 | 产线对应项 | 为何这样简化 |
|---|---|---|
| 温度 × 电压角点上的五点功能测试 | 电压电流监控,加上浸泡后的功能检查 | 角点证明设计;产线守住工作窗口 |
| 高温工作耐久(数百小时) | 高温连续拉流,盯帧率、坏帧与漂移 | 数百小时证明寿命;产线在节拍内抓早期失效 |
| 机械冲击(两个等级)与综合振动 | 装配后三轴正弦扫频,图像前后比对 | DV 可以破坏样件;产线必须无损、逐台 |
| 交变湿热与凝露 | 高低温浸泡叠加长线缆拉流 | 气候与线缆在车上同时作用,测试也让它们同时出现 |
解读:两条约束决定了一切简化:无损——模组还要出货;以及逐台——测试必须跟得上产线节拍。
胶水固化之后,每台模组上三轴正弦扫频;加速度、频段与循环次数按型号验收规范执行。扫频前后各采集一次锐度与色彩图像,直接比对——焦点漂移与结构松动在这里现形。
模组进入温箱做高温浸泡与低温浸泡,温度点与驻留时间由型号规范决定。每次浸泡后,相机经一根整车长度的线缆连续拉流,再对照浸泡前基准复测锐度与色彩。温度与线缆同时作用,因为那才是真实工况——分开测,什么也证明不了。DV 的功能测试跑满五个温度 × 电压角点;产线的高温复测加电压电流监控,就是它的逐台形式。
DV 的耐久测试一跑数百小时——高温连续运行 500 小时,或数百次温度冲击循环。产线取中间形式:高温连续拉流,同时盯帧率不稳、坏帧与参数漂移,让早期失效与参数蠕变停在这道闸门。SDK 一侧,老化脚本就是三个计数器加一个温度读数,按周期轮询、越限报警:
frame_list = ecfg_ptr.get_frame_rate() # frame rate, per port dropped_list = ecfg_ptr.get_dropped_frames_cnt() # dropped frames error_list = ecfg_ptr.get_error_frames_cnt() # error frames temp_list = ecfg_ptr.get_module_temperature() # module temperature
老化台架最容易漏掉温度,而它不该被漏掉。把模组温度记录在帧计数器旁边——必要时再加逐端口的传感器与 PCB 温度——就能把每一个坏帧和产生它的热状态绑在一起。
判定如何构成
| 闸门 | 检查项 | 判定方式 | 结论 |
|---|---|---|---|
| 光学 | 分辨率测试卡上的中心与四角锐度 | 得分对照该型号书面阈值,逐角判定 | 低于下限即 NG |
| 光学 | 四角均匀性(极差 ÷ 均值) | 对照该型号均匀性限值 | 超限即 NG |
| 光学仲裁 | 边缘个案模组做 Imatest MTF50 | 仲裁读数确认产线得分 | 低于下限即 NG |
| 应力之后 | 对照基准的色彩与锐度 | 与应力前基准图像比对 | 有偏移即 NG |
解读:阈值全部数字化、书面化,按模组型号逐一约定——例如不同 FOV 型号持有不同的均匀性限值。完整矩阵在与客户约定的受控版本规范里,不在本页公开。
解读:判定语言直接来自 DV 的功能状态等级:测试中与测试后,每个功能必须保持规定等级。在产线上,这个等级的名字就叫 PASS。
自动驾驶的感知视频是敏感数据。客户的规范要求相机链路端到端加密——不是作为一项配置,而是作为逐台验证的测试项。
验证在客户的安全框架内进行。工具侧,链路加密参数与其余点亮配置一样,通过同一份 JSON 下发;ECFG 图像采集盒以授权接收端身份加入协商;测试脚本逐台确认加密状态、配对结果与回退行为,并写入该模组的记录。算法与密钥管理属于客户的安全体系,不在本文范围。
为什么逐台:加密是安全属性,安全属性不接受抽检。车队里一台未加密的相机,整条链路都有风险——所以它和锐度一样,是每台模组都要交出的答案。
回看第 4 到 6 节的代码:七道闸门反复调用的是同一小组接口。ECFG 图像采集盒把这些能力装进一台硬件,SDK 再以 Python 与 C++ 接口开放出来。设计思想浓缩成两个词:节点化配置。
一条 GMSL 相机链路上有四类芯片:解串器(des)、串行器(ser)、图像传感器(sen)与模组 MCU。采集盒把每一颗映射为独立的 I2C 设备节点:
device_list = ecfg_ptr.get_i2c_dev_list() # /dev/G1-des /dev/port1-ser # /dev/port1-sen /dev/port1-mcu ...
此后,读 OTP、查寄存器、轮询状态,都只是对某个节点名做一次 read_i2c 或 write_i2c——和读文件一样直接。初始化与启动参数放在 JSON 配置文件里,可读、可评审、可版本管理;支持一个新的相机型号,是配置工作,不是代码工作。
该交钥匙的地方交钥匙,该开放的地方开放
测量层开箱即用:相机一接上,供电、链路、拉流与遥测全部就绪。测试逻辑始终是你的——测试项、阈值与流程都在你自己的 Python 或 C++ 代码里,纳入你自己的版本管理。交互式点亮——扫描设备、加载解串器配置、改寄存器、盯电压电流与帧报警——用 UGrab,它运行在同一套 ECFG 硬件上;流程长成自动化产线后,SDK 接手。
在本项目中,老化与温度测试合并进行:每次浸泡后,相机经整车长度线缆连续拉流,同时监控帧率、坏帧与图像稳定性。时长与工作点按各项目的验收要求执行;需要更长高温运行的项目,在同一套设置上延长即可。
不会。密钥管理与算法属于客户的安全框架。测试验证的是可观察的安全属性——加密状态、配对结果与回退保护——并写入每台模组的记录。
DV 在量产前基于抽样批次进行,依据主机厂标准与 IEC 60068、ISO 20653、ECE R10 等规范,证明设计。PV 在生产工装产出的零件上重复这些测试,证明工艺。下线测试逐台进行,取验证程序中可行的部分,拦住工艺漂移与个体缺陷。
画面好只说明链路此刻正常。余量测试回答的是还剩多少安全距离:发送幅度按 10 mV 逐级下调,首次出错的位置就是剩余余量。它能在相机还能正常工作时,发现老化的线缆与接触不良的连接器。
普通采集方案解决的是“出图”。ECFG 还覆盖带电气测量的 PoC 供电、链路余量控制、加密验证、温度遥测与稳定拉流——六大维度需要的全部底层入口,集成在一台设备里,经 SDK 开放。
由你选择。点亮与交互检查,UGrab 开箱即用。自动化产线,则由 SDK(Python 与 C++)开放供电监控、链路控制、加密状态与图像流,你的团队在其上搭建流程与判定逻辑——第 4 节的闸门表就是现成蓝图。
按工位并行度选:ECFG-S1(单通道)适合点亮与逐台测试工位;ECFG-S16(16 通道)适合并行测试、老化与数据采集。两者共用同一套 SDK 与同一组 JSON 配置文件,今天在 S1 上验证过的脚本,明天就能跑在 S16 上。FPD-Link 相机请看 ECFG-R4。
通过 JSON 配置文件:解串器初始化与模组启动参数都在可读、可评审、可版本管理的配置里。增加一个型号是配置工作,不是开发工作。
从一台 ECFG 图像采集盒和它的 SDK 开始:供电监控、链路余量、加密验证与稳定拉流全部就绪——流程与判定,写成你自己的 Python 逻辑。
细节受 NDA 约束——欢迎咨询我们可分享的内容。