nrf52832在SDk12.3中DFU升级工程移植步骤

本文详细介绍了在nRF5 SDK 12.3中移植DFU(固件更新)服务的过程,包括添加必要的.c和.h文件、使能宏、初始化DFU服务、增加协议栈和系统派发函数等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在dfu升级这部分,用的是sdk12.3的,上网搜了一下资料,发现基本都是相关软件安装的步骤,所以,自己摸索着在一个工程上面进行移植dfu服务,也记录一下移植步骤,方便以后用的到。
好了,不说太多废话,先说工程。
在sdk12.3里面有两个工程,一个是bootloader,对应路径为:D:\nRF5_SDK_12.3.0_d7731ad\examples\dfu\bootloader_secure。
一个是dfu软按键服务工程,对应路劲为:D:\nRF5_SDK_12.3.0_d7731ad\examples\ble_peripheral\experimental_ble_app_buttonless_dfuBootLoader。
这两个工程相信大家在进行软件安装的时候,进行测试dfu服务这部分应该都是已经用到的,也应该熟悉。所以,不讲解太多,这次主要是进行把任意工程里面添加dfu服务。
步骤1:在服务文件里面添加ble_dfu.c
在这里插入图片描述
步骤2:添加文件nrf_dfu_setting.c , nrf_dfu_flash_buttonless.c, app_scheduler.c三个.c文件和对应的.h头文件,这个大家自己查找。
在这里插入图片描述
步骤3:添加crc32.c文件
在这里插入图片描述
步骤4:使能相应宏
在这里插入图片描述
在这里插入图片描述
步骤5:编译一下,会出现一个错误,根据错误,
在这里插入图片描述
我们可以看到是一个宏没有定义,我们定义一下,编译就没问题了。
在这里插入图片描述
步骤6:编写dfu服务初始化
在static void services_init(void)函数里面添加对应的dfu服务和回调函数,这个地方大家可以把官方历程里面的代码直接拷贝过来,就可以了
在这里插入图片描述
在这里插入图片描述
步骤7:增加协议栈派发函数
在这里插入图片描述
步骤8:增加系统派发函数
在这里插入图片描述

步骤9:到这里已经完成大部分了,编译一下,没有问题。我们打开RTT,把程序下载进去,会看到RTT的问题。
在这里插入图片描述
从上面图片可以看到,虽然已经到最后跑起来了,但是RTT并没有打印出广播信息:Fast Advertising,我们用蓝牙测试工具,也是搜索不到的,问题其实出现在RAM和ROM里面。大家可以看到上面服务初始化函数里面,我初始化了两个服务,一个是串口透传服务,一个是dfu服务,系统原本是给一个服务分配rom空间,现在增加一个,需要在分配一些。资料上有说明:每增加一个服务,ROM空间降低0x10, 起始地址增加0x10,并且,我们的RAm空间也要为了dfu升级而增大,看下图
在这里插入图片描述

更改以后,我们下载进去,可以看低RTT输出信息,已经ok。
在这里插入图片描述
步骤10:还有一处要修改,因为此处不修改,是直接把BootLoader擦除的,这样就没办法一直进行dfu升级了,每次都要先下协议栈,然后BootLoader,然后下载app的hex文件,很麻烦,我们修改一下,很容易。只需要屏蔽掉就行。
在这里插入图片描述
步骤9:到这里就ok了,为了做对比吗,我生成两个zip文件,一个是官方历程的zip,名字为dfu_button.hex,一个是自己历程的名字为my_project_dfu.hex
在这里插入图片描述
我们把协议栈,BootLoader先下载进去,先升级官方的dfu的zip文件,我们可以看到广播名和服务名
在这里插入图片描述
然后,通过dfu服务,擦除app端,重新进入BootLoader里面,升级我们自己的dfu。zip文件
在这里插入图片描述
到此,所有工作完成,如果移植的时候还有问题,可以参照官方的历程,查看还有哪些.c,.h没有移植进入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值