上一篇已经完成了开发环境搭建 nrf54H20 + zephyr 之 开发环境搭建全流程(附踩坑实录) ,这一篇重点记录 nRF54H20 烧录过程 + 实际踩坑总结。
说实话,这一轮下来,作为"老嵌入式",居然在烧录环节卡住,确实有点离谱 😂。
1. 确认 J-Link 驱动
上一篇已经安装完成,这里简单验证:
bash
JLinkExe
输出示例:
bash
SEGGER J-Link Commander V8.18
DLL version V8.18
2. 连接开发板
操作:
- 使用 Type-C USB 连接开发板 Debugger 口
- 拨动开关到 ON
- 在 Windows 中将 J-Link 映射到 WSL(具体方法自行查)
检查设备:
bash
lsusb
示例输出:xxxx是你的jlink usb PID
bash
Bus 001 Device 002: ID xxxx:1059 SEGGER J-Link
3. 安装 nrf-udev
bash
git clone https://github.com/NordicSemiconductor/nrf-udev.git
cd nrf-udev
dpkg-deb -b nrf-udev_1.0.1-all
sudo dpkg -i nrf-udev_1.0.1-all.deb
4. 配置 udev 权限
编辑规则文件:
bash
sudo nano /etc/udev/rules.d/99-jlink.rules
添加内容:xxxx是你的jlink usb PID
bash
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
刷新规则:
bash
sudo udevadm control --reload-rules
sudo udevadm trigger
5. 安装 nrfutil device
bash
nrfutil install device=2.7.16 --force
检查设备:
bash
nrfutil device list
示例输出:xxxxxxxxxx是你的jlink SN,记下来,后续的很多命令都需要用到
bash
xxxxxxxxxx
product J-Link
board version PCA10175
ports /dev/ttyACM0, vcom: 0
/dev/ttyACM1, vcom: 1
traits boardController, devkit, jlink, seggerUsb, serialPorts, usb
Found 1 supported device(s)
6. 烧录 BICR
bash
nrfutil device program \
--options chip_erase_mode=ERASE_NONE \
--firmware ./env/bicr.hex \
--core Application \
--serial-number xxxxxxxxxx
输出:
bash
Programmed
7. 烧录 SoC binaries(踩坑点 ⚠️)
bash
nrfutil device x-provision-nrf54h \
--firmware ./env/nrf54h20_soc_binaries_v0.9.6.zip \
--serial-number xxxxxxxxxx
报错:
bash
SDFW programming is supported only for devices in lifecycle state EMPTY
Your device is in lifecycle state LIFECYCLE_ROT (0x2000)
❗原因
设备 已经烧录过,生命周期状态不是 EMPTY。
8. 尝试修改生命周期(失败案例)
bash
nrfutil device x-adac-lcs-change --life-cycle rot --serial-number xxxxxxxxxx
报错:
bash
ADAC_UNSUPPORTED (0x0003)
❗说明
- 当前状态已经是 ROT
- 不支持重复修改
👉 这一步其实不需要做
9. 复位设备
bash
nrfutil device reset --reset-kind RESET_PIN --serial-number xxxxxxxxxx
10. 查看生命周期状态
bash
nrfutil device x-adac-discovery
关键输出:
bash
psa_lifecycle LIFECYCLE_ROT (0x2000)
👉 状态正确
11. 查看 SDFW 版本
bash
nrfutil device x-sdfw-version-get \
--firmware-slot uslot \
--serial-number xxxxxxxxxx
输出:
bash
sdfw_version 10.3.3+0
12. 使用 west 烧录 Zephyr 工程
bash
west flash
关键输出:
bash
Board with serial number xxxxxxxxxx flashed successfully.
👉 烧录成功 ✅
总结(重点避坑)
1️⃣ SoC binaries 只能在 EMPTY 状态烧录
一旦设备进入:
text
LIFECYCLE_ROT (0x2000)
就无法再次执行:
bash
x-provision-nrf54h
2️⃣ LCS 修改不是随便能改
- 已经是 ROT → 不需要改
- 强行改 → 报 ADAC_UNSUPPORTED
3️⃣ 正确流程(建议)
text
全新芯片:
→ 烧 soc binaries
→ 烧 bicr
→ west flash
已经烧过:
→ 直接 west flash
结尾
这一轮最大的问题其实不是技术难点,而是:
👉 官方流程对"芯片状态"的依赖非常强,但文档不够直观
导致很容易在 lifecycle 上反复踩坑。
如果你也卡在:
- provision 失败
- lifecycle 错误
可以优先确认:
👉 你的芯片是不是已经不是 EMPTY 状态了
nrf54H20还在不断的更新,开发环境中需要的各个软件的版本都是由强耦合性的,最后是照官方的说明来做,不然很容易入坑
作者介绍
我是 嵌入式老菜鸟,只分享踩过的坑
欢迎关注,后续持续更新 nrf54H20和zephyr相关的实战坑~