2. 搭建SEGGER自动化测试环境

自动化测试环境是后续所有脚本、流水线和回归用例的物理与软件基础。SEGGER工具链并非单一程序,而是由J-Link软件包、Ozone、Embedded Studio、Flasher等多个组件构成,它们各自承担调试探针驱动、图形化调试、编译构建、离线烧录等不同职责。本节的目标是:在一台测试主机上把这些组件安装到位,完成许可证、驱动与USB/网络连接配置,并最终用一条可复现的通信链路验证目标板确实“在线”。

一、组件职责与安装顺序

先明确每个组件在自动化测试中的定位,避免装完却不知道用哪个:

  • J-Link软件包:核心中的核心,提供J-Link驱动、DLL(JLinkARM.dll)、命令行工具(JLink.exe/JLinkExe)、J-Flash Lite以及USB驱动。任何脚本化调试、烧录都依赖它。
  • Ozone:SEGGER的独立图形调试器,支持ELF加载、断点、实时变量监视和J-Trace流跟踪。自动化中常用于人工复核脚本执行结果,也可通过脚本接口做半自动调试。
  • Embedded Studio:集成开发环境,含SEGGER编译器、链接器和工程管理。自动化构建阶段用它生成可烧录的ELF/HEX/BIN产物。
  • Flasher:独立烧录器硬件配套软件(Flasher Portable/Compact/ARM),用于产线或无人值守场景的离线烧录,可通过USB或以太网远程触发。

推荐安装顺序为:J-Link软件包 → Embedded Studio → Ozone → Flasher配置工具。原因是Ozone和Embedded Studio在安装时会检测J-Link驱动,先装J-Link可避免重复提示;Flasher的PC端工具依赖J-Link驱动中的USB通信层,放在最后最稳妥。

二、安装J-Link软件包与驱动

从SEGGER官网下载对应平台的J-Link Software and Documentation Pack。Windows下双击安装,注意勾选“Install USB driver”和“Update DLL in system directory”;Linux下使用.deb或.rpm包,安装后需将/opt/SEGGER/JLink加入PATH,并配置udev规则使普通用户可访问探针:

# 以Ubuntu为例
sudo dpkg -i JLink_Linux_V794_x86_64.deb
echo 'export PATH=$PATH:/opt/SEGGER/JLink' >> ~/.bashrc
sudo cp /opt/SEGGER/JLink/99-jlink.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

安装完成后插入J-Link,用lsusb(Linux)或设备管理器(Windows)确认出现“SEGGER J-Link”。随后执行版本自检:

JLinkExe -CommanderScript version.jlink
# version.jlink 内容:
# version
# exit

若输出中包含“J-Link Commander V7.94”及固件版本,说明驱动与DLL已就绪。若提示“Cannot connect to J-Link”,优先检查USB线是否为数据线、是否被虚拟机占用、udev规则是否生效。

三、许可证配置

J-Link本身对多数主流芯片免费,但部分高级功能(如J-Trace流跟踪、部分Cortex-M器件的高速调试)需要许可证。Ozone和Embedded Studio也有商业授权与免费评估之分。许可证通常以.jlicense或序列号形式提供,配置方式为:

  • J-Link:将许可证文件放入%APPDATA%/SEGGER/JLink(Windows)或~/.segger/JLink(Linux),或用JLinkLicenseManager导入。
  • Embedded Studio:在“Help → License Manager”中输入序列号,离线环境可用激活文件。
  • Ozone:首次启动时选择“Activate”,输入与J-Link绑定的授权信息。
自动化测试主机建议使用固定序列号的J-Link探针,并把许可证与探针序列号绑定,避免换机后授权失效导致流水线中断。

四、USB与网络连接配置

J-Link支持USB直连和以太网两种接入方式。USB方式即插即用,适合单工位;网络方式适合多目标板并行测试或远程机架。网络配置步骤:

  1. 用USB连接J-Link,打开J-Link Configurator,选中探针。
  2. 在“Network”页设置静态IP、子网掩码、网关,例如192.168.10.51/24。
  3. 点击“Apply”,探针重启后即可拔掉USB,改用网线供电(部分型号支持PoE或外部供电)。
  4. 用ping 192.168.10.51确认连通,再用JLinkExe -IP 192.168.10.51连接。

网络模式下,脚本中所有J-Link命令都要加-IP参数,这是后续自动化脚本需要统一封装的差异点。

五、验证目标板通信链路

安装与配置完成后,必须用一条最小链路验证“主机→探针→目标板”全通。以一颗Cortex-M4目标板为例,编写如下J-Link Commander脚本:

si SWD          // 选择SWD接口
speed 4000      // 4 MHz
connect         // 连接目标
mem32 0xE000ED00 4   // 读取CPUID寄存器
regs            // 读取内核寄存器
exit

预期输出中,CPUID应返回0x410FC241(Cortex-M4的典型值,具体以芯片手册为准),寄存器列表能正常打印PC、SP等。若连接失败,按以下顺序排查:目标板是否上电、SWDIO/SWCLK是否接反、复位引脚是否被拉低、接口速率是否过高(可降到1000 kHz重试)。

下面这张图把本节的环境搭建关系与验证链路集中呈现,便于对照检查每个环节是否到位。

SEGGER自动化测试环境搭建与链路验证 测试主机(PC) J-Link 软件包 / DLL / 驱动 Embedded Studio(构建) Ozone(图形调试) 许可证 / 序列号绑定 J-Link 探针 USB 直连 / 以太网 SWD / JTAG 接口 目标板(Cortex-M4) SWDIO / SWCLK / GND / VTref CPUID @ 0xE000ED00 供电 / 复位状态 USB/网口 SWD 通信链路验证流程与判据 ① 选择接口 si SWD ② 设置速率 speed 4000 ③ 连接目标 connect ④ 读寄存器 mem32 / regs ⑤ 判定 CPUID 正确 连接失败排查顺序 目标板供电 → SWDIO/SWCLK 接线 → 复位电平 → 降低接口速率重试

六、环境自检清单

在进入脚本编写前,建议逐项确认以下状态,任何一项不通过都会在后续自动化中放大为难以定位的故障:

检查项命令/操作通过判据
J-Link驱动JLinkExe -CommanderScript version.jlink打印版本号与固件版本
探针识别设备管理器 / lsusb出现 SEGGER J-Link 设备
许可证JLinkLicenseManager 查看所需功能显示已授权
网络探针ping 192.168.10.51丢包率为 0
目标板连接connect + mem32 0xE000ED00 4CPUID 与芯片手册一致
构建产物Embedded Studio 编译示例工程生成 .elf / .hex 文件