NRF51822之DFU使用手机升级

演示的工程是

[application]    nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble_app_hrs\pca10028\s110_with_dfu

[bootload]      nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\pca10028\dual_bank_ble_s110

[softdevice]    nRF51_SDK_10.0.0_dc26b5e\components\softdevice\s110\hex\s110_nrf51_8.0.0_softdevice.hex

1、先檫除

2、下载softdevice

3、打开bootload工程并编译下载

需要注意的地方修改BootLoader

如果使用NRF51822_XXAC(256KB-FLASH,32KB-RAM )

如果使用 NRF51822_XXAA(256KB-FLASH,16KB-RAM )

来自官方论坛

接上述步骤,在options ...窗口中点击"Utilities"选项卡,Arguments一栏 --family nRF51 --program "#H"

4、现在回到我们ble_app_hrs\pca10028\s110_with_dfu编译下载

5、在手机app中可以看到

6、使用脚本生成升级使用的ZIP

这个使用hex文件为ble_app_hrs工程的hex

generate_application_bin.Bat脚本如下:

@echo off
set /p file_name=hex文件名,可以拖拽,回车键结束:
echo %file_name%
copy %file_name% application.hex
nrfutil.exe dfu genpkg %file_name%.zip --application application.hex --application-version 0xFFFFFFFF --dev-revision 0xffff --dev-type 0xffff --sd-req 0xfffe
del application.hex
pause

将这个ZIP文件发送给手机,然后在手机端进行升级

在烧录完程序后,产品默认是DFU模式,要令产品进入正常模式,方法之一是执行一次UPDATE。方法之二是修改BOOTLODER工程。

现在我们将讲解方法二:

在bootload的工程中修改

 1 #if defined ( __CC_ARM )
 2 uint8_t  m_boot_settings[CODE_PAGE_SIZE] __attribute__((at(BOOTLOADER_SETTINGS_ADDRESS))) __attribute__((used));              /**< This variable reserves a codepage for bootloader specific settings, to ensure the compiler doesn‘t locate any code or variables at his location. */
 3 uint32_t m_uicr_bootloader_start_address __attribute__((at(NRF_UICR_BOOT_START_ADDRESS))) = BOOTLOADER_REGION_START;            /**< This variable ensures that the linker script will write the bootloader start address to the UICR register. This value will be written in the HEX file and thus written to UICR when the bootloader is flashed into the chip. */
 4 #elif defined ( __GNUC__ )
 5 __attribute__ ((section(".bootloaderSettings"))) uint8_t m_boot_settings[CODE_PAGE_SIZE];                                       /**< This variable reserves a codepage for bootloader specific settings, to ensure the compiler doesn‘t locate any code or variables at his location. */
 6 __attribute__ ((section(".uicrBootStartAddress"))) volatile uint32_t m_uicr_bootloader_start_address = BOOTLOADER_REGION_START; /**< This variable ensures that the linker script will write the bootloader start address to the UICR register. This value will be written in the HEX file and thus written to UICR when the bootloader is flashed into the chip. */
 7 #elif defined ( __ICCARM__ )
 8 __no_init uint8_t m_boot_settings[CODE_PAGE_SIZE] @ 0x0003FC00;                                                                 /**< This variable reserves a codepage for bootloader specific settings, to ensure the compiler doesn‘t locate any code or variables at his location. */
 9 __root    const uint32_t m_uicr_bootloader_start_address @ 0x10001014 = BOOTLOADER_REGION_START;                                /**< This variable ensures that the linker script will write the bootloader start address to the UICR register. This value will be written in the HEX file and thus written to UICR when the bootloader is flashed into the chip. */
10 #endif

将第2行修改为

uint8_t  m_boot_settings[CODE_PAGE_SIZE] __attribute__((at(BOOTLOADER_SETTINGS_ADDRESS))) __attribute__((used)) =  {BANK_VALID_APP};

官方论坛

https://devzone.nordicsemi.com/question/60745/nrfgo-studio-and-bootloader-programming/

修改后编译下载

为了和之前的app区别我们将名字修改,编译下载

这次我们看到在手机中设备名为

更多信息可以参考https://devzone.nordicsemi.com/blogs/685/common-faq-on-dfu/

时间: 2024-10-10 13:07:02

NRF51822之DFU使用手机升级的相关文章

手机升级之后,没有备份照片怎么办?

最近看上了苹果出的apple watch,呵呵,其实很早的时候就想买一个这样的一个智能手表,不过之前的很多功能就比较欠缺,一直没有狠心下手买,毕竟这种数码的东西价格并不便宜,少则几百块,一般情况下,都是会上千的. 但是苹果这次出品的apple watch,确实让我有些东西了,就像当初乔帮主研发的iPhone 4,我一直觉得这个也是一次技术上的革新,也是一个创时代的东西,所以刚发布不久我就已经四处去询问了,虽然这个表说的是在26日才会发布,但是实际上很多地方都已经开始售卖了,不过现货相对要贵一些,

立波 iphone3gs越狱教程:成功把iphone3gs手机升级成ios6.1.3系统,完美越狱,解决no service和耗电量大的问题

前几天,老婆使用的iphone3gs摔地了,把手机里的连接电源的那个神马线给搞坏了,结果花了200多块大洋修好了: 修好后,老婆抱怨道:5年了,这手机好多软件都装不上,说手机版本号太低了, 我就说凑合用吧,不行给你个300块钱的安卓手机用吧, 她不愿意, 事实上我是舍不得花5000多买一个iphone5,感觉没啥意义, 结果我就手贱,用91手机助手把一些APP给卸载了,好吧悲剧開始了,重新启动后,手机变成了白苹果(启动后,就出现一个苹果,就不动了),然后每隔1分钟自己主动重新启动. 第一步: 好

手机究竟要不要升级系统?总是自动升级该怎么办?看完你就懂了

手机到底该不该升级?这是很多朋友都会遇到的问题,而且不分安卓与苹果.有些朋友升级后说,手机更流畅功能更多了.而也有朋友表示,手机升级后耗电增加了,而且还变卡了许多.为什么会出现两种截然不同的情况呢?下面我们就一起来看看原因. 1. 系统升级的好处 其实系统升级也是分大小的,通常小升级就是几十兆大小,并且只是修复一些已知的bug和小问题.而大升级指的是大跨度升级,比如说EMUI9到EMUI10之类的,此类升级带来的更新也会比较大,并且会增加一些新功能. 2. 系统升级的风险 其实系统升级是存在风险

nRF51 DFU 初始化包介绍及生成工具

nRF51 DFU 初始化包 当升级数据包时,在应用程序映像传输之前,在DFU中需要初始化包来执行映像的安全检测.这个初始化包作为升级流程的一部分提供了安全检测机制,因此被升级的设备只能接收兼容的应用程序. 初始化包包括以下信息可用于安全检测(参见dfu_init_packet_t) l  Device type:一个2个字节的值,可由开发者定义,以指示设备的类型,如Heart Rate Belt. l  Device revision:一个2个字节的值,用于限制一个设备只能使用一个定义的版本号

ios (推送之远程推送)升级成ios8系统之后有些程序接收不到远程推送

维护一个程序,当手机升级到ios8之后就不能接收到远程推送,显示注册失败,查了下资料,原来是没有获取用户许可,加了个方法试了下,ok if ([[[UIDevice currentDevice]systemVersion ]integerValue] >= 8) { UIUserNotificationSettings*setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUser

关于windows phone 8.1系统手机对html5触摸事件的支持情况

近日购入一部微软Lumia 640手机,目的主要就是为了测试年中开发完成的响应式移动web项目,同时也为了将来升级win10 mobile系统.由于我们的项目目前只考虑支持IOS与Android系统,所以只支持了html5触摸事件(如touchstart). 印象中WP系统应该只支持MS开头(如MSPointerDown)的指针事件,但测试结果很出人意料:项目在WP8.1的Lumia 640手机上竟完全可以正常运行,并支持了所有的触摸事件... 对于这个问题我挺不解的,于是就查阅了下msdn文档

先搞清楚这些再去升级Windows 10

从7月29日起,Windows 7和Windows 8.1用户将能下载Windows 10.对于微软及其客户来说,这是一个重大转变.但微软提供了大量信息,以简化升级过程,让用户尽可能方便.简单地升级到Windows 10. 对于消费者来说,选择很简单:升级到下述两个版本之一——Windows 10家庭版或Windows 10专业版.本文不涉及手机升级到Windows 10 Mobile的过程.对于自己组装PC的用户,微软还发布了Windows 10的官方零售价. 据PCWorld网站报道,在升级

嵌入式闪存您了解多少?

随着移动互联的高速发展.智能设备的海量出现,我们熟知的IoT领域.智能制造领域.车联网领域.手机设备等等都有一个共同标志--以数据为驱动的应用或服务,而这背后的基础就是嵌入式闪存技术.那么嵌入式闪存到底为业内带来哪些变化?嵌入式闪存的发展现状如何?其技术有哪些特点?未来的发展是一个什么状况? ZD至顶网邀请了西部数据集团旗下品牌闪迪亚太区市场渠道管理高级经理张丹女士与计世资讯副总经理曹宇杰,分别从厂商和分析师的角度来看看嵌入式闪存的市场和技术趋势. Q:嵌入式存储目前的主流技术有哪些?相互之间的

“雷军系”们,在规划怎样一盘棋?

钛媒体注:雷军不仅仅是小米的掌门人,雷军的烙印更散落在一系列被冠以"雷军系"的互联网公司中.来看看作者对雷军系战略的详细梳理,看雷军将要谋划怎样一盘大棋: 进入微软.亚马逊,谷歌等美国IT企业工作人才项目,起薪40万,百度搜索(MUMCS) 一."雷军系"版图概述 "雷军系"的上市公司有三家:金山软件(港交所).欢聚时代(纳斯达克).猎豹移动(纽交所).小米科技虽然没有上市,但已经估值百亿美金以上,是雷军系最核心的资产.此外,雷军以天使投资人身份