公司动态

痞子衡嵌入式:如果你嫌MCU板卡工厂验收测试麻烦,不妨试试FATestSuite

📅 2026/8/9 18:59:59
痞子衡嵌入式:如果你嫌MCU板卡工厂验收测试麻烦,不妨试试FATestSuite
任何一个 MCU 板卡从工厂生产出来一定要过验收测试以确保板卡焊接以及所用元器件功能正常这就是所谓的 Factory Acceptance Test(工厂验收测试简称 FAT)。除了工厂自身的必要测试之外一般 MCU 原厂还需提供 MCU 端测试固件程序让工人在板卡上实际跑一遍功能来进一步确认板卡是否正常(不是 OOB 程序而是特意设计的能遍历主芯片外围器件功能的 FAT 程序)。今天痞子衡主要讲得就是这部分跟 MCU 原厂相关的验收测试工作。一、传统FAT方法MCU 原厂准备 FAT 程序传统的方式是基于 SDK 包将板卡涉及的外围器件功能测试全部集成在一个总工程里然后工人将这个单一程序下载到板卡上运行并在串口终端里进行手工交互获取测试结果。这种传统方式有两大弊端一、多个功能测试糅杂在一个总工程里导致这个工程维护比较麻烦并且多个测试对系统的配置之间可能互相影响会引入额外的调试工作二、测试过程在串口终端里交互对工人不太友好并且测试结果存档及与具体板卡对应关系需手工完成。二、全新FATestSuite方式FATestSuite 是一个为 i.MX RT 系列板卡全新设计的 FAT 方法其包含 MCU 端测试固件模板(fat-template-fw)和 PC 端 GUI 工具(MCU-FATestSuite)两部分。我们先来看一下它的测试原理你就能明白它为什么能解决传统 FAT 的弊端。首先基本硬件依赖和传统 FAT 方式一样板卡调试器串口。所不同的是我们将原本一个包含全部测试功能的总工程变回各自独立的测试子工程(实际上 SDK 里本来就是这样的子工程)这样就省去了额外集成与调试维护工作。现在我们有了多个测试程序这时候再设计一个上位机软件让它去逐一加载运行这些测试程序。为了能够让上位机识别单个测试程序运行情况我们在每个程序里额外加上统一的串口打印内容(如下图代码里标黄部分)上位机获取串口打印结果并识别即可。一轮测试结束上位机可以自动生成完整的报告。2.1 特性概述MCU-FATestSuite 工具实际上痞子衡已经维护了近 3 年了第一版 V1.0 于2024年1月份正式发布当前已经是 V3.x 版本功能已经比较成熟了01. 支持i.MXRT5xx/7xx/105x/106x/118x 02. 支持J-LINK方式下载程序 03. 支持调试器类型以及SN号选项 04. 支持多测试用例程序的自动检测、下载和执行 05. 支持串口方式交互程序执行结果 06. 支持若干用户配置选项(jlink设置、串口交互字符、程序加载等待时间、执行结果等待时间) 07. 支持用户芯片与板卡选项 08. 支持板卡序列号文本框输入(被用于测试结果文件名) 09. 支持用户自定义板卡文件夹(放置测试用例程序) 10. 对于测试用例程序需要人工判定结果的情况弹框交互确定结果 11. 一轮测试结束自动保存测试结果进EXCEL/TEXT文件(./report目录下)2.2 MCU端测试固件模板测试用例可以基于 SDK 里的现有例程仅需小小代码改动然后工程换成在内部 SRAM 执行的链接文件生成 .srec 文件(注意无需任何 boot header就是裸 CM 程序镜像内容一开始应该是 ARM 中断向量表)并将该镜像文件放到上位机工具 \MCU-FATestSuite\src\targets\对应芯片以及板卡的文件夹目录下即可。测试固件模板地址 https://github.com/JayHeng/imxrt-fat-template-fw IDE版本IAR EWARM v9.70.3固件模板主要就 \imxrt-fat-template-fw\templates\fat_src 里两个源文件将其添加进 SDK 里例程工程里并在适当地方调用如下接口// 对于例程自身能直接判断结果的情况delay_Time_s 参数设 0 // 对于例程需要人工来判断结果的情况delay_Time_s 参数设非 0 // - 上位机 V2.x 以下真实延时以便人工观察结果也由人工额外记录 // - 上位机 V3.x 开始弹窗让用户反馈结果此时延时时间不重要由弹窗反馈交互决定 void FAT_MagicStart(uint32_t delayTime_s); // 放到代码里最后判定运行正常的地方如果结果需要人工判定则无所谓 void FAT_MagicPass(void); // 放到代码里所有出现异常结果的地方 void FAT_MagicFail(void);2.3 PC端GUI工具整个设计里 PC 端工具是核心这里主要介绍一下上位机工具的使用。工具本身是基于 Python 3.11 开发的但是最终用了 PyInstaller 打包成了 EXE运行时并不依赖 Python 环境。代码也是开源的大家可以二次开发。工具地址 https://github.com/JayHeng/MCU-FATestSuite2.3.1 基本使用步骤当前上位机版本 V3.x 主要支持 J-Link 调试器在使用工具前需要确保安装了 J-Link 驱动以及芯片支持包(Device Patch)确保能够使用 J-Link Commander 连接上主芯片。 上位机工具使用起来步骤很简单便于普通工人操作没有学习成本。1. 双击 \bin\MCU-FATestSuite.exe 打开软件 2. 假定加载方式选J-Link点击 Browse 设置正确的 JLINK.exe 路径 3. 假定测试得 MIMXRT700-EVK(MCU Device、MCU Board作相应设置) 将所有测试程序(.srec格式)放置在 \src\targets\MIMXRT700\FRDM_Rev.A_SCH-96317\ 目录下 4. 在 Board SN 里写入当前板卡唯一识别号 板卡上电 / 换新一块板卡 5. 点击 Reset Test Result 按钮 6. 点击 Open 按钮打开串口(确保串口号与板卡对应)确保状态变为 Close 7. 点击 Detect Test Cases 按钮扫描测试程序 8. 点击 Run Test Cases 按钮开始跑按钮黄色说明正在跑 重复 5、6、7、8 9. 每一轮测试均会在 \report\ 下生成 .text 和 .excel 测试结果报告2.3.2 用户配置项上位机同时也提供了一些用户配置项在 \MCU-FATestSuite\src\targets\xxDevice\fattargetconfig.py 文件中配置是动态加载的无需重新编 EXE。这里最需要特别关注的是 waitAppTimeout 配置如果测试用例是一个能够自我判定结果的情况但是需要很长时间才能返回结果那么就需要调整这里的设置值。# 连接 J-Link 时的配置 jlinkDevice MIMXRT798S_M33_0 jlinkInterface SWD jlinkSpeedInkHz 4000 # 程序中串口数据刷新间隔(thread进程重入时间) uartRecvInterval 0.5 # seconds # 测试程序APP与工具接头字符 fatLogStart FAT FW Start fatLogPass FAT FW Pass fatLogFail FAT FW Fail fatLogDelay DelayTime # 从调用 J-Link 加载程序开始到接收到 fatLogStart 的最大等待时间 loadAppTimeout 5.0 # seconds # loadAppTimeout 时间内未收到 fatLogStart重复调用 J-Link 加载程序次数失败返回 LOAD-FAIL 测试结果 loadAppRetryCount 3 # 从接收到 fatLogStart 开始到接收到 fatLogPass/fatLogFail 的最大等待时间超时可返回 RUN-TIMEOUT 测试结果 waitAppTimeout 10.0 # seconds