从 PlatformIO 编程 NRF52840 加密狗
Programming NRF52840 dongle from PlatformIO
我正在关注 https://docs.platformio.org/en/latest/boards/nordicnrf52/nrf52840_dk.html 但我实际上没有 DK,我有一个 NRF52840 "Dongle"。有人知道它是否可以直接与 PlatformIO 一起使用吗?它有一个内置的引导加载程序,但我不认为它模拟了正确的程序员类型。我安装了 nrfutil,但它需要一个包 (.zip) 并且 platformio 正在生成 .elf/.hex ... 不确定如何连接这些工具。
您可以使用nrfutil pkg generate
将十六进制文件转换成一个包:
https://infocenter.nordicsemi.com/topic/ug_nrfutil/UG/nrfutil/nrfutil_pkg.html
仅供参考,您可能不会从使用 PlatformIO 中获得太多好处,因为您没有调试界面。根据您使用的框架,可能还有其他选项,例如 Zephyr 的文档:
https://docs.zephyrproject.org/latest/boards/arm/nrf52840dongle_nrf52840/doc/index.html
platformio.ini
配置:
[env:nrf52840_dongle]
platform = nordicnrf52
board = nrf52840_dk
framework = zephyr
board_build.zephyr.variant = nrf52840dongle_nrf52840
extra_scripts = dfu_upload.py
upload_protocol = custom
添加到项目根目录dfu_upload.py
脚本:
import sys
import os
from os.path import basename
Import("env")
platform = env.PioPlatform()
def dfu_upload(source, target, env):
firmware_path = str(source[0])
firmware_name = basename(firmware_path)
genpkg = "".join(["nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application ", firmware_path, " --application-version 1 firmware.zip"])
dfupkg = "nrfutil dfu serial -pkg firmware.zip -p COM14 -b 115200"
print( genpkg )
os.system( genpkg )
os.system( dfupkg )
print("Uploading done.")
# Custom upload command and program name
env.Replace(PROGNAME="firmware", UPLOADCMD=dfu_upload)
- 将 nrfutil 位置添加到您的系统配置“路径”变量
- 在上传固件之前将加密狗切换到 dfu 模式(按钮重置)
- 在行中设置加密狗 COM 编号:
dfupkg = "nrfutil dfu serial -pkg firmware.zip -p COM14 -b 115200"
in dfu_upload.py
您可以在此处找到大量示例:Zephyr github
我正在关注 https://docs.platformio.org/en/latest/boards/nordicnrf52/nrf52840_dk.html 但我实际上没有 DK,我有一个 NRF52840 "Dongle"。有人知道它是否可以直接与 PlatformIO 一起使用吗?它有一个内置的引导加载程序,但我不认为它模拟了正确的程序员类型。我安装了 nrfutil,但它需要一个包 (.zip) 并且 platformio 正在生成 .elf/.hex ... 不确定如何连接这些工具。
您可以使用nrfutil pkg generate
将十六进制文件转换成一个包:
https://infocenter.nordicsemi.com/topic/ug_nrfutil/UG/nrfutil/nrfutil_pkg.html
仅供参考,您可能不会从使用 PlatformIO 中获得太多好处,因为您没有调试界面。根据您使用的框架,可能还有其他选项,例如 Zephyr 的文档:
https://docs.zephyrproject.org/latest/boards/arm/nrf52840dongle_nrf52840/doc/index.html
platformio.ini
配置:
[env:nrf52840_dongle]
platform = nordicnrf52
board = nrf52840_dk
framework = zephyr
board_build.zephyr.variant = nrf52840dongle_nrf52840
extra_scripts = dfu_upload.py
upload_protocol = custom
添加到项目根目录dfu_upload.py
脚本:
import sys
import os
from os.path import basename
Import("env")
platform = env.PioPlatform()
def dfu_upload(source, target, env):
firmware_path = str(source[0])
firmware_name = basename(firmware_path)
genpkg = "".join(["nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application ", firmware_path, " --application-version 1 firmware.zip"])
dfupkg = "nrfutil dfu serial -pkg firmware.zip -p COM14 -b 115200"
print( genpkg )
os.system( genpkg )
os.system( dfupkg )
print("Uploading done.")
# Custom upload command and program name
env.Replace(PROGNAME="firmware", UPLOADCMD=dfu_upload)
- 将 nrfutil 位置添加到您的系统配置“路径”变量
- 在上传固件之前将加密狗切换到 dfu 模式(按钮重置)
- 在行中设置加密狗 COM 编号:
dfupkg = "nrfutil dfu serial -pkg firmware.zip -p COM14 -b 115200"
in dfu_upload.py
您可以在此处找到大量示例:Zephyr github