痞子衡嵌入式:如果你嫌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

相关新闻

互联网高薪加班现象与核心技术人才市场分析

互联网高薪加班现象与核心技术人才市场分析

1. 互联网行业高薪加班现象深度解析最近一则关于某电商平台以三倍薪资征集春节加班员工的消息引发广泛讨论,其中研发岗位日薪高达1.5万元的数字尤其引人注目。作为在互联网行业深耕多年的技术人,我想从行业现状、薪酬结构和职业发展等角度,聊…

2026/10/15 10:00:11 阅读更多 →
VisualCppRedist AIO:一站式解决Windows C++运行时依赖的终极方案

VisualCppRedist AIO:一站式解决Windows C++运行时依赖的终极方案

VisualCppRedist AIO:一站式解决Windows C运行时依赖的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个开源项目&…

2026/10/16 9:51:59 阅读更多 →
CreuSAT开发者教程:用Rust实现高效验证的SAT求解算法

CreuSAT开发者教程:用Rust实现高效验证的SAT求解算法

CreuSAT开发者教程:用Rust实现高效验证的SAT求解算法 【免费下载链接】CreuSAT CreuSAT - A formally verified SAT solver written in Rust and verified with Creusot. 项目地址: https://gitcode.com/gh_mirrors/cr/CreuSAT CreuSAT是一个用Rust编写并通过…

2026/10/15 14:24:25 阅读更多 →

最新新闻

能量项链问题精讲:区间DP入门与破环成链的完整推导

能量项链问题精讲:区间DP入门与破环成链的完整推导

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:47 阅读更多 →
Java程序员的GPU并行编程入门:Aparapi实战指南

Java程序员的GPU并行编程入门:Aparapi实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:47 阅读更多 →
CoAP Java 服务端开源实战:把物联网调试服务器搬进 Android 手机

CoAP Java 服务端开源实战:把物联网调试服务器搬进 Android 手机

简介:CoAPService 是一套基于 Java 实现 CoAP 协议的开源源码工程,适合物联网开发、嵌入式通信及 Android 服务端开发者使用。工程按模块拆分:app 目录对应 Android 服务器端,coaplib 目录包含 Java 服务器代码与 Java 客户端测试…

2026/10/17 9:51:47 阅读更多 →
journalctl结构化日志原理与实战:从systemd日志中枢到故障精准定位

journalctl结构化日志原理与实战:从systemd日志中枢到故障精准定位

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:47 阅读更多 →
IMU标定与Allan方差:VIO系统中噪声参数的全链路解析

IMU标定与Allan方差:VIO系统中噪声参数的全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:47 阅读更多 →
红帽系统密码管理实战:root密码重置、普通用户改密与登录排错

红帽系统密码管理实战:root密码重置、普通用户改密与登录排错

接手一台英文版红帽系统的服务器,第一件事往往不是看业务,而是确认各种密码能不能用。新员工入职、老员工离职、合同交接、密码过期,甚至只是某次手滑把密码改错了,都逃不过"修改红帽系统root密码和普通密码"这一步。这…

2026/10/17 9:50:46 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →