Nordic nRF5 SDK DFU升级步骤
- 编译micro-ecc库
- 生成私钥与公钥
- 编译bootloader与application
- 生成settings文件
- 合并settings文件Bootloader Application 和Softdevice
- 生成dfu升级包及bin文件
- 烧录合并后的固件
- BLE/UART/USB升级测试
Nordic nRF5 SDK DFU需要配置的参数有
- 生成升级包时的Softdevice ID 芯片系列
- DFU时固件Bootloader Application的版本信息
- DFU升级时的串口端口和和波特率
Nordic nRF5 SDK DFU升级的触发方式
- 按键触发
- pinreset复位触发
- 寄存器GPREGRET触发
DFU升级脚本参数配置及功能说明
此脚本主要用于配置和执行Nordic半导体的nRF系列芯片的DFU(Device Firmware Update)升级操作。脚本的功能包括检查DFU环境配置、创建DFU密钥、创建通过BLE、UART和USB进行DFU的固件与升级包等。
需要配置的参数
- 芯片型号
- 参数:
IC_TYPE
- 可选值:
nRF52832
,nRF52833
,nRF52832-QFAB
,nRF52820
,nRF52810
,nRF52811
,nRF52805
,nRF52840
- 示例:
SET "IC_TYPE=nRF52840"
- 参数:
- 现有固件和新固件的SoftDevice版本号
- 参数:
DFU_SD
,NEW_DFU_SD
- 示例:
SET "DFU_SD=s140_nrf52_7.2.0"
SET "NEW_DFU_SD=s140_nrf52_7.2.0"
- 参数:
- DFU固件版本信息
- 参数:
HEX_VERSION_ST
,HEX_VERSION_APP
,HEX_VERSION_BL
- 说明:
HEX_VERSION_ST
值默认为2,不要修改 - 示例:
SET "HEX_VERSION_ST=2"
SET "HEX_VERSION_APP=3"
SET "HEX_VERSION_BL=3"
- 参数:
- 用户烧录芯片时的Jlink序列号
- 参数:
USER_JLINK_SNR
- 示例:
SET "USER_JLINK_SNR="
- 参数:
- BLE/UART/USB测试DFU升级参数
- 参数:
BLE_DONGLE_JLINK_SNR
,BLE_DONGLE_COM_PORT
,UART_COM_BAUD
,UART_COM_PORT
,USB_COM_BAUD
,USB_COM_PORT
- 示例:
SET "BLE_DONGLE_JLINK_SNR="
SET "BLE_DONGLE_COM_PORT=COM29"
SET "UART_COM_BAUD=115200"
SET "UART_COM_PORT=COM10"
SET "USB_COM_BAUD=115200"
SET "USB_COM_PORT=COM25"
- 参数:
- DFU设备的蓝牙名称和MAC地址
- 参数:
IC_NAME
,IC_MAC
- 示例:
SET "IC_NAME=Nordic_Buttonless"
SET "IC_MAC=C5:FB:5F:EC:FC:17"
- 参数:
- 修改项目配置
- 参数:
CONFIG_DEFAULT_PROJECT
- 示例:
SET "CONFIG_DEFAULT_PROJECT=Y"
- 参数:
- 用户自定义DFU工程路径
- 参数:
PROJECT_PATH_APPLICATION
,PROJECT_PATH_BOOTLOADER_BLE
,PROJECT_PATH_BOOTLOADER_UART
,PROJECT_PATH_BOOTLOADER_USB
- 说明: 当
CONFIG_DEFAULT_PROJECT
为N
时需配置 - 示例:
SET "PROJECT_PATH_APPLICATION="
SET "PROJECT_PATH_BOOTLOADER_BLE="
SET "PROJECT_PATH_BOOTLOADER_UART="
SET "PROJECT_PATH_BOOTLOADER_USB="
- 参数:
- 用户自定义DFU固件路径
- 参数:
HEX_PATH_SD
,HEX_PATH_APP
,HEX_PATH_BL_BLE
,HEX_PATH_BL_UART
,HEX_PATH_BL_USB
- 说明: 当
CONFIG_DEFAULT_PROJECT
为N
时需配置 - 示例:
SET "HEX_PATH_SD="
SET "HEX_PATH_APP="
SET "HEX_PATH_BL_BLE="
SET "HEX_PATH_BL_UART="
SET "HEX_PATH_BL_USB="
- 参数:
脚本功能
- 第一步:检查DFU环境配置
- 检查nrfutil配置
- 检查nrfjprog配置
- 检查arm-none-eabi-gcc
- 检查make配置
- 检查用户配置的参数
- 查看帮助文档
- 安装nRF5 SDK nRF52805补丁
- 第二步:创建DFU私钥与公钥
- 创建DFU私钥dfu_private_key.pem和DFU公钥dfu_public_key.c
- 用创建的DFU公钥dfu_public_key.c替换DFU目录的DFU公钥
- 第三步:创建通过BLE进行DFU的固件与升级包
- 编译BLE Bootloader工程
- 编译Application工程
- 复制BL_BLE.hex SD.hex APP.hex到当前目录
- 合并DFU固件为MERGED_BLE.hex生成DFU升级包*.zip
- 生成DFU升级文件*.bin给MCU上位机用
- 烧录MERGED_BLE.hex固件
- 使用Dongle通过BLE name升级APP.zip
- 使用Dongle通过BLE mac升级APP.zip
- 第四步:创建通过UART进行DFU的固件与升级包
- 编译UART Bootloader工程
- 编译Application工程
- 复制BL_UART.hex SD.hex APP.hex到当前目录
- 合并DFU固件为MERGED_UART.hex生成DFU升级包*.zip
- 生成DFU升级文件*.bin给MCU上位机用
- 烧录MERGED_UART.hex固件
- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_GPREGRET=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)
- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)
- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_BUTTON=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)
- 第五步:创建通过USB进行DFU的固件与升级包
- 当
IC_TYPE
为nRF52840
,nRF52833
或nRF52820
时才执行 - 编译USB Bootloader工程
- 编译Application工程
- 复制BL_USB.hex SD.hex APP.hex到当前目录
- 合并DFU固件为MERGED_USB.hex生成DFU升级包*.zip
- 生成DFU升级文件*.bin给MCU上位机用
- 烧录MERGED_USB.hex固件
- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_GPREGRET=1)
- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1)
- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_BUTTON=1)
- 当
Nordic nRF5 SDK DFU脚本内容
- 云盘下载:链接
@setlocal enabledelayedexpansion
@echo off
:prompt
@echo off
echo ===========================================================
echo 用户需要配置的参数
echo ===========================================================
REM 设置芯片型号
REM 可选项:[nRF52832|nRF52833|nRF52832-QFAB|nRF52820|nRF52810|nRF52811|nRF52805|nRF52840]
SET "IC_TYPE=nRF52840"
REM 设置现有固件和新固件的SoftDevice版本号
REM 版本号从SoftDevice固件路径获取
SET "DFU_SD=s140_nrf52_7.2.0"
SET "NEW_DFU_SD=s140_nrf52_7.2.0"
REM 设置DFU固件版本信息
REM HEX_VERSION_ST值默认为2,不要修改。
SET "HEX_VERSION_ST=2"
SET "HEX_VERSION_APP=3"
SET "HEX_VERSION_BL=3"
REM 设置用户烧录芯片时的Jlink序列号
REM SET "USER_JLINK_SNR=1050227850"
SET "USER_JLINK_SNR="
REM 在Windows上使用BLE/UART/USB测试DFU升级需配置下述参数
REM 配置DK[nRF52820 nRF52833 nRF52840]做Dongle时的Jlink序列号,非DK做Dongle(正常Dongle)则序列号留空。
REM SET "BLE_DONGLE_JLINK_SNR=682774303"
SET "BLE_DONGLE_JLINK_SNR="
SET "BLE_DONGLE_COM_PORT=COM29"
SET "UART_COM_BAUD=115200"
SET "UART_COM_PORT=COM10"
SET "USB_COM_BAUD=115200"
SET "USB_COM_PORT=COM25"
REM 需要进行DFU的设备的蓝牙名称和MAC地址
SET "IC_NAME=Nordic_Buttonless"
SET "IC_MAC=C5:FB:5F:EC:FC:17"
REM 修改CONFIG_DEFAULT_PROJECT设置为N可使脚本作用于用户自己的DFU工程:BLE/UART/USB Bootloader和Application
SET "CONFIG_DEFAULT_PROJECT=Y"
REM 判断芯片是否带USB功能,用于屏蔽部分没有USB功能的芯片指令
if "!IC_TYPE!"=="nRF52840" (
SET "USB_MATCH=TRUE"
) else if "!IC_TYPE!"=="nRF52833" (
SET "USB_MATCH=TRUE"
) else if "!IC_TYPE!"=="nRF52820" (
SET "USB_MATCH=TRUE"
) else (
SET "USB_MATCH=FALSE"
)
if "!CONFIG_DEFAULT_PROJECT!"=="N" (
echo 设置用户自己的DFU工程路径,可参考默认DFU工程路径
SET "PROJECT_PATH_APPLICATION="
SET "PROJECT_PATH_BOOTLOADER_BLE="
SET "PROJECT_PATH_BOOTLOADER_UART="
REM 当使用下述芯片时需设置USB Bootloader工程路径:nRF52840 nRF52833 nRF52820
if "!USB_MATCH!"=="TRUE" (
SET "PROJECT_PATH_BOOTLOADER_USB="
)
echo 设置用户自己的DFU固件路径,可参考默认DFU固件路径
SET "HEX_PATH_SD="
SET "HEX_PATH_APP="
SET "HEX_PATH_BL_BLE="
SET "HEX_PATH_BL_UART="
REM 当使用下述芯片时需设置USB Bootloader固件路径:nRF52840 nRF52833 nRF52820
if "!USB_MATCH!"=="TRUE" (
SET "HEX_PATH_BL_USB="
)
)
echo ===========================================================
echo 参数配置完毕
echo ===========================================================
REM 配置用户烧录芯片时的Jlink序列号
if not "!USER_JLINK_SNR!"=="" (
SET "USER_JLINK_SNR=--snr !USER_JLINK_SNR!"
)
REM 配置DK Dongle Jlink序列号
if not "!BLE_DONGLE_JLINK_SNR!"=="" (
SET "DONGLE_PROG_JLINK_SNR=--snr !BLE_DONGLE_JLINK_SNR!"
SET "DONGLE_DFU_JLINK_SNR=-snr !BLE_DONGLE_JLINK_SNR!"
) else (
SET "DONGLE_PROG_JLINK_SNR="
SET "DONGLE_DFU_JLINK_SNR="
)
echo 用户烧录芯片时的Jlink序列号为:!USER_JLINK_SNR!
echo 配置DK做Dongle时的DK Dongle Jlink序列号为:!BLE_DONGLE_JLINK_SNR!
echo BLE Dongle串口端口号设置为:!BLE_DONGLE_COM_PORT!
echo UART串口波特率设置为:!UART_COM_BAUD!
echo UART串口端口号设置为:!UART_COM_PORT!
echo USB串口波特率设置为:!USB_COM_BAUD!
echo USB串口端口号设置为:!USB_COM_PORT!
echo 需要进行DFU的设备的蓝牙名称设置为:!IC_NAME!
echo 需要进行DFU的设备的MAC地址设置为:!IC_MAC!
echo ===========================================================
REM DFU默认工程路径配置
if "!CONFIG_DEFAULT_PROJECT!"=="Y" (
echo "使用默认DFU工程"
if "!IC_TYPE!"=="nRF52840" (
REM "设置DFU工程路径"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056\s140\arm5_no_packs\ble_app_buttonless_dfu_pca10056_s140.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10056_s140_ble\arm5_no_packs\secure_bootloader_ble_s140_pca10056.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10056_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10056.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_USB=..\examples\dfu\secure_bootloader\pca10056_usb\arm5_no_packs\secure_bootloader_usb_mbr_pca10056.uvprojx"
REM "设置DFU工程固件路径"
SET "HEX_PATH_SD=..\components\softdevice\s140\hex\s140_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056\s140\arm5_no_packs\_build\nrf52840_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10056_s140_ble\arm5_no_packs\_build\nrf52840_xxaa_s140.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10056_uart\arm5_no_packs\_build\nrf52840_xxaa_mbr.hex"
SET "HEX_PATH_BL_USB=..\examples\dfu\secure_bootloader\pca10056_usb\arm5_no_packs\_build\nrf52840_xxaa.hex"
) else if "!IC_TYPE!"=="nRF52833" (
REM "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10100\s140\arm5_no_packs\ble_app_buttonless_dfu_pca10100_s140.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10100_s140_ble\arm5_no_packs\secure_bootloader_ble_s140_pca10100.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10100_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10100.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_USB=..\examples\dfu\secure_bootloader\pca10100_usb\arm5_no_packs\secure_bootloader_usb_mbr_pca10100.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s140\hex\s140_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10100\s140\arm5_no_packs\_build\nrf52833_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10100_s140_ble\arm5_no_packs\_build\nrf52833_xxaa_s140.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10100_uart\arm5_no_packs\_build\nrf52833_xxaa_mbr.hex"
SET "HEX_PATH_BL_USB=..\examples\dfu\secure_bootloader\pca10100_usb\arm5_no_packs\_build\nrf52833_xxaa.hex"
) else if "!IC_TYPE!"=="nRF52820" (
REM "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10100e\s112\arm5_no_packs\ble_app_buttonless_dfu_pca10100e_s112.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10100e_s112_ble\arm5_no_packs\secure_bootloader_ble_s112_pca10100e.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10100e_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10100e.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_USB=..\examples\dfu\secure_bootloader\pca10100e_usb\arm5_no_packs\secure_bootloader_usb_mbr_pca10100e.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10100e\s112\arm5_no_packs\_build\nrf52820_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10100e_s112_ble\arm5_no_packs\_build\nrf52820_xxaa_s112.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10100e_uart\arm5_no_packs\_build\nrf52820_xxaa_mbr.hex"
SET "HEX_PATH_BL_USB=..\examples\dfu\secure_bootloader\pca10100e_usb\arm5_no_packs\_build\nrf52820_xxaa.hex"
) else if "!IC_TYPE!"=="nRF52832" (
REM "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs\ble_app_buttonless_dfu_pca10040_s132.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10040_s132_ble\arm5_no_packs\secure_bootloader_ble_s132_pca10040.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10040_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10040.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s132\hex\s132_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs\_build\nrf52832_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10040_s132_ble\arm5_no_packs\_build\nrf52832_xxaa_s132.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10040_uart\arm5_no_packs\_build\nrf52832_xxaa_mbr.hex"
) else if "!IC_TYPE!"=="nRF52811" (
echo "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056e\s112\arm5_no_packs\ble_app_buttonless_dfu_pca10056e_s112.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10056e_s112_ble\arm5_no_packs\secure_bootloader_ble_s112_pca10056e.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10056e_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10056e.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056e\s112\arm5_no_packs\_build\nrf52811_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10056e_s112_ble\arm5_no_packs\_build\nrf52811_xxaa_s112.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10056e_uart\arm5_no_packs\_build\nrf52811_xxaa_mbr.hex"
) else if "!IC_TYPE!"=="nRF52810" (
REM "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040e\s112\arm5_no_packs\ble_app_buttonless_dfu_pca10040e_s112.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs\secure_bootloader_ble_s112_pca10040e.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10040e_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10040e.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040e\s112\arm5_no_packs\_build\nrf52810_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs\_build\nrf52810_xxaa_s112.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10040e_uart\arm5_no_packs\_build\nrf52810_xxaa_mbr.hex"
) else if "!IC_TYPE!"=="nRF52805" (
REM "DFU工程路径设置"
SET "PROJECT_PATH_APPLICATION=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040e_nrf52805\s112\arm5_no_packs\ble_app_buttonless_dfu_pca10040e_nrf52805_s112.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_BLE=..\examples\dfu\secure_bootloader\pca10040e_nrf52805_s112_ble\arm5_no_packs\secure_bootloader_ble_s112_pca10040e_nrf52805.uvprojx"
SET "PROJECT_PATH_BOOTLOADER_UART=..\examples\dfu\secure_bootloader\pca10040e_nrf52805_uart\arm5_no_packs\secure_bootloader_uart_mbr_pca10040e_nrf52805.uvprojx"
REM "DFU工程编译后固件路径设置"
SET "HEX_PATH_SD=..\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex"
SET "HEX_PATH_APP=..\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040e_nrf52805\s112\arm5_no_packs\_build\nrf52805_xxaa.hex"
SET "HEX_PATH_BL_BLE=..\examples\dfu\secure_bootloader\pca10040e_nrf52805_s112_ble\arm5_no_packs\_build\nrf52805_xxaa_s112.hex"
SET "HEX_PATH_BL_UART=..\examples\dfu\secure_bootloader\pca10040e_nrf52805_uart\arm5_no_packs\_build\nrf52805_xxaa_mbr.hex"
) else (
echo 不支持的芯片型号:!IC_TYPE!
)
) else (
echo 当前使用用户自己的DFU工程
)
echo ===========================================================
SET "PRO_IC_FAMILY=NRF52"
echo "设置烧录时芯片系列为:!PRO_IC_FAMILY! 可选项为:[NRF51|NRF52|NRF53|NRF91]"
SET "PKG_HW_FAMILY=52"
echo "设置生成DFU包时芯片系列为:!PKG_HW_FAMILY! 可选项为:[51|52]"
IF "!IC_TYPE!"=="nRF52832" SET "ST_IC_FAMILY=NRF52"
IF "!IC_TYPE!"=="nRF52833" SET "ST_IC_FAMILY=NRF52"
IF "!IC_TYPE!"=="nRF52832-QFAB" SET "ST_IC_FAMILY=NRF52QFAB"
IF "!IC_TYPE!"=="nRF52820" SET "ST_IC_FAMILY=NRF52QFAB"
IF "!IC_TYPE!"=="nRF52810" SET "ST_IC_FAMILY=NRF52810"
IF "!IC_TYPE!"=="nRF52811" SET "ST_IC_FAMILY=NRF52810"
IF "!IC_TYPE!"=="nRF52805" SET "ST_IC_FAMILY=NRF52810"
IF "!IC_TYPE!"=="nRF52840" SET "ST_IC_FAMILY=NRF52840"
echo "设置生成DFU Settings文件时芯片系列为:!ST_IC_FAMILY! 可选项为:[NRF51|NRF52|NRF52QFAB|NRF52810|NRF52840]"
echo ===========================================================
REM 初始化PKG_VERSION_SD_ID
SET "PKG_VERSION_SD_ID="
SET "PKG_VERSION_SD_REQ="
REM 定义软件设备版本号与ID的数组
set "SD_VERSION[s112_nrf52_6.0.0]=0xA7"
set "SD_VERSION[s112_nrf52_6.1.0]=0xB0"
set "SD_VERSION[s112_nrf52_6.1.1]=0xB8"
set "SD_VERSION[s112_nrf52_7.0.0]=0xC4"
set "SD_VERSION[s112_nrf52_7.0.1]=0xCD"
set "SD_VERSION[s112_nrf52_7.2.0]=0x103"
set "SD_VERSION[s112_nrf52_7.3.0]=0x126"
set "SD_VERSION[s113_nrf52_7.0.0]=0xC3"
set "SD_VERSION[s113_nrf52_7.0.1]=0xCC"
set "SD_VERSION[s113_nrf52_7.2.0]=0x102"
set "SD_VERSION[s113_nrf52_7.3.0]=0x125"
set "SD_VERSION[s122_nrf52_8.0.0]=0xEA"
set "SD_VERSION[s122_nrf52_8.1.1]=0x112"
set "SD_VERSION[s130_nrf51_1.0.0]=0x67"
set "SD_VERSION[s130_nrf51_2.0.0]=0x80"
set "SD_VERSION[s130_nrf51_2.0.1]=0x87"
set "SD_VERSION[s132_nrf52_2.0.0]=0x81"
set "SD_VERSION[s132_nrf52_2.0.1]=0x88"
set "SD_VERSION[s132_nrf52_3.0.0]=0x8C"
set "SD_VERSION[s132_nrf52_3.1.0]=0x91"
set "SD_VERSION[s132_nrf52_4.0.0]=0x95"
set "SD_VERSION[s132_nrf52_4.0.2]=0x98"
set "SD_VERSION[s132_nrf52_4.0.3]=0x99"
set "SD_VERSION[s132_nrf52_4.0.4]=0x9E"
set "SD_VERSION[s132_nrf52_4.0.5]=0x9F"
set "SD_VERSION[s132_nrf52_5.0.0]=0x9D"
set "SD_VERSION[s132_nrf52_5.1.0]=0xA5"
set "SD_VERSION[s132_nrf52_6.0.0]=0xA8"
set "SD_VERSION[s132_nrf52_6.1.0]=0xAF"
set "SD_VERSION[s132_nrf52_6.1.1]=0xB7"
set "SD_VERSION[s132_nrf52_7.0.0]=0xC2"
set "SD_VERSION[s132_nrf52_7.0.1]=0xCB"
set "SD_VERSION[s132_nrf52_7.2.0]=0x101"
set "SD_VERSION[s132_nrf52_7.3.0]=0x124"
set "SD_VERSION[s140_nrf52_6.0.0]=0xA9"
set "SD_VERSION[s140_nrf52_6.1.0]=0xAE"
set "SD_VERSION[s140_nrf52_6.1.1]=0xB6"
set "SD_VERSION[s140_nrf52_7.0.0]=0xC1"
set "SD_VERSION[s140_nrf52_7.0.1]=0xCA"
set "SD_VERSION[s140_nrf52_7.2.0]=0x100"
set "SD_VERSION[s140_nrf52_7.3.0]=0x123"
set "SD_VERSION[s212_nrf52_6.1.1]=0xBC"
set "SD_VERSION[s332_nrf52_6.1.1]=0xBA"
set "SD_VERSION[s340_nrf52_6.1.1]=0xB9"
REM 设置PKG_VERSION_SD_ID
if defined SD_VERSION[%DFU_SD%] (
SET "PKG_VERSION_SD_ID=!SD_VERSION[%DFU_SD%]!"
) else (
echo "错误:不支持的SoftDevice版本n: !DFU_SD!"
exit /b 1
)
REM 设置PKG_VERSION_SD_REQ
if defined SD_VERSION[%NEW_DFU_SD%] (
SET "PKG_VERSION_SD_REQ=!SD_VERSION[%NEW_DFU_SD%]!"
) else (
echo "错误:不支持的SoftDevice版本: !NEW_DFU_SD!"
exit /b 1
)
echo "DFU现有固件SoftDevice ID为:!PKG_VERSION_SD_ID!"
echo "DFU新的固件SoftDevice ID为:!PKG_VERSION_SD_REQ!"
echo ===========================================================
echo "DFU密钥依赖库路径设置"
SET "KEY_BACKUP_TIME=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%"
SET "MICRO_ECC_FOLDER_SOURCE_PATH=.\micro-ecc"
SET "MICRO_ECC_FOLDER_TARGET_PATH=..\external\micro-ecc"
SET "MICRO_ECC_LIB_PATH=..\external\micro-ecc\nrf52hf_keil\armgcc\micro_ecc_lib_nrf52.lib"
SET "PRIVATE_KEY_NAME=dfu_private_key.pem"
SET "PUBLIC_KEY_NAME=dfu_public_key.c"
SET "KEY_BACKUP_DIRECTORY_PATH=.\backup\"
SET "PUBLIC_KEY_PATH=..\examples\dfu\"
echo ===========================================================
echo "HEX固件文件名字解释"
echo "ST为settings文件"
echo "BL为bootloader文件"
echo "SD为softdevice文件"
echo "APP为application文件"
echo "MERGED为settings文件 + bootloader文件 + softdevice文件 + application文件合并后的文件"
echo "HEX固件文件名字定义"
SET "HEX_NAME_BL_BLE=BL_BLE.hex"
SET "HEX_NAME_BL_UART=BL_UART.hex"
SET "HEX_NAME_BL_USB=BL_USB.hex"
SET "HEX_NAME_SD=SD.hex"
SET "HEX_NAME_APP=APP.hex"
SET "HEX_NAME_SD_APP_BL_BLE=SD_APP_BL_BLE.hex"
SET "HEX_NAME_SD_APP_BL_UART=SD_APP_BL_UART.hex"
SET "HEX_NAME_SD_APP_BL_USB=SD_APP_BL_USB.hex"
SET "HEX_NAME_MERGED_BLE=MERGED_BLE.hex"
SET "HEX_NAME_MERGED_UART=MERGED_UART.hex"
SET "HEX_NAME_MERGED_USB=MERGED_USB.hex"
SET "HEX_NAME_SD_APP=SD_APP.hex"
SET "HEX_NAME_ST=ST.hex"
echo ===========================================================
echo "ZIP升级包文件名字定义"
SET "PKG_NAME_BL_BLE=BL_BLE.zip"
SET "PKG_NAME_BL_UART=BL_UART.zip"
SET "PKG_NAME_BL_USB=BL_USB.zip"
SET "PKG_NAME_SOFTDEVICE=SD.zip"
SET "PKG_NAME_APP=APP.zip"
SET "PKG_NAME_BL_BLE_SD=BL_BLE_SD.zip"
SET "PKG_NAME_BL_UART_SD=BL_UART_SD.zip"
SET "PKG_NAME_BL_USB_SD=BL_USB_SD.zip"
SET "PKG_NAME_BL_BLE_SD_APP=BL_BLE_SD_APP.zip"
SET "PKG_NAME_BL_UART_SD_APP=BL_UART_SD_APP.zip"
SET "PKG_NAME_BL_USB_SD_APP=BL_USB_SD_APP.zip"
SET "PKG_NAME_SD_APP=SD_APP.zip"
echo ===========================================================
echo "设置ZIP包转BIN文件python工具路径"
SET "TOOL_PATH_ZIP_TO_BIN=!CD!\micro-ecc\dfu_zip_to_bin.py"
echo "BIN文件名字定义"
SET "BIN_NAME_BL_BLE=BL_BLE.bin"
SET "BIN_NAME_BL_UART=BL_UART.bin"
SET "BIN_NAME_BL_USB=BL_USB.bin"
SET "BIN_NAME_SOFTDEVICE=SD.bin"
SET "BIN_NAME_APP=APP.bin"
SET "BIN_NAME_BL_BLE_SD=BL_BLE_SD.bin"
SET "BIN_NAME_BL_UART_SD=BL_UART_SD.bin"
SET "BIN_NAME_BL_USB_SD=BL_USB_SD.bin"
SET "BIN_NAME_BL_BLE_SD_APP=BL_BLE_SD_APP.bin"
SET "BIN_NAME_BL_UART_SD_APP=BL_UART_SD_APP.bin"
SET "BIN_NAME_BL_USB_SD_APP=BL_USB_SD_APP.bin"
SET "BIN_NAME_SD_APP=SD_APP.bin"
cls
echo ===========================================================
echo "用REM 注释掉cls查看所有配置"
echo "脚本默认放在目录:nRF5_SDK_17.1.0_ddde560_dfu\PMtools\"
echo ===========================================================
echo "nrf-command-line-tools命令行工具"
echo "PMtools DFU命令行工具v0.0.1-Peter"
echo ===========================================================
echo "常用指令 操作"
echo "第一步:检查DFU环境配置"
echo "011 ------------- 检查DFU环境nrfutil配置"
echo "012 ------------- 检查DFU环境nrfjprog配置"
echo "013 ------------- 检查arm-none-eabi-gcc"
echo "014 ------------- 检查DFU环境make配置"
echo "015 ------------- 检查用户配置的参数"
echo "016 ------------- 查看帮助文档"
echo "017 ------------- 安装nRF5 SDK nRF52805补丁"
echo ===========================================================
echo "第二步:创建DFU私钥与公钥"
echo "021 ------------- 创建DFU私钥dfu_private_key.pem和DFU公钥dfu_public_key.c"
echo "022 ------------- 用创建的DFU公钥dfu_public_key.c替换DFU目录的DFU公钥"
echo ===========================================================
echo "第三步:创建通过BLE进行DFU的固件与升级包"
echo "031 ------------- 编译BLE Bootloader工程"
echo "032 ------------- 编译Application工程"
echo "033 ------------- 复制BL_BLE.hex SD.hex APP.hex到当前目录"
echo "034 ------------- 合并DFU固件为MERGED_BLE.hex 生成DFU升级包*.zip"
echo "035 ------------- 生成DFU升级文件*.bin给MCU上位机用"
echo "036 ------------- 烧录MERGED_BLE.hex固件"
echo "037 ------------- 使用Dongle通过BLE name升级APP.zip"
echo "038 ------------- 使用Dongle通过BLE mac升级APP.zip"
echo ===========================================================
echo "第四步:创建通过UART进行DFU的固件与升级包"
echo "041 ------------- 编译UART Bootloader工程"
echo "042 ------------- 编译Application工程"
echo "043 ------------- 复制BL_UART.hex SD.hex APP.hex到当前目录"
echo "044 ------------- 合并DFU固件为MERGED_UART.hex 生成DFU升级包*.zip"
echo "045 ------------- 生成DFU升级文件*.bin给MCU上位机用"
echo "046 ------------- 烧录MERGED_UART.hex固件"
echo "047 ------------- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_GPREGRET=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)"
echo "048 ------------- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)"
echo "049 ------------- 使用UART串口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_BUTTON=1 NRF_DFU_SERIAL_UART_USES_HWFC=0)"
echo ===========================================================
if "!USB_MATCH!"=="TRUE" (
echo "第五步:创建通过USB进行DFU的固件与升级包"
echo "051 ------------- 编译USB Bootloader工程"
echo "052 ------------- 编译Application工程"
echo "053 ------------- 复制BL_USB.hex SD.hex APP.hex到当前目录"
echo "054 ------------- 合并DFU固件为MERGED_USB.hex 生成DFU升级包*.zip"
echo "055 ------------- 生成DFU升级文件*.bin给MCU上位机用"
echo "056 ------------- 烧录MERGED_USB.hex固件"
echo "057 ------------- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_GPREGRET=1)"
echo "058 ------------- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1)"
echo "059 ------------- 使用USB口升级APP.zip(需配置NRF_BL_DFU_ENTER_METHOD_BUTTON=1)"
echo ===========================================================
)
echo "通用指令 操作"
echo "rcv ------------- recover"
echo "rst ------------- debugreset"
echo "e ------------- exit"
echo ===========================================================
set /p "choice=请输入选项(001-059)执行对应的DFU步骤: "
if "!choice!"=="" (
goto prompt
) else if "!choice!"=="011" (
REM 检查 nrfjprog
where nrfjprog >nul 2>nul
if %errorlevel% neq 0 (
echo "1.未安装nRF Command Line Tools或者未配置nrfjprog路径到windows path环境变量(默认路径:C:\Program Files\Nordic Semiconductor\nrf-command-line-tools\bin)"
echo "2.下载链接:https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools/Download?lang=en#infotabs"
) else (
where nrfjprog
where mergehex
nrfjprog -v
)
) else if "!choice!"=="012" (
REM 检查 nrfutil
where nrfutil >nul 2>nul
if %errorlevel% neq 0 (
echo "1.未安装或未配置nrfutil路径到windows path环境变量(默认路径:D:\nRF5 SDK\nRF5_SDK_17.1.0_ddde560_dfu\nrf52840_ok\micro-ecc\nrfutil.exe)"
echo "2.下载链接:https://www.nordicsemi.com/Products/Development-tools/nRF-Util/Download#infotabs"
) else (
where nrfutil
nrfutil -V
)
) else if "!choice!"=="013" (
REM 检查 arm-none-eabi-gcc
where arm-none-eabi-gcc >nul 2>nul
if %errorlevel% neq 0 (
echo "1.未安装GCC: GCC ARM Embedded 9.2020-q2.major"
echo "2.下载链接:https://developer.arm.com/downloads/-/gnu-rm"
) else (
where arm-none-eabi-gcc
arm-none-eabi-gcc --version
)
) else if "!choice!"=="014" (
REM 检查 make
where make >nul 2>nul
if %errorlevel% neq 0 (
echo "1.未安装make,GNU Make 4.3"
echo "2.下载链接:https://udomain.dl.sourceforge.net/project/gnuwin32/sed/4.2.1/sed-4.2.1-setup.exe?viasf=1"
) else (
where make
make -v
)
) else if "!choice!"=="015" (
echo "当前已经连接上的Jlink序列号为:"
nrfjprog --ids
echo "当前脚本当所在前目录为:%~dp0"
echo "DFU的芯片型号设置为:!IC_TYPE!"
echo "老固件softdevice版本号与ID设置为:!DFU_SD! !PKG_VERSION_SD_ID!"
echo "新固件softdevice版本号与ID设置为:!NEW_DFU_SD! !PKG_VERSION_SD_REQ!"
echo "烧录时芯片family系列为:!PRO_IC_FAMILY!"
echo "生成Settings时芯片family为:!ST_IC_FAMILY!"
echo "生成*.zip包时芯片系列为:!PKG_HW_FAMILY!"
echo "APP版本为用户自定义:!HEX_VERSION_APP!"
echo "Bootloader版本为用户自定义:!HEX_VERSION_BL!"
echo "Settings版本为固定值:!HEX_VERSION_ST!"
echo "在windows上使用BLE/UART/USB测试DFU升级需配置下述参数"
echo "用户给自己板子烧录程序用的Jlink序列号设置为:!USER_JLINK_SNR!"
echo "用户给开发板烧录Dongle程序的Jlink序列号设置为:!BLE_DONGLE_JLINK_SNR!"
echo "BLE Dongle串口端口号设置为:!BLE_DONGLE_COM_PORT!"
echo "UART串口波特率设置为:!UART_COM_BAUD!"
echo "UART串口端口号设置为:!UART_COM_PORT!"
echo "USB串口波特率设置为:!USB_COM_BAUD!"
echo "USB串口端口号设置为:!USB_COM_PORT!"
echo "需要进行DFU的设备的蓝牙名称设置为:!IC_NAME!"
echo "需要进行DFU的设备的MAC地址设置为:!IC_MAC!"
echo "当前CONFIG_DEFAULT_PROJECT设置为!CONFIG_DEFAULT_PROJECT!,=N则使用用户自定义工程路径"
echo "工程路径设置"
echo "Application工程路径设置为:!PROJECT_PATH_APPLICATION!"
echo "BLE Bootloader工程路径设置为:!PROJECT_PATH_BOOTLOADER_BLE!"
echo "UART Bootloader工程路径设置为:!PROJECT_PATH_BOOTLOADER_UART!"
if "!USB_MATCH!"=="TRUE" (
echo "USB Bootloader工程路径设置为:!PROJECT_PATH_BOOTLOADER_USB!"
)
echo "固件路径设置"
echo "SoftDevice固件路径设置为:!HEX_PATH_SD!"
echo "Application固件路径设置为:!HEX_PATH_APP!"
echo "BLE Bootloader固件路径设置为:!HEX_PATH_BL_BLE!"
echo "UART Bootloader固件路径设置为:!HEX_PATH_BL_UART!"
if "!USB_MATCH!"=="TRUE" (
echo "USB Bootloader固件路径设置为:!HEX_PATH_BL_USB!"
)
) else if "!choice!"=="016" (
REM start msedge "https://www.cnblogs.com/iini/p/9314246.html"
REM start msedge "!CD!\micro-ecc\nRF_Command_Line_Tools_v1.4.pdf"
REM start msedge "!CD!\micro-ecc\nrfutil_v6.1.0.pdf"
start msedge "!CD!\micro-ecc\readme.md"
) else if "!choice!"=="017" (
echo "nRF52805 patch路径设置"
SET "PATCH_PATH_NRF52805=.\micro-ecc\nRF52805_patch"
copy "!PATCH_PATH_NRF52805!\nrfx_irqs.h" ..\modules\nrfx\soc\nrfx_irqs.h
copy "!PATCH_PATH_NRF52805!\nrfx_irqs_nrf52805.h" ..\modules\nrfx\soc\nrfx_irqs_nrf52805.h
copy "!PATCH_PATH_NRF52805!\nrfx_coredep.h" ..\modules\nrfx\soc\nrfx_coredep.h
copy "!PATCH_PATH_NRF52805!\nrfx_prs.h" ..\modules\nrfx\drivers\src\prs\nrfx_prs.h
copy "!PATCH_PATH_NRF52805!\nrf_dfu_types.h" ..\components\libraries\bootloader\dfu\nrf_dfu_types.h
copy "!PATCH_PATH_NRF52805!\nrf_bootloader_info.h" ..\components\libraries\bootloader\nrf_bootloader_info.h
) else if "!choice!"=="021" (
if not exist !MICRO_ECC_LIB_PATH! (
echo " copy micro-ecc directory to external directory"
ROBOCOPY !MICRO_ECC_FOLDER_SOURCE_PATH! !MICRO_ECC_FOLDER_TARGET_PATH! /E /MT:8
)
if not exist !KEY_BACKUP_DIRECTORY_PATH! (
echo "make backup directory"
md !KEY_BACKUP_DIRECTORY_PATH!
)
if exist !PRIVATE_KEY_NAME! (
echo "backup "!PRIVATE_KEY_NAME!
ren !PRIVATE_KEY_NAME! !KEY_BACKUP_TIME!.!PRIVATE_KEY_NAME!
move !KEY_BACKUP_TIME!.!PRIVATE_KEY_NAME! !KEY_BACKUP_DIRECTORY_PATH!!KEY_BACKUP_TIME!.!PRIVATE_KEY_NAME!
)
if exist !PUBLIC_KEY_NAME! (
echo "backup "!PUBLIC_KEY_NAME!
ren !PUBLIC_KEY_NAME! !KEY_BACKUP_TIME!.!PUBLIC_KEY_NAME!
move !KEY_BACKUP_TIME!.!PUBLIC_KEY_NAME! !KEY_BACKUP_DIRECTORY_PATH!!KEY_BACKUP_TIME!.!PUBLIC_KEY_NAME!
)
echo "create" !PRIVATE_KEY_NAME! "at:" !KEY_BACKUP_TIME!
nrfutil keys generate !PRIVATE_KEY_NAME!
echo "creat" !PUBLIC_KEY_NAME! "at:" !KEY_BACKUP_TIME!
nrfutil keys display --key pk --format code !PRIVATE_KEY_NAME! --out_file !PUBLIC_KEY_NAME!
) else if "!choice!"=="022" (
echo "复制 !PUBLIC_KEY_NAME! 到路径 !PUBLIC_KEY_PATH!!PUBLIC_KEY_NAME!"
copy !PUBLIC_KEY_NAME! !PUBLIC_KEY_PATH!!PUBLIC_KEY_NAME!
) else if "!choice!"=="031" (
echo "build ble bootloader project"
echo "Init building bootloader project..."
echo .>bootloader_build_log.txt
UV4 -j0 -r !PROJECT_PATH_BOOTLOADER_BLE! -o "!cd!\bootloader_build_log.txt"
type bootloader_build_log.txt
echo "bootloader build completed."
) else if "!choice!"=="032" (
echo "build application project"
echo "Init building application project..."
echo .>application_build_log.txt
UV4 -j0 -r !PROJECT_PATH_APPLICATION! -o "!cd!\application_build_log.txt"
UV4 -j0 -r D:\nRF5 SDK\nRF5_SDK_17.1.0_ddde560_dfu\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056\s140\arm5_no_packs\ble_app_buttonless_dfu_pca10056_s140.uvprojx -o "!cd!\application_build_log.txt"
type application_build_log.txt
echo "application build completed."
) else if "!choice!"=="033" (
echo "copy softdevice ble_bootloader and application hex"
copy !HEX_PATH_SD! !HEX_NAME_SD!
copy !HEX_PATH_BL_BLE! !HEX_NAME_BL_BLE!
copy !HEX_PATH_APP! !HEX_NAME_APP!
) else if "!choice!"=="034" (
echo "merged hex"
nrfutil settings generate --family !ST_IC_FAMILY! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! --bootloader-version !HEX_VERSION_BL! --bl-settings-version !HEX_VERSION_ST! !HEX_NAME_ST!
mergehex -m !HEX_NAME_SD! !HEX_NAME_APP! -o !HEX_NAME_SD_APP!
mergehex -m !HEX_NAME_SD_APP! !HEX_NAME_BL_BLE! -o !HEX_NAME_SD_APP_BL_BLE!
mergehex -m !HEX_NAME_SD_APP_BL_BLE! !HEX_NAME_ST! -o !HEX_NAME_MERGED_BLE!
REM del !HEX_NAME_ST!
del !HEX_NAME_SD_APP!
del !HEX_NAME_SD_APP_BL_BLE!
echo "packaged"
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_BLE! --bootloader-version !HEX_VERSION_BL! !PKG_NAME_BL_BLE!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_SOFTDEVICE!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_BLE! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_BL_BLE_SD!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_BLE! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_BL_BLE_SD_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_SD_APP!
) else if "!choice!"=="035" (
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE! !BIN_NAME_BL_BLE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_SOFTDEVICE! !BIN_NAME_SOFTDEVICE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_APP! !BIN_NAME_APP!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE_SD! !BIN_NAME_BL_BLE_SD!
) else if "!choice!"=="036" (
nrfjprog --family !PRO_IC_FAMILY! --recover !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --eraseall !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --program !HEX_NAME_MERGED_BLE! --sectorerase --verify --reset !USER_JLINK_SNR!
) else if "!choice!"=="037" (
echo "DFU *.pkg from ble and find by name"
if not "!BLE_DONGLE_JLINK_SNR!"=="" (
nrfjprog --family !PRO_IC_FAMILY! --recover !DONGLE_PROG_JLINK_SNR!
)
nrfutil dfu ble -ic !PRO_IC_FAMILY! -pkg !PKG_NAME_APP! -p !BLE_DONGLE_COM_PORT! -n !IC_NAME! -f -cd 3 !DONGLE_DFU_JLINK_SNR!
) else if "!choice!"=="038" (
echo "DFU *.pkg from ble and find by mac"
if not "!BLE_DONGLE_JLINK_SNR!"=="" (
nrfjprog --family !PRO_IC_FAMILY! --recover !DONGLE_PROG_JLINK_SNR!
)
nrfutil dfu ble -ic !PRO_IC_FAMILY! -pkg !PKG_NAME_APP! -p !BLE_DONGLE_COM_PORT! -a !IC_MAC! -f -cd 3 !DONGLE_DFU_JLINK_SNR!
) else if "!choice!"=="041" (
echo "build uart bootloader project"
echo "Init building bootloader project..."
echo .>bootloader_build_log.txt
UV4 -j0 -r !PROJECT_PATH_BOOTLOADER_UART! -o "!cd!\bootloader_build_log.txt"
type bootloader_build_log.txt
echo "bootloader build completed."
) else if "!choice!"=="042" (
echo "build application project"
echo "Init building application project..."
echo .>application_build_log.txt
UV4 -j0 -r !PROJECT_PATH_APPLICATION! -o "!cd!\application_build_log.txt"
type application_build_log.txt
echo "application build completed."
) else if "!choice!"=="043" (
echo "copy softdevice uart_bootloader and application hex"
copy !HEX_PATH_SD! !HEX_NAME_SD!
copy !HEX_PATH_BL_UART! !HEX_NAME_BL_UART!
copy !HEX_PATH_APP! !HEX_NAME_APP!
) else if "!choice!"=="044" (
echo "merged hex"
nrfutil settings generate --family !ST_IC_FAMILY! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! --bootloader-version !HEX_VERSION_BL! --bl-settings-version !HEX_VERSION_ST! !HEX_NAME_ST!
mergehex -m !HEX_NAME_SD! !HEX_NAME_APP! -o !HEX_NAME_SD_APP!
mergehex -m !HEX_NAME_SD_APP! !HEX_NAME_BL_UART! -o !HEX_NAME_SD_APP_BL_UART!
mergehex -m !HEX_NAME_SD_APP_BL_UART! !HEX_NAME_ST! -o !HEX_NAME_MERGED_UART!
REM del !HEX_NAME_ST!
del !HEX_NAME_SD_APP!
del !HEX_NAME_SD_APP_BL_UART!
echo "packaged"
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_UART! --bootloader-version !HEX_VERSION_BL! !PKG_NAME_BL_UART!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_SOFTDEVICE!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_UART! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_BL_UART_SD!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_UART! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_BL_UART_SD_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_SD_APP!
) else if "!choice!"=="045" (
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE! !BIN_NAME_BL_BLE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_SOFTDEVICE! !BIN_NAME_SOFTDEVICE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_APP! !BIN_NAME_APP!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE_SD! !BIN_NAME_BL_BLE_SD!
) else if "!choice!"=="046" (
nrfjprog --family !PRO_IC_FAMILY! --recover !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --eraseall !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --program !HEX_NAME_MERGED_UART! --sectorerase --verify --reset !USER_JLINK_SNR!
) else if "!choice!"=="047" (
echo "DFU *.pkg from uart with NRF_BL_DFU_ENTER_METHOD_GPREGRET=1"
SET "BOOTLOADER_DFU_START_MASK=0xF9"
SET "BOOTLOADER_DFU_START=0xB1"
SET "NRF_POWER_GPREGRET=0x4000051C"
nrfjprog --family !PRO_IC_FAMILY! --memwr !NRF_POWER_GPREGRET! --val !BOOTLOADER_DFU_START! !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --memrd !NRF_POWER_GPREGRET! --w 32 --n 4 !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --debugreset !USER_JLINK_SNR!
nrfutil dfu serial -pkg !PKG_NAME_APP! -p !UART_COM_PORT! -b !UART_COM_BAUD! -fc 0
)else if "!choice!"=="048" (
echo "DFU *.pkg from uart with 配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1"
nrfjprog --pinreset !USER_JLINK_SNR!
nrfutil dfu serial -pkg !PKG_NAME_APP! -p !UART_COM_PORT! -b !UART_COM_BAUD! -fc 0
)else if "!choice!"=="049" (
echo "DFU *.pkg from uart with 配置NRF_BL_DFU_ENTER_METHOD_BUTTON=1"
nrfjprog --family !PRO_IC_FAMILY! --debugreset !USER_JLINK_SNR!
nrfutil dfu serial -pkg !PKG_NAME_APP! -p !UART_COM_PORT! -b !UART_COM_BAUD! -fc 0
)
REM 根据芯片型号判断下述代码是否需要执行
if "!USB_MATCH!"=="TRUE" (
if "!choice!"=="051" (
echo "build usb bootloader project"
echo "Init building bootloader project..."
echo .>bootloader_build_log.txt
UV4 -j0 -r !PROJECT_PATH_BOOTLOADER_USB! -o "!cd!\bootloader_build_log.txt"
type bootloader_build_log.txt
echo "bootloader build completed."
) else if "!choice!"=="052" (
echo "build application project"
echo "Init building application project..."
echo .>application_build_log.txt
UV4 -j0 -r !PROJECT_PATH_APPLICATION! -o "!cd!\application_build_log.txt"
type application_build_log.txt
echo "application build completed."
) else if "!choice!"=="053" (
echo "copy softdevice usb_bootloader and application hex"
copy !HEX_PATH_SD! !HEX_NAME_SD!
copy !HEX_PATH_BL_USB! !HEX_NAME_BL_USB!
copy !HEX_PATH_APP! !HEX_NAME_APP!
) else if "!choice!"=="054" (
echo "merged hex"
nrfutil settings generate --family !ST_IC_FAMILY! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! --bootloader-version !HEX_VERSION_BL! --bl-settings-version !HEX_VERSION_ST! !HEX_NAME_ST!
mergehex -m !HEX_NAME_SD! !HEX_NAME_APP! -o !HEX_NAME_SD_APP!
mergehex -m !HEX_NAME_SD_APP! !HEX_NAME_BL_USB! -o !HEX_NAME_SD_APP_BL_USB!
mergehex -m !HEX_NAME_SD_APP_BL_USB! !HEX_NAME_ST! -o !HEX_NAME_MERGED_USB!
REM del !HEX_NAME_ST!
del !HEX_NAME_SD_APP!
del !HEX_NAME_SD_APP_BL_USB!
echo "packaged"
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_USB! --bootloader-version !HEX_VERSION_BL! !PKG_NAME_BL_USB!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_SOFTDEVICE!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_USB! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! !PKG_NAME_BL_USB_SD!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --bootloader !HEX_NAME_BL_USB! --bootloader-version !HEX_VERSION_BL! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_BL_USB_SD_APP!
nrfutil pkg generate --key-file !PRIVATE_KEY_NAME! --hw-version !PKG_HW_FAMILY! --sd-req !PKG_VERSION_SD_REQ! --softdevice !HEX_NAME_SD! --sd-id !PKG_VERSION_SD_ID! --application !HEX_NAME_APP! --application-version !HEX_VERSION_APP! !PKG_NAME_SD_APP!
) else if "!choice!"=="055" (
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE! !BIN_NAME_BL_BLE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_SOFTDEVICE! !BIN_NAME_SOFTDEVICE!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_APP! !BIN_NAME_APP!
python "!TOOL_PATH_ZIP_TO_BIN!" !PKG_NAME_BL_BLE_SD! !BIN_NAME_BL_BLE_SD!
) else if "!choice!"=="056" (
nrfjprog --family !PRO_IC_FAMILY! --recover !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --eraseall !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --program !HEX_NAME_MERGED_USB! --sectorerase --verify --reset !USER_JLINK_SNR!
) else if "!choice!"=="057" (
echo "DFU *.pkg from usb with NRF_BL_DFU_ENTER_METHOD_GPREGRET=1"
SET "BOOTLOADER_DFU_START_MASK=0xF9"
SET "BOOTLOADER_DFU_START=0xB1"
SET "NRF_POWER_GPREGRET=0x4000051C"
nrfjprog --family !PRO_IC_FAMILY! --memwr !NRF_POWER_GPREGRET! --val !BOOTLOADER_DFU_START! !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --memrd !NRF_POWER_GPREGRET! --w 32 --n 4 !USER_JLINK_SNR!
nrfjprog --family !PRO_IC_FAMILY! --debugreset !USER_JLINK_SNR!
nrfutil dfu usb-serial -pkg !PKG_NAME_APP! -p !USB_COM_PORT! -b !USB_COM_BAUD! -fc 0
)else if "!choice!"=="058" (
echo "DFU *.pkg from usb with 配置NRF_BL_DFU_ENTER_METHOD_PINRESET=1"
nrfjprog --family !PRO_IC_FAMILY! --pinreset !USER_JLINK_SNR!
nrfutil dfu usb-serial -pkg !PKG_NAME_APP! -p !USB_COM_PORT! -b !UART_COM_BAUD! -fc 0
)else if "!choice!"=="059" (
echo "DFU *.pkg from usb with 1或者NRF_BL_DFU_ENTER_METHOD_BUTTON=1 P0.25/P0.16"
nrfjprog --family !PRO_IC_FAMILY! --debugreset !USER_JLINK_SNR!
nrfutil dfu usb-serial -pkg !PKG_NAME_APP! -p !USB_COM_PORT! -b !UART_COM_BAUD! -fc 0
)
)
if "!choice!"=="rcv" (
nrfjprog --recover !USER_JLINK_SNR!
) else if "!choice!"=="rst" (
nrfjprog --debugreset !USER_JLINK_SNR!
) else if "!choice!"=="e" (
exit
)
pause
goto prompt
@endlocal
新手必知
海量第三方学习资源.
超全常用工具与文档.
本站常用资源下载.
常见问题搜索.
QQ群: 542294007.
文章引用自:元仓库 OLIB.cn.