IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 使用Nordic的nrf52840实现蓝牙DFU过程 -> 正文阅读

[Python知识库]使用Nordic的nrf52840实现蓝牙DFU过程

需要用到的软件:

交叉编译环境:gcc-arm-none-eabi
MinGW:下载
Python:下载
micro-ecc源码:下载
nRFUtil:下载或者直接使用python的pip来安装

手机app:nRF Toolbox或者nRF Connect

安装

gcc-arm-none-eabi安装

gcc-arm-none-eabi按照默认配置直接安装,在完成页面选择添加至环境变量。
在这里插入图片描述

MinGW安装

MinGW按照默认配置安装,到Installation Manager界面选择如下三个package:
在这里插入图片描述
点击左上角Installation→Apply Changes后点Apply。安装完成后将路径C:\MinGW\bin添加至环境变量。安装成功后在命令行输入gcc -v可以查看是否安装成功。
在这里插入图片描述

micro-ecc拷贝

将下载的micro-ecc-master压缩包解压后重命名为micro-ecc,然后拷贝到nRF5_SDK_17.1.0_ddde560\external\micro-ecc路径下。
在这里插入图片描述

Python安装

如果安装有多个版本的Python,可以参考使用Nordic的nRF52840 Dongle配合Wireshark对蓝牙设备抓包(BLE)安装。

nRFUtil安装

安装了Python后,可以直接在命令行输入pip install nrfutil进行安装。
在这里插入图片描述
可以在命令行输入nrfutil --help查看是否安装成功,下面的Commands就是支持的命令。
在这里插入图片描述

生成micro_ecc_lib_nrf52.lib

打开C:\MinGW\msys\1.0路径下的批处理文件msys.bat,输入cd /E/nRF5_SDK_17.1.0_ddde560/nRF5_SDK_17.1.0_ddde560/external/micro-ecc/nrf52nf_keil/armgcc后回车(注意路径中用/,不是\),然后输入make会有如下提示:
在这里插入图片描述
按照红框中的提示,在相应路径下用记事本打开,改成自己电脑中的路径(注意路径中用/,不是\):
在这里插入图片描述
之后输入make,成功生成lib文件
在这里插入图片描述

生成公私密钥

用到的命令帮助,可以查看具体的参数:
nrfutil keys generate --help
nrfutil keys display --help

新建一个文件夹,命名为key,在命令行切换路径到新建的文件夹,输入nrfutil keys generate private.pem,生成私钥,每次升级的时候需要用私钥对image进行验签。
在这里插入图片描述在这里插入图片描述
然后使用私钥生成公钥.c文件,输入nrfutil keys display --key pk --format code private.pem --out_file dfu_public_key.c后,会在文件夹下生成公钥的.c文件。
在这里插入图片描述
用生成的公钥文件替换E:\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\examples\dfu路径下的dfu_public_key.c。
在这里插入图片描述

Boot和App的HEX文件生成

Boot文件使用E:\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\examples\dfu\secure_bootloader\pca10056_s140_ble\arm5_no_packs下的keil工程,编译后生成nrf52840_xxaa_s140.hex,复制到key文件夹中,并重命名为Bootloader.hex。

App文件使用E:\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_buttonless_dfu\pca10056\s140\arm5_no_packs下的keil工程,将生成的HEX文件名称改为ApplicationA。
在这里插入图片描述
在main函数中新增log输出NRF_LOG_INFO(“My App - A.”);编译。然后将HEX文件名称改为ApplicationB,main函数中log输出改为NRF_LOG_INFO(“My App - B.”);编译,将生成的两个HEX文件复制到key文件夹中。
在这里插入图片描述

DFU包生成

用到的命令帮助,可以查看具体的参数:
nrfutil pkg generate --help

在命令行切换路径到key文件夹,输入nrfutil pkg generate --hw-version 52 --sd-req 0x100 --application-version 2 --application
ApplicationB.hex --key-file private.pem app_dfu_package.zip
之后会在key文件夹中生成一个压缩包,这个包就是升级包。
在这里插入图片描述
其中–sd-req这个字段可以通过E:\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\softdevice\s140\hex路径下的hex文件名称确定型号后匹配nrfutil pkg generate --help命令执行后的ID列表。
在这里插入图片描述
使用nRF Connect for Desktop下载协议栈的时候打开hex文件会直接显示ID。
在这里插入图片描述

Bootloader Settings文件生成

用到的命令帮助,可以查看具体的参数:
nrfutil settings generate --help

如果直接把协议栈、Bootloader和ApplicationA文件下载进去后,会发现广播名称一直是DfuTarg,一直卡在Bootloader里面处于DFU模式,没有进入ApplicationA。这是因为在进入app程序之前boot需要基于Bootloader Settings中的信息对app程序进行完整性检查。在没有app、app完整性校验失败或者没有Bootloader Settings的情况下,boot会进入DFU模式。
在这里插入图片描述
这个时候就需要Bootloader Settings来设置一下相关的信息,使得首次程序下载进去之后直接从Boot转入App运行。Bootloader Settings包含的信息如下:
在这里插入图片描述
在命令行切换路径到key文件夹,输入nrfutil settings generate --family NRF52840 --application ApplicationA.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex,生成Bootloader Settings文件。
在这里插入图片描述
其中–family参数设置如下:
在这里插入图片描述
–bl-settings-version参数设置如下:
在这里插入图片描述
如果SDK的版本大于等于15.3.0,–bl-settings-version要设置为版本2,如果设置为版本1的话,BootLoader会在引导之前转换为版本2。

HEX文件合成

用到的命令帮助,可以查看具体的参数:
mergehex --h
实际下载时需要4个hex文件,分别为协议栈、boot settings、boot和app。为了方便烧录,可以把4个文件合成一个hex文件,使用到的工具为nRF Command Line Tools,命令为 mergehex,一次最多可以合成3个hex文件,因此需要两步来完成。
在这里插入图片描述
此处以nrf52832为例,找到对应的协议栈hex文件(路径:nRF5_SDK_17.1.0_ddde560\components\softdevice\s132\hex)复制到key文件夹中。在命令行切换路径到key文件夹,输入mergehex -m s132_nrf52_7.2.0_softdevice.hex bootloader.hex application.hex -o output_file.hex,其中s132_nrf52_7.2.0_softdevice.hex为协议栈文件,bootloader.hex application.hex分别为boot和app文件,这个时候会在key文件夹中生成三合一的hex文件output_file.hex。然后把Bootloader Settings文件合并进去,输入mergehex -m output_file.hex settings.hex -o output_file_finally.hex,这个output_file_finally.hex就是最终要下载进去的hex文件。
在这里插入图片描述

DFU测试

程序下载进去之后,通过串口的log可以看到上电后直接运行了ApplicationA程序。
在这里插入图片描述
进入DFU模式的方法:
在这里插入图片描述
ble_app_buttonless_dfu例程,使用手机上的nRF Connect可以搜到Nordic_Buttonless的蓝牙,连接上之后可以看到有一个UUID为0xFE59的服务,服务特征值为0x0003。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后先使能指示,再写入数据,之后蓝牙会自动断开连接,进入DFU模式,串口log如下。
在这里插入图片描述
然后就可以搜到一个DfuTarg的设备,连接上之后选择DFU,选择要升级的DFU包,然后点击start进行升级
在这里插入图片描述
升级完成后,串口log显示运行了ApplicationB程序。重新搜索蓝牙,又可以搜到名称为Nordic_Buttonless的蓝牙。
在这里插入图片描述
使用nRF Toolbox的DFU组件一样是先选定升级包,然后点Update升级。
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:04:55  更:2022-12-25 11:09:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/24 11:41:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计