尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

i.MX8边缘网关实战:Qseven与SMARC选型及载板设计要点

i.MX8边缘网关实战:Qseven与SMARC选型及载板设计要点 前阵子给客户做边缘计算网关老板给了一个死任务核心板必须在 Qseven 和 SMARC 两种规格里做选择CPU 锁死 NXP 的 i.MX8 系列。说实话一开始我对这种双标准并行比较是有点抗拒的因为 Qseven 和 SMARC 虽然都属于 COMComputer-on-Module模块但接口形态、尺寸、供电逻辑和载板设计思路差别很大硬放在一起比很容易被细节带偏。真正把两款模块都拿回来跑完一轮之后我发现这个组合其实很有意思i.MX8 的低功耗和高集成度恰好把 Qseven 和 SMARC 各自的优势都放大了。这篇文章就把我这一轮的选型、载板设计、调试和实测经验整理出来给正在做类似项目的朋友做个参照。1. 从接口战争说起Qseven和SMARC为什么都盯上了i.MX81.1 Qseven和SMARC在COM市场里到底扮演什么角色COM 模块的核心价值是把 CPU、内存、PMIC、存储等需要高密度设计的部分全部做到一个标准模块上用户只需要画一张相对简单的载板把电源、接口、外设拉出来就能用。这样一来产品迭代时可以只换核心板不重画整板供应链和研发周期都能省不少。Qseven 和 SMARC 都是这种思路下的产物而且这两者都属于嵌入式系统标准化组织 SGET 管理的规范不是什么某厂商闭门造车自己定出来的接口。Qseven 的标准形态是 70mm x 70mm 的方形模块使用 230pin 的 MXM 金手指连接器插卡式安装。它最早就是为了低功耗移动计算场景设计的所以整体高度可以控制得很低适合做便携设备、HMI、医疗仪器这类对厚度敏感的产品。SMARC 则是后来针对更小型化、更低功耗的智能设备推出的规范常见尺寸有 82mm x 50mm 和 82mm x 80mm 两种使用 314pin 的板对板连接器模块更扁长整体高度更低。从市场角度看早年 COM Express 占据高性能计算的主流但像 i.MX8 这个级别的应用处理器功耗普遍在 3W 到 10W 之间接口资源又不像 x86 那样需要海量 PCIe Lane硬塞进 COM Express 反而浪费了板卡面积和成本。Qseven 和 SMARC 恰恰卡在这个功耗和尺寸区间所以大量模块厂商都愿意在这两个标准上推出 i.MX8 核心板形成了一种“标准接口 主流 SoC”的高性价比组合。1.2 两种接口的设计逻辑差异Qseven 用的 MXM 金手指插座插拔方便量产装配和后期维修都比较直接。很多工程师把它类比成笔记本内存条或显卡插槽的逻辑只要模块插入到位锁扣固定好电气连接可靠性是没问题的。但金手指的问题也明显长期在振动环境下使用如果锁扣设计不好或模块间公差控制不到位可能会出现接触不良而且 Qseven 模块的金手指是裸露的在粉尘、潮湿环境需要额外做结构防护。SMARC 的板对板连接器则是完全不同的思路。它把模块压在载板上通过焊接连接器实现电气接触模块和载板之间的总高度可以压得非常低抗振动、抗冲击表现通常比金手指更稳。缺点是维修和更换模块更麻烦需要拆掉散热片和固定螺丝有时候还要用加热台才能安全取下。对车载、轨交、工业现场这类长期不拆机的场景SMARC 反而比 Qseven 更合适。这些差异在选型时往往被大家忽略因为光看处理器型号Qseven 和 SMARC 模块的性能表现可能完全一样。但到了最终产品结构设计阶段连接器的高度、模块的固定孔位置、更换模块的难易程度都会变成实实在在的问题。尤其是 i.MX8 系列本身芯片面积不大模块厂商在布局上又都做了高度优化Qseven 和 SMARC 之间的选择更多是机械和电气架构上的取舍而不是性能取舍。1.3 i.MX8为什么天然适合这两个标准NXP 的 i.MX8 系列在嵌入式圈子里火核心原因不是单核跑分有多高而是它在功耗、外设丰富度和软件生态之间取得了一个比较舒服的平衡点。以 i.MX8M Plus 为例四核 Cortex-A53 配上 2.3 TOPS 的 NPU同时支持双千兆以太网、PCIe、USB 3.0、MIPI-DSI/CSI整颗 SoC 的典型功耗可以压在 5W 上下。这个功耗水平正好落在 Qseven 和 SMARC 模块的散热能力范围内不需要像 x86 那样上热管或主动风扇才能压得住。另外i.MX8 系列的启动链路和电源管理经过了很多年的迭代已经非常成熟。模块厂商可以直接把 NXP 官方的 PMIC 参考设计搬上模块再通过标准接口把 I2C、PWM、UART、GPIO 导出到载板。对做载板的工程师来说这意味着画板难度不会太高不需要面对复杂的高速信号设计和多路电源时序管理省下来的功夫可以全部集中在产品功能上。这也是为什么前几年大家都在观望最近两年 Qseven 和 SMARC 的 i.MX8 方案突然大规模出现的原因SoC 成熟了标准也成熟了模块厂商自然愿意跟进。2. 选核心板之前先把i.MX8家族谱系捋清楚2.1 别被一个“8”字骗了i.MX8是个大家族很多朋友看到“i.MX8”这五个字以为是一颗具体的芯片。实际上这个系列下面分了至少四五个细分方向i.MX8M、i.MX8M Mini、i.MX8M Nano、i.MX8M Plus、i.MX8X、i.MX8QuadMax 等等。不同型号之间的 CPU 核数、GPU 性能、NPU 能力甚至引脚复用都可能不一样。模块厂商对外宣传通常只会写“i.MX8 CPU”但你要是在选型阶段不把具体后缀问清楚后面载板画完才发现缺一个关键接口那就得从头再来。i.MX8M 最早的一批主打多媒体和显示适合做 HMI 和视频设备。i.MX8M Mini 是市场最普及的型号之一四核或双核 Cortex-A53 配 Cortex-M4性能比较均衡工业控制、边缘网关、基础 HMI 都能覆盖。i.MX8M Nano 进一步砍掉了一些外围主打极致成本和低功耗适合传感器网关这类轻量级应用。i.MX8M Plus 则是在 Mini 基础上增加了 NPU同时增强了 ISP 和 Ethernet 能力是目前做边缘 AI 盒子最常见的选型。i.MX8X 更偏功能安全和低功耗常用于车载和轨交场景。i.MX8QuadMax 属于旗舰级双核 Cortex-A72 四核 Cortex-A53主要面向需要较高算力和复杂显示输出的场景。所以你在选 Qseven 或 SMARC 模块的时候一定要让模块厂商把型号后缀写到报价单上。不要只看“i.MX8”三个字否则你以为是 8M Plus 带 NPU 的结果对方报给你的是 8M Mini功能差了一大截。2.2 按实际场景选型号而不是按跑分选很多工程师选型喜欢先看 CoreMark 分数和 GPU 频率这个思路不能说错但在 i.MX8 家族里跑分高不一定等于项目成功。比如做工业 HMI需要的是稳定的显示输出、丰富的接口和长供货周期i.MX8M Mini 往往比 8M Plus 更合适因为 Mini 成本更低发热更小显示管线也完全够用。做边缘 AI 视觉检测就必须上 8M Plus 或者更高端的型号因为 NPU 跑深度学习模型的速度差别非常大单纯靠 CPU 跑推理会明显吃力。我一般会按下面这个方向去跟客户拆需求只做协议转换、数据采集、简单 HMIi.MX8M MiniDDR4 配 eMMC 就够。需要本地跑轻量级 AI 模型、视觉检测i.MX8M Plus重点关注 NPU 算力和 ISP 能力。对功能安全有硬性要求或者环境温度极端i.MX8X 系列或者选择带 ECC 内存和支持锁步的型号。需要高性能多屏显示同时跑多个虚拟机或容器i.MX8QuadMax 这类高配型号。这里特别提醒一句Qseven 和 SMARC 只是模块接口标准不代表使用这个标准的模块就一定“够用”或“不够用”真正决定产品能力的还是模块上集成的那颗 SoC 型号和内存配置。同样是 Qseven 接口里面可能是 i.MX8M Mini也可能是 i.MX8QuadMax价格差了数倍设计时预留的功耗和散热空间也完全不同。2.3 内存、存储和温度等级比CPU核心更影响交付除了 CPU 型号模块上的内存和存储配置也要在选型阶段就确认清楚。i.MX8 支持 LPDDR4、DDR4 等多种内存容量从 1GB 到 8GB 都有。有些模块为了成本把内存颗粒直接焊在板上不可扩展后期想加内存只能换模块。如果你的产品需要跑容器、数据库或比较重的 GUI内存建议直接从 2GB 起步4GB 会更从容。存储方面eMMC 是最常见的选项容量 8GB 到 64GB 不等。如果产品有大量日志写入或需要频繁掉电保护选择带工业级 eMMC 的模块会更稳。另外要注意模块是否支持 SPI NOR 启动备份以及是否预留了恢复烧录的 GPIO。对于量产产品稳定可靠的恢复路径很关键否则设备在现场变砖会非常麻烦。温度等级更是直接关系到产品能卖到哪里。商业级模块一般是 0℃ 到 60℃工业级是 -40℃ 到 85℃。i.MX8 本身在工业温度范围内运行没问题但模块上的 DDR、eMMC、PMIC 等器件也要达到对应等级。有些模块宣传时只说 CPU 支持工业级但内存用的商业级颗粒高温下会出现随机死机。选型时不要嫌麻烦直接让厂商提供整模块的温度等级报告和实测数据。3. 载板设计时我重点盯的四个环节3.1 引脚定义表必须逐脚手工核对Qseven 和 SMARC 都有公开的标准引脚定义但这里有个容易踩的坑标准定义的是“这个引脚位置可以是什么功能”而模块厂商会选择其中一部分功能做成默认复用。同样是 SMARC 接口的第 137 脚某家模块上默认是 UART_A另一家可能是 GPIO_A还有可能是 I2C4。你要是直接照搬别人的参考载板不对着模块手册逐一核对通电后大概率会发现串口不通、GPIO 没反应甚至可能因为电平域不匹配把模块烧掉。我现在的习惯是在原理图阶段就做一张引脚核对矩阵。把模块手册里的“默认功能”“复用功能”“电平方言”“模块内部是否上拉/下拉”全部列出来然后在载板原理图上同时标注清楚哪个引脚接到了哪里。画完原理图后再回到矩阵做一遍反向检查确保没有遗漏。对于标准里常见的 PWR_BTN、RESET_OUT、FORCE_OFF、LID 这些控制信号也要特别注意。不同模块对它们的处理逻辑不完全一样有些是低有效有些是高有效有些模块内部已经做了上拉载板上再外接一个下拉就会导致模块永远处于复位状态。这类问题很隐蔽原理图上看不出来只能在调试时用示波器逐个信号量。3.2 电源架构和启动时序决定能不能正常开机i.MX8 模块虽然集成了 PMIC但载板依然要管好输入电源和使能逻辑。Qseven 和 SMARC 标准里对模块输入电压的定义有所差异常见的 Qseven 模块以单 5V 为主SMARC 模块也大多支持 5V 输入但细节非常重要模块的 5V 输入是直接给 PMIC 供电还是经过载板上的 DC-DC 二次变换功耗预算完全不同。如果你的产品是从 24V 工业电源降压中间一定会经过一级 DC-DC。这时候要特别注意模块启动瞬间的峰值电流。i.MX8M Plus 这种带 NPU 的 SoC启动时 DDR 初始化、固件加载、外设上电都挤在同一时间窗口我用示波器测过5V 输入瞬间电流能冲到 3A 以上。如果载板的 DC-DC 限制了峰值输出或者输出电容不够模块就会在启动途中跌落欠压表现就是电流上去了又掉下来然后反复重启。模块的使能信号时序也要纳入设计。很多模块会要求输入电压稳定后再拉高 PWR_BTN 或 EN如果载板上的 CPLD 逻辑太早释放使能模块 PMIC 可能还没准备好就会漏掉开机事件。我的经验是先用硬件延时或者 CPLD 计数确保输入电压建立至少 50ms 之后再使能模块如果需要做上电时序控制直接把时序图贴在原理图页面上方便后续调试查阅。3.3 显示、PCIe、USB这些高速信号布线别凭感觉i.MX8 模块通过标准接口引出 eDP、LVDS、MIPI-DSI、PCIe、USB 等高速信号。一般来说模块厂商会在 Design Guide 里给出载板走线的阻抗和控制要求。Qseven 和 SMARC 标准虽然定义了引脚布局但不会替你决定怎么走线载板 Layout 仍然是工程师自己的责任。MIPI-DSI 差分对需要做差分阻抗控制常见要求是 100Ω 差分阻抗组内等长控制在 mil 级别。很多人以为 MIPI 速率不高就随便走了走结果屏幕出现雪花、条纹或者颜色不对。我遇到过一个案例载板把 MIPI 差分对跨了分割回流路径被切断虽然只是几毫米的缝隙却导致屏幕在高温下闪屏。解决方法是把 MIPI 走线完全放在连续的参考平面上中间不要有任何破损过孔尽量成对放置。PCIe 的问题更多尤其是 PCIe 设备枚举不稳定。载板如果从模块引出的 PCIe 走线太长或者参考层不连续链路训练时很容易降速甚至在 x1 模式下都起不来。我建议在布局阶段就把 PCIe 走线优先安排在最短路径不要为了绕开螺丝孔把差分对绕成 S 形。参考时钟如果由载板提供要选择抖动指标够好的时钟芯片并严格按照手册要求布线。USB 相对宽容一些但 D/D- 的差分等长也要做到位ESD 保护器件不要放在差分对中间产生过大的寄生电容否则高速信号眼图会变差表现为 USB 设备偶尔识别失败。3.4 散热结构和机械干涉被低估的“软”设计很多项目在原理图阶段很重视一到结构设计就开始放飞自我。Qseven 和 SMARC 模块的 CPU 功耗虽然比 x86 低但热点非常集中尤其 i.MX8M Plus 在跑 NPU 任务时发热区域就集中在芯片中央很小一块。如果不加散热片满载跑 10 分钟温升能超过 50℃。机械设计上要注意连接器高度。Qseven 的金手指插座本身有一定厚度模块插入后背面空间相对有限散热片设计要考虑插座锁扣的位置。SMARC 的板对板连接器很低矮模块和载板几乎贴在一起散热片只能往模块背面装需要确认模块背面的器件高度和禁布区域。模块厂商一般会提供 STEP 模型但不同模块的固定孔位置并不完全一致哪怕都叫 SMARC也有短版和长版之分。你在结构设计之前一定要拿到实际选型那款模块的 3D 模型对照确认干涉问题不能凭标准里的典型尺寸想当然。散热片的面积和风道也要提早规划。以 5W 功耗的模块为例做纯被动散热至少需要 30 到 40 平方厘米左右的散热面积才能把芯片结温控制在合理范围如果外壳是密封金属腔体可以利用外壳作为散热路径。具体数值因环境温度而异但只要在结构设计阶段预留了足够的散热空间后面才不会被迫降频或加风扇。4. 从点灯到量产固件、BSP和烧录链路4.1 i.MX8的三段式启动链不搞懂会排查到崩溃很多第一次接触 i.MX8 的工程师拿到模块后第一反应是“把 U-Boot 烧进去启动了不就行了”。但 i.MX8 的启动流程和传统 ARM 单板不太一样它是由 Boot ROM 引导、SPL 初始化 DDR、ATF 提供安全运行时、U-Boot 做系统引导然后跳转到内核。这个链条里的任何一环出问题都可能表现为串口完全没输出或者输出到一半卡住。我遇到过一种现象串口打印了 Boot ROM 的信息然后就没有然后了。排查了半天发现是载板上的 DDR 供电纹波偏大导致 SPL 初始化 DDR 失败模块会自动重启。还有一次是 U-Boot 阶段找不到 eMMC因为模块的 eMMC 需要特定 GPIO 上电时序载板的 CPLD 配置里把这个 GPIO 拉低了U-Boot 里自然也读不到。所以拿到模块之后我建议先不要急着改系统先用模块厂商提供的评估板和最小载板配置跑一遍原始固件确认模块本身能启动。然后再把你的载板逐步接上去每加一个外设就重新验证一次避免把所有问题都堆在最后一轮调试。4.2 用Yocto构建系统别一上来就瞎编瞎改NXP 的 i.MX8 BSP 基本都基于 Yocto 构建模块厂商一般也会基于 NXP 官方 BSP 做定制。Yocto 的学习曲线确实比较陡但它解决了嵌入式 Linux 构建里最头疼的问题内核、U-Boot、根文件系统和应用库的版本一致性。手工交叉编译虽然快但到了量产阶段依赖关系混乱会让你崩溃。如果你是第一次构建建议直接搭建一个干净的 Ubuntu 环境按 NXP 官方文档安装需要的宿主机软件包然后下载模块厂商提供的 BSP 包。不要直接用网上的随手脚本版本不匹配会浪费大量时间。构建时可以直接构建imx-image-multimedia或者模块厂商提供的 demo image先把系统跑起来再根据产品需求做裁剪。我个人的习惯是给 Yocto 配置一个本地共享目录存放下载的源码和编译缓存。因为同一个 SDK 经常要在不同项目里重复使用比如同时做 HMI 和网关两个产品如果每次都重新下载源码几十分钟到几个小时的编译时间实在扛不住。设置好DL_DIR和SSTATE_DIR后第二次构建同类镜像能快非常多。4.3 烧录、量产镜像和安全启动提前规划调试阶段的烧录一般用 NXP 的 UUU 工具通过 USB 下载模式把固件写到 eMMC 或 SD 卡。这条路径非常方便一根 USB 线就能解决。但到了量产阶段你不可能每台设备都让产线工人打开命令行敲命令。一定要提前做一个可重复烧录的工厂镜像包最好能实现一键烧录、自动校验。i.MX8 还支持 HABv4 安全启动。如果产品有防抄板和软件防护需求需要生成 CFG 文件、CSF 签名并在生产时烧写 eFuse。这个过程看似复杂但实际上有非常固定的流程通常模块厂商会提供相应的生成工具和使用指导。我建议在启动量产的至少一个月前就把安全启动流程跑通因为密钥的管理、签名的更新都会影响生产节奏真到产线上再折腾肯定来不及。另外量产镜像里不要包含多余的应用和调试接口。很多开发板镜像默认开了 root 密码、SSH、串口控制台在产品里这些都会变成安全隐患。量产前应该把服务裁剪到最小集合关闭不必要的 debug 接口并默认启用看门狗。这个道理大家都懂但实际执行时经常因为着急出货而忽略后续维护成本会翻倍。5. 实测记录Qseven与SMARC i.MX8模块的真实差异5.1 功耗和发热实测数据为了不被厂商宣传带偏我把一款 i.MX8M Plus 的 Qseven 模块和一款 i.MX8M Mini 的 SMARC 模块放到同一测试环境里做了几组实测。测试环境是室温 25℃载板供电用的稳压电源系统跑同一个定制 Yocto 镜像默认关闭屏幕和 Wi-Fi。我在不同负载状态下记录了整板功耗测试状态Qseven i.MX8M PlusSMARC i.MX8M Mini系统 idle网络空闲3.2W 5V1.8W 5V四核 CPU 跑满 stress7.8W 5V4.5W 5V启动瞬间峰值8.5W5.2WNPU 连续推理6.5W不支持用红外热像仪看i.MX8M Plus 满载运行 10 分钟后芯片表面温度接近 72℃加上被动散热片后稳定在 58℃ 左右。i.MX8M Mini 满载也就 52℃加散热片后不到 45℃。这个差距直接决定了产品外壳散热设计的方向。从功耗测试可以得到几个实用的结论如果产品需要长时间满载运行模块功耗和散热要按 8W 甚至 10W 来设计不能按 CPU 数据手册的典型功耗做如果只是间歇性工作动态电源管理和休眠唤醒能帮不少忙i.MX8M 系列的浅睡和深睡功耗差距非常大硬件设计上要保证外部器件不会阻碍模块进入深睡。5.2 性能表现和接口跑起来的真实效果性能测试方面我没有过度追求跑分而是按实际业务场景测了几个典型项目网关任务跑一个 Modbus TCP 转 MQTT 的容器加上 4 路串口采集i.MX8M Mini 的 CPU 占用率大概在 40% 左右4 核 A53 并没有成为瓶颈。边缘 AI用 i.MX8M Plus 的 NPU 跑一个 YOLOv5s 的量化模型1080p 输入处理速度能达到每秒 15 帧左右这个性能在工业质检和简单安防场景里已经比较够用。显示任务Qseven 模块跑 Qt for Embedded Linux一个 1080p 的 HMI 界面GPU 加速打开后界面切换很流畅CPU 占用不到 10%。接口实测也让我对 Qseven 和 SMARC 有了新的认识。单纯从电气接口看两种标准都能把 PCIe、USB、显示等功能跑起来稳定性差异更多来自模块和载板的实现质量。比如 SMARC 模块的板对板连接器在振动环境下确实更稳Qseven 金手指在快速更换模块时效率更高。把同一颗 i.MX8M Plus 分别放在两种模块上性能分几乎一致真正拉开的差距是载板布局灵活性和机械设计成本。5.3 什么时候选Qseven什么时候选SMARC如果你问我个人倾向我觉得没有绝对好坏只看使用场景。如果产品外壳空间很扁对模块高度敏感优先考虑 SMARC。板对板连接器把模块和载板压得很近整体高度比 Qseven 金手指方案更容易压缩。如果产品需要经常拆换模块做升级或维护Qseven 更方便只需松开螺丝拔出模块不用加热台。如果产品运行在持续振动的环境中比如车载、轨道车辆、车载医疗设备SMARC 的板对板结构抗振性一般优于 Qseven。如果产品是固定安装在机房或工业机柜里不经常拆装两者都能胜任选型时可以更多考虑供货渠道、价格和模块厂商的长期支持能力。我在实际项目管理里还会看一个很现实的指标模块厂商的参考载板资料质量。有的厂商只给一个 PDF 原理图有的会提供完整 OrCAD 工程和 PCB Layout 设计指南。对于量产项目后者能帮你省掉大量试错时间。因此选模块不能只看标准厂家对标准的理解和工程支持能力往往才是项目能不能顺利推进的关键。6. 调试阶段踩过的三个坑每一个都值得记进checklist6.1 上电时序导致模块“死活不启动”第一次做 Qseven i.MX8M Plus 载板时我把模块使能信号交给了板上的 CPLD 控制。结果模块怎么都启动不起来电流只有十几毫安串口没有任何输出。一开始怀疑是模块挂了换了一块新的还是一样。后来用示波器同时抓 5V 电源和 EN 信号发现 EN 在 5V 还没完全建立起来的时候就被 CPLD 拉高了。模块 PMIC 在输入电压偏低时收到了 EN于是进入欠压保护之后即使电压稳定PMIC 也不会重新响应这次的 EN 脉冲。我把 CPLD 里的延时逻辑改成“检测到 5V 爬升到 90% 后延时 80ms 再拉高 EN”模块马上正常启动了。这个问题在原理图阶段完全看不出来因为逻辑上“电压建立后使能”谁都觉得是对的但实际硬件爬坡时间和 CPLD 启动时间的交汇点才是关键。建议大家在调试第一块板时别偷懒直接示波器抓一遍上电波形确认所有使能信号都晚于电源稳定至少几十毫秒。6.2 显示接口黑屏但系统明明已经启动了另一个让我印象深刻的坑是 SMARC 模块的 MIPI-DSI 屏幕黑屏。系统能通过 SSH 登录进程也都在跑屏幕就是没反应。查内核日志只看到 DRM 设备注册了但 panel 节点一直 probe 失败。后来翻模块厂商的技术手册发现该模块的 MIPI-DSI 引脚默认复用成了 GPIO必须在设备树里显式配置引脚复用功能。这其实是非常典型的 i.MX8 问题i.MX8 的多功能引脚很多模块上已经把部分复用关系通过 Boot Configuration Pins 或内部 OTP 指定了但载板上连接的设备需要你通过 pinctrl 重新配置。我一开始直接在设备树里改了显示 panel 的时序参数浪费时间真正的问题是在 pinmux。改好pinctrl_i2c和pinctrl_mipi_dsi之后屏幕立刻点亮。如果你的项目也遇到类似黑屏建议先按下面的顺序排查先确认内核里drm相关驱动有没有probe成功再看 DT 里 panel 节点是否使能然后用示波器量 MIPI 信号线上的电平翻转不要一上来就怀疑屏幕硬件。6.3 PCIe设备枚举不稳定链路训练失败最后一个坑来自 PCIe NVMe 转接卡。板子启动后系统有时能识别 NVMe有时识别不到。仔细看内核日志发现 PCIe 链路经常直接训练失败偶尔训练成功也会从 x2 降到 x1。一开始怀疑模块 PCIe 信号质量差后来把载板上的 PCIe 走线单独拿去做阻抗测试结果差分阻抗只有 85Ω 左右低于规范要求的 100Ω。根本原因是载板 Layout 时为了绕开一个安装孔PCIe 差分对绕了很长一段而且换层处过孔间距不够导致阻抗突变。重新调整走线后将差分对尽量放在同一层过孔处加回流地孔PCIe 链路就稳定了。现在我做高速信号布线时会坚持一个原则哪怕多牺牲一点布局空间也要保证差分对走线短、等长、参考层连续绝不为美观或者结构让路。这个问题的调试过程非常耗时因为问题是否出现受温度、电压波动影响可能隔几次启动才复现一次。但根因其实就是 Layout 质量问题。如果你在项目早期就做好 Layout 审查会省掉大量现场调试精力。现象根因类型处理建议模块无输出、电流异常低上电时序/使能时序示波器抓 EN 与电源爬升时序增加延时系统启动但显示黑屏pinmux 配置未使能检查设备树 pinctrl 配置确认显示信号复用PCIe 设备时有时无差分走线阻抗不连续重走差分线保证参考层连续、等长高温下随机重启散热不足或供电余量不足增加散热面积测试峰值电流调试是一个反复逼近根因的过程。我现在的习惯是每块载板回来先做 24 小时高温老化测试把所有外设都跑起来然后在不同温度点做开关机循环测试。这些问题越早暴露修改成本越低。等项目到了现场再出问题就不是改一条线那么简单了。如果你现在也正在做 Qseven 或 SMARC 的 i.MX8 项目我建议你在画载板之前先把模块厂商的参考设计、引脚定义和启动时序图完整看一遍不要觉得这些文档太长。很多问题都隐藏在“你以为是常识实际上每个模块都有自己的细节”里。花一天时间确认这些细节往往能省下一个月改板时间。
返回列表