nRF54H20 + Zephyr 开发环境(二):烧录与踩坑实录

上一篇已经完成了开发环境搭建 nrf54H20 + zephyr 之 开发环境搭建全流程(附踩坑实录) ,这一篇重点记录 nRF54H20 烧录过程 + 实际踩坑总结

说实话,这一轮下来,作为"老嵌入式",居然在烧录环节卡住,确实有点离谱 😂。


上一篇已经安装完成,这里简单验证:

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相关的实战坑~

相关推荐
玩转单片机与嵌入式5 小时前
一个成熟的嵌入式AI系统,是长什么样子的?
人工智能·单片机·嵌入式硬件·嵌入式ai
Wave8458 小时前
从单片机开发看透网络底层:Wi-Fi、TCP/IP 与 HTTP 的通俗解析
网络·单片机·tcp/ip
玩转单片机与嵌入式9 小时前
不会 Python、不会深度学习,也能在STM32上跑AI模型吗?
人工智能·单片机·嵌入式硬件·嵌入式ai
jghhh0111 小时前
基于STM32的桌面Mini时钟设计
stm32·单片机·嵌入式硬件
电化学仪器白超11 小时前
小乌龟Git全程图形化操作指南:嵌入式本地版本管理与Gitee私有云备份实战
git·python·单片机·嵌入式硬件·物联网·gitee·自动化
yong999013 小时前
基于STM32 Nucleo板的彩色LED照明灯设计(纯CubeMX开发)
stm32·单片机·嵌入式硬件
独小乐13 小时前
019.ADC转换和子中断|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·mcu·arm
lingzhilab13 小时前
零知派——STM32驱动INA219电流功率监测计实现高精度电源管理
stm32·单片机·嵌入式硬件
QH1392923188016 小时前
KEYSIGHT N9030B PXA信号/频谱分析仪
科技·嵌入式硬件·集成测试
Shang1809893572617 小时前
T31ZX 君正/INGENIC智能视频处理器T31ZX可提供软硬件资料T31Z采用先进的低功耗设计
嵌入式硬件·fpga开发·音视频·t31zx智能视频处理器