您现在的位置:首页 >> 环保新闻

蓝牙实现OTA固件强化的原理

时间:2023-04-29 12:17:59

步到这种持续性就不能一直待在bootloader中的,然后之后前进二次或者多次换装到时前,此时器材的假定是装置制已没有广为应用于,从广为应用于者广为应用于这个尺度来说是,你的确可以说是此时器材并未“变砖”了。所以说是,虽然双一区方德式将不惜牺牲了很多加载室内空间,但是换来了更高的换装质验。

可简述请忽略三个图来明白上述现实生活。

如果你是第一次带入Nordic nRF5 SDK,那么建议你到时看一下这篇文章:研发你的第一个BLE转换种系统—Blinky,或者看一下这一篇文章:手把手教你研发BLE信息透传转换种系统,以构建Nordic nRF5 SDK的一些基本基本知识,然后便往下看表列章节。

2、Nordic nRF5 SDK DFU仅指导方法

如文章“nRF5 SDK转换种系统架构及softdevice仅指导方法”写就到,Nordic nRF5 SDK转换种系统架构跟其他家有点不一样,程序来加载一区最开始大多放于得不是Bootloader,而是调制解调器两国政府缓冲一区Softdevice,转换种系统则凸挨着Softdevice,Bootloader则被nRF5 SDK放于在程序来加载一区的最纸片,整个加载一区在结构上图如下右图。如果广为应用于者还有Flash信息须要要存放于,那么这些信息凸挨着BootLoader请忽略。

以外Nordic SDK可择一只发放非亦同德式DFU开箱即用的案例(SDK16.0开始也背书亦同德式DFU前提),即种系统不能到时踩到BootLoader中的,然后才能通过BLE/UART/USB去分派原到时的BIOS。如上右图,如果择一用双一区方德式将DFU,那么Bank0放于的是转换种系统,即杨家BIOS,Bank1放于的是原到时BIOS。整天,Bank1为空或者比如说是,种系统只跑步Bank0;还有的转换种系统;换装的时候,到时踩到BootLoader,然后分派原到时BIOS并把它放于在Bank1中的,最后把Bank1;还有的BIOS复制到Bank0中的。如果择一用单一区方德式将,则没有人Bank1这个一区。整天,种系统只跑步Bank0;还有的code;换装的时候,踩到BootLoader,到时复制Bank0;还有的杨家程序来,并把原到时BIOS同样放于在Bank0中的。

根据换装时如何踩转到Bootloader,Nordic SDK又将DFU总称键盘德式DFU和非键盘德式(Buttonless)DFU,实际上键盘德式DFU,就是上磁时长按某个键盘以转回bootloader方德式将,而非键盘德式DFU,就是整个DFU现实生活中的器材末端无任何人工干预,通过BLE/UART/USB应用程序给转换种系统转发一条可执行,转换种系统发造出可执行后便相应踩入bootloader方德式将。不管是键盘德式DFU还实际上键盘德式DFU,两者只是转回BootLoader的方德式将不一样,其余基本一样,相比较是BootLoader仅指导现实生活之外是很漂亮的。后面只都会详述非键盘德式DFU的现实生活,键盘德式DFU以此完全相同,就不便赘述。

程序来踩到BootLoader后,根据BootLoader须要不须要要对原到时BIOS开展验签,Nordic SDK又把DFU总称开放于德式DFU和安均德式DFU(称作署名DFU)。开放于德式DFU,BootLoader不动手任何适当性,同样把原到时BIOS分派从前。安均德式DFU,BootLoader可知一把公身份适当性,BootLoader都会到时用这把公身份适当性适当性原到时BIOS的署名,只有验签通过,才受限制更更进一步的仅指导:比如把原到时BIOS分派从前;如果验签败北,BootLoader将拒绝换装,重原到时踩回转换种系统。

BootLoader可以通过有所不同的网络系统应用程序来分派原到时的BIOS,以外Nordic SDK背书BLE,UART和USB三种应用程序,所以大家可以在Nordic SDK中的看见如下三种建设工程附录:

其中的pca0056暗示nRF52840具质联的研发板编号,S140具质联Softdevice的型号,然后ble有两个附录:无debug和有debug,uart和usb也包内含同样的两个附录。有debug和无debug两者装置制是一样的,两者的相异是:debug原旧版BootLoader背书快照加载(大家可以通过加载造出的快照去明白BootLoader的仅指导现实生活),并可以比如说是各种密钥,debug原旧版%据的code室内空间要大很多;无debug原旧版 BootLoader不背书快照加载装置制并且原旧版和合理性密钥是强制的。正德式批量生产的时候录用广为应用于无debug原旧版以节约code室内空间。这里要务实一下,不管是debug原旧版还是无debug原旧版,两者都可以用Keil开展单步和断点检查和。

BLE,UART和USB只是网络系统方德式将不一样,他们遵守的DFU程序来中是很漂亮的,这里都会以BLE网络系统应用程序为例,详实详述DFU现实生活,UART和USB与之完全相同,就不便赘述。

诉说是DFU换装早先,到时谈一下nRF52的开启程序来中,上磁后,种系统到时督导softdevice,softdevice通过读取UICR一个codice_的倍数,来确实以外种系统前提有BootLoader,如果没有人BootLoader,种系统同样踩到application;如果有BootLoader,种系统到时踩到BootLoader,BootLoader便根据以外的持续性来要求是转回换装方德式将还是踩往application,BootLoader主要确实如下几种持续性:

键盘前提按下持续保持codice_GPREGRET1前提为0xB1恰巧DFU现实生活前提还在开展中的转换种系统密钥前提通过

如果键盘没有人按下,GPREGRET1不为0xB1,本次登位不是恰巧DFU的之后,并且转换种系统密钥通过,那么BootLoader就都会同样踩到application,去督导application转换种系统。那怎么去密钥转换种系统的合理性呢?为此BootLoader过渡到了一个放于在Flash的在结构上质匹配:m_dfu_settings_buffer(信息类型:nrf_dfu_settings_t),这个在结构上质匹配虽然只有896bit,但由于Flash不能按页复制,所以这个匹配实质%用了一个Flash page,这个page称为settings page,settings page放于在Flash的最后一个页面,settings page以外有2个原旧版:原旧版1(SDK15.2及在此之前原旧版)和原旧版2(SDK15.3及之后原旧版),原旧版2可以相容原旧版1,上去写就到的896bit是仅指settings page原旧版2的大小不一。Settings page包内含的分派者相比较多,大家用得相比较多的是:

各种原旧版分派者DFU换装现实生活分派者Application image的CRC倍数和大小不一转换种系统的bonding分派者Init command主旨application/softdevice的开启密钥分派者(原旧版2才有)

原旧版1的settings page只密钥application image的CRC倍数,如果CRC匹配,则视为application适当。原旧版2的settings page不仅可以密钥application image的CRC倍数,还可以密钥application/softdevice的CRC倍数或者hash倍数或者署名,你可以必须要你自己不想的密钥方德式将,只有CRC倍数或者hash倍数或者署名密钥通过(三择一其一),转换种系统仍要适当,这时BootLoader才都会踩到application去督导。为了应有settings page在愈演愈烈意外时,比如写就settings page现实生活中的愈演愈烈了登位或者掉磁,种系统也能合理恢复,SDK15及之后原旧版过渡到了一个backup page,backup page也%用一个Flash page,主旨和settings page很漂亮。

纸片是没有人即都会换装的持续性下nRF52的假定是开启程序来中,那如果要督导DFU换装,程序来中又是怎么样的呢?请忽略详实谈一下无键盘德式BLE OTA的仅指导程序来中。

1) 假定是开启后,种系统运转在转换种系统中的,此时APP通过app转发一条开始DFU的可执行给器材,器材发造出可执行后,将GPREGRET1变量0xB1,并即都会软性登位

2) 登位后,种系统便次转回BootLoader,因为GPREGRET1等于0xB1,BootLoader转回DFU方德式将,之后前进原到时BIOS分派

3) APP到时将init packet转发给器材,器材到时动手前期验prevalidation,主要是各种原旧版密钥以及署名验签,密钥通过后,更原到时settings page并打算开始信息分派

4) 分派原到时BIOS。每分派4kB信息,澄清一次CRC密钥倍数,年中整个原到时BIOSimage分派先行,如果原到时BIOS密钥通过(原旧版1密钥CRC倍数,原旧版2密钥hash倍数),就都会去invalidate(强制执行化) bank0;还有的杨家BIOS,更原到时settings page,并便次即都会软性登位

5) BootLoader开启后见到有原到时BIOS须要要activate(启动时),此时都会去擦掉bank0;还有的BIOS,并把bank1;还有的BIOS复制到bank0,然后更原到时settings page,并便次即都会软性登位。引:纸片谈的是dual bank的程序来中,single bank与之相似,无论如何在第3)步的时候就都会去复制杨家BIOS

6) BootLoader便次开启后,健康检查原到时image的合理性,密钥通过后,踩到原到时的application去督导code

从纸片程序来中可以看造出,DFU现实生活中的,种系统须要要跑步两段意味着分立的code:Application和BootLoader,Application和BootLoader都背书调制解调器装置制,假定是,两者都有自己的调制解调器广播磁台和调制解调器相连。

这;还有有一个疑问:当种系统从Application踩到BootLoader后,APP怎么辨认两者为同一个器材?很多一定都会说是,可以让BootLoader和Application两者的广播磁台英文名字一样,根据广播磁台英文名字的某种程度,来确实二者来自同一个器材。

这种分析方法实质上两个疑问:一大大多APP都背书GATT cache(CPU)装置制,当application跟APP相连后,APP都会把application的GATT信息CPU从前以减慢明年相连的加速(这个现象在小米APP最明显),便如果种系统踩到BootLoader,然后便跟APP相连,如果两者的调制解调器器材住址一样,APP都会视为是同一个器材,从而踩过服务建设项目见到的现实生活而同样广为应用于早先CPU从前的GATT信息,这样都会导致BootLoader的服务建设项目没有被APP见到,从而浮现换装败北。二如果多个器材同时在换装,而我们意味着仰赖广播磁台英文名字来要求两者原属不仅限于同一个器材,这都会导致器材A application有可能跟器材B的BootLoader开展错配。为了补救这个疑问,Nordic提造出了两套提议。

提议一,假设application的调制解调器器材住址为x,踩到BootLoader后调制解调器器材住址都会变变为x+1,这样APP就可以通过这种住址+1的方德式将来辨认两者原属不仅限于同一个器材,由于application和BootLoader广为应用于有所不同的调制解调器器材住址,上去的GATTCPU疑问也就不实质上。关于提议一,有一个疑问须要要特别引意:如果你想修正案例可择一的调制解调器器材住址(比如广为应用于IEEE的public调制解调器MAC住址),此时一定要回忆起同时改变为名application和BootLoader的调制解调器器材住址,使他们满足+1的条件,否则NordicAPPDFU托没有辨认两者前提仅限于同一个器材,无论如何没有进行时OTA现实生活。

提议二,application和BootLoader的调制解调器器材住址很漂亮,但器材跟APP督导择一取和bonding转换,器材跟APPbonding后,就可以背书service changed indicate转换,这样踩到BootLoader后可以让APP立即便督导一次服务建设项目见到现实生活,从而补救GATTCPU疑问。

很多人对署名验签不是很明白,这里详实说是一下它的仅指导方法。首到时,你须要要一对互助身份适当性,其中的私身份适当性用来降解原到时BIOS的署名,公身份适当性用来适当性署名的合理性,大家可以用nrfutil来降解自己须要要的互助身份适当性对,互助身份适当性制作公司顺利后,私身份适当性一定要适当交由(一般放于在网路),千万不能放,否则你自己也没有换装自己的器材;也不能被第三方知道,否则换装的安均性就不能应有了。公身份适当性可以变变为一个.c份文件,并布满DFU建设工程下的小王子份文件:dfu_public_key.c 。

其次,BootLoader要背书署名验签密码本正则表达德式,这个DFUcode并未有了,并且有四种后末端除此以外:micro-ecc,cc310_bl,Oberon和mbedtls,四择一其一无需(这4种后末端,只有cc310是驱动程序发挥作用,其余都是转换种系统发挥作用),nRF52840录用必须要cc310作为正则表达德式后末端,其他nRF52ROM录用必须要micro-ecc作为正则表达德式后末端。micro-ecc高效率,%用的code室内空间最少,但它的旧侵权是CPOL,只要你能放弃CPOL,那么录用广为应用于micro-ecc;反之,如果放弃不了CPOL旧侵权,而且驱动程序又不背书cc310,那么录用广为应用于Oberon,不过Oberon%用的code室内空间比micro-ecc要大一些,这个大家引意一下。便次,APP末端要降解原到时BIOS的署名,并把原到时BIOS的署名承继器材末端。

大家还是可以用nrfutil去降解原到时BIOS的署名。最后,BootLoader接发造出原到时BIOShash倍数和署名,并广为应用于自己的公身份适当性对该署名开展验签。这里说是一下,由于nrfutil是PC末端转换种系统,所以它可以内置各种加在密正则表达德式托,并进行时纸片提及的互助身份适当性对,hash和署名的降解仅指导。

嵌入德式互联须要要专修的东西实在相当多,千万不要专修错了路线和主旨,导致工资要不上去!

拨给共享大家一个详实资料包内,相当少150多G。;还有专修习主旨、面经、建设项目都相比较原到时也相比较均!某鱼上卖估计数要好几十。

长按文档跟踪

3、DFU换装流程详解

3.1 安均德式调制解调器直升装置的换装流程

值得忽略,Nordic SDK并未发放了DFU案例,请忽略我们一步一步给大家谈解如何通过Nordic SDK来发挥作用无键盘德式调制解调器直升装置的换装。求发挥作用直升装置的换装,器材须要要同时串流softdevice,转换种系统,BootLoader程序来,以及BootLoader settings page。其中的BootLoadercode位处附录:SDK根附录examplesdfusecure_bootloader,然后在该附录下必须要你具质联的侧边和建设工程。Application具质联的附录:SDK根附录examplesle_peripheralle_app_buttonless_dfu,而softdevice所在附录:SDK根附录componentssoftdevice。

请忽略我们以nRF52832/PCA10040和S132/SDK16为例详述无键盘德式调制解调器直升装置的换装发挥作用流程,其他ROM/softdevice/SDK方法与之完全相同,这里就不便赘述。当然,有所不同ROM有所不同softdevice有所不同SDK,他们的发挥作用剧本还是都会有一些细微差别,所以强烈建议大家去QQ网盘串流跟大家相匹配的剧本,QQ网盘;还有各个剧本的命名规则叮嘱简述3.2节。

1) 装配PC旧版nrfutil。nrfutil装配有两种方德式将,一种是同样串流exe份文件,一种是以Python的方德式将开展装配。nrfutil.exe同样串流文档为:,回忆起把nrfutil.exe所在附录放于在Windows环境污染变量中的。Python方德式将装配nrfutil流程如下右图:

装配Python2.7或者Python3.7,串流住址:,装配顺利后叮嘱适当Windows环境污染变量包内含Python附录通过pip装配最原到时旧版的nrfutil,即弹造出Windows转换种系统工具CMD(一个网站权限),读取如下下达:pip install nrfutil,无需以进行时nrfutil的装配。装配进行时后,在Windows转换种系统工具读取:nrfutil version,如果可以合理说明了原旧版分派者,说是明装配并未顺利

对于Windows广为应用于者,nrfutil运转须要要几个特殊的DLL托,而这几个托有些Windows装置器是没有人的,如此,可往:串流

2) 通过nrfutil降解互助身份适当性对。

私身份适当性降解下达:nrfutil keys generate priv.pem (priv.pem就是私身份适当性)公身份适当性降解下达:nrfutil keys display 便是key pk 便是format code priv.pem 便是out_file dfu_public_key.c (dfu_public_key.c就是公身份适当性)大家一一要保存好私身份适当性priv.pem,之后每次换装原到时BIOS时,都都会通过这个私身份适当性对它开展署名,一旦priv.pem放失或者被暴露,DFU将没有开展或者变得不安均

3) 叮嘱适当已按照“Nordic nRF51/nRF52研发环境污染搭设”把Nordic nRF5 SDK研发环境污染搭设顺利

4) 降解micro-ecc正则表达德式托。由于micro-ecc是第三方正则表达德式托,须要要广为应用于者自己去装配(这个是旧侵权的受限制,没适时同样载入放于在SDK中的)。叮嘱到时适当个人磁脑已装配了git和GCC载入器,然后同样浏览者SDK如下附录的build_all剧本,就可以相应进行时micro-ecc正则表达德式托的装配。

为了简便一些研发者分析,我这里在自己个人磁脑上降解了micro-ecc正则表达德式托,micro-ecc附录编排在结构上有两种:SDK14及之后原旧版是一种附录在结构上(QQ云盘压缩包内名称:micro_ecc_new.rar),SDK13和SDK12又是一种附录在结构上(QQ云盘压缩包内名称:micro_ecc_old.rar),这两个压缩包内只是附录不一样,;还有的正则表达德式托主旨其实是一样的,这两个压缩包内大家都可以在上去的QQ云盘中的看见,以供大家分析广为应用于。大家串流从前后,同样布满小王子附录无需。引意:QQ云盘;还有的micro-ecc托仅供大家分析广为应用于,如要商用,叮嘱大家按照纸片流程去降解。

5) 载入bootloadercode。将居然的dfu_public_key.c替换SDK根附录examplesdfu下的小王子份文件,然后广为应用于Keil载入如下附录中的的建设工程:

SDK根附录examplesdfusecure_bootloaderpca10040_blearm5_no_packs,或者nRF5SDK160098a08e2examplesdfusecure_bootloaderpca10040_s132_blearm5_no_packs

,将降解的hex份文件再改名为:bootloader.hex(引:本文所有建设项目都都会择一用Keil建设工程来谈解,如果你广为应用于其他IDE,叮嘱必须要其具质联的建设工程份文件开展载入,不管是Keil还是其他IDE,除了载入时候必须要的建设工程份文件不一样,其余都大同小异,大家可以举一反三进行时其他IDE的相应仅指导)

6) 载入applicationcode。叮嘱载入建设工程:

SDK根附录 examplesle_peripheralle_app_buttonless_dfupca10040s132arm5_no_packs,将降解的hex份文件再改名为:app.hex

7) 降解BootLoader settings page。Bootloader settings page加载在Flash最后一个page,值得忽略,BootLoader settings page有2个原旧版,他们的降解剧本下达如下右图:

原旧版2降解下达:nrfutil settings generate 便是family NRF52 便是application app.hex 便是application-version 1 便是bootloader-version 1 便是bl-settings-version 2 settings.hex原旧版1降解下达:nrfutil settings generate 便是family NRF52 便是application app.hex 便是application-version 1 便是bootloader-version 1 便是bl-settings-version 1 settings.hex

8) 烧写就BIOS。将上文降解的3个hex份文件和softdevice hex份文件merge变为一个份文件,然后通过nrfjprog或者nRF Connect桌面旧版开展烧写就,具质下达如下右图:

合并hex份文件下达:mergehex 便是merge bootloader.hex settings.hex 便是output bl_temp.hex mergehex 便是merge bl_temp.hex app.hex s132_nrf52_7.0.1_softdevice.hex 便是output whole.hex烧写就hex份文件下达(以nrfjprog为例):nrfjprog 便是eraseall -f NRF52 nrfjprog 便是program whole.hex 便是verify -f NRF52 nrfjprog 便是reset -f NRF52

9) 通过nrfutil降解原到时BIOS具质联的zip包内:new_app.zip。zip包内包内含原到时BIOS(原到时BIOS广播磁台名再改变为:Nordic_New,其余跟杨家BIOS很漂亮)和init包内,zip包内一般通过网路发造出通知到APPapp,APPapp便通过调制解调器串流到器材中的。降解zip包内的下达如下右图:

nrfutil pkg generate 便是application app_new.hex 便是application-version 2 便是hw-version 52 便是sd-req 0xCB 便是key-file priv.pem SDK160_app_s132.zip

其中的,便是application暗示原到时BIOShex份文件。便是hw-version暗示侧边原旧版,只要BootLoader;还有的hw version和这里的hw version具质联慢慢地,大家可以再改变为任何自己不想的倍数。便是key-file 暗示署名用的私身份适当性份文件。便是sd-req暗示杨家BIOS运转在哪个原旧版softdevice上,这个倍数一定要跟自己的softdevice相匹配,否则没有换装,各个softdevice原旧版ID分派者可以通过下达“nrfutil pkg generate 便是help”获得,如下为意味着所有softdevice ID沙罗:

10) 将“new_app.zip”复制到APP上。阿利和小米APP都可以通过账号的‘XMPP助手’在手基本上,相当简便。叮嘱引意,APPnRF Connect和nRF Toolbox都背书DFU装置制,小米APP复制的时候可以不用必须要其中的一个app。

11) 通过APP旧版nRF Connect或者nRF Toolbox开展调制解调器直升装置的换装,这里以nRF Connect为例详述换装详实流程,nRF Toolbox与此完全相同,就不便赘述

第8)步进行时后,研发板就可以假定是跑步慢慢地,并广播磁台为Nordic_Buttonless 相连该器材,使能CCCD(这一步除此以外),然后必须要“DFU”,如下右图: 必须要“DFU”后,将踩造出一个视窗,让你必须要原到时BIOS具质联的zip包内。由于zip包内放于在了账号请忽略的download附录下,我们须要要通过份文件JavaScript看见这个zip包内,大家可以到时用种系统内置的份文件JavaScript弹造出这个zip包内(如果弹造出败北,那么大家就要去串流一些第三方的份文件JavaScript了,比如es explorer),具质转换应用程序如下右图: 一旦zip包内弹造出顺利,换装现实生活开始,应用程序如下右图: 换装顺利后,器材将运转原到时BIOS,即广播磁台英文名字将变变为:Nordic_New,如下右图:

如上以nRF52832/S132为例详述了Nordic SDK发挥作用无键盘德式署名德式调制解调器直升装置的换装的详实流程,Nordic SDK有多个原旧版,从SDK13.0.0到过去SDK16.0.0,他们的换装流程之外很漂亮,大家意味着可以简述上述流程来动手。SDK12换装流程也与上述流程基本一样,唯一如下地方须要要引意一下:

载入applicationcode的时候,把如下上下文引掉,否则都会造变为BootLoader和application两者的hex份文件相冲突

3.2节都会按照上述流程,对一些开端的安均德式BLE OTA案例开展飞行测试,并降解可同样运转的剧本,以供大家简述。

3.2 各种安均德式调制解调器直升装置的换装案例

3.1节是以换装nRF52832 application为例,详实详述了安均德式BLE OTA流程。除了换装application,有的人还须要要换装softdevice和BootLoader;除了52832,有的人还都会用52840/52833/52811/52810/51822等;除了SDK16.0.0,有的人还都会用SDK15.3/15.2/14.2/12.3等。为此我择一了一些开端组合,将他们DFU用得的所有剧本都动手好了,并开展了实质飞行测试,有须要要的可以去QQ网盘串流。这些剧本在QQ网盘的命名规则为:安均方德式将_BIOS链路应用程序_换装哪一大多BIOS_SDK正德式旧版_ROM型号.rar,比如secure_ble_S132_app_SDK160_nRF52832.rar暗示择一用安均署名,BIOS通过BLE链路,BLE广为应用于S132两国政府缓冲一区,换装的时候只换装application而不换装BootLoader和SoftDevice,基于SDK16.0.0和nRF52832。

以外QQ网盘上传了如下安均德式BLE OTA举例来说剧本(引:这些剧本都经过我的飞行测试,均都可以同样运转):

secure_ble_S132_app_SDK160_nRF52832.rarsecure_ble_S140_app_sd_bl_SDK160_nRF52840.rarsecure_ble_S132_app_SDK153_nRF52832.rarsecure_ble_S132_app_SDK152_nRF52832.rarsecure_ble_S132_app_SDK150_nRF52832.rarsecure_ble_S140_app_SDK150_nRF52840.rarsecure_ble_S132_app_SDK142_nRF52832.rarsecure_ble_S132_app_SDK123_nRF52832.rarsecure_ble_S130_app_SDK123_nRF51.rar3.3 通过UART口开展安均德式BIOS换装举例来说剧本

我们以nRF52810为例来详述如何通过UART开展安均德式BIOS换装流程:

1) 叮嘱简述3.1节第1)到第4)步,进行时nrfutil装配,mico-ecc正则表达德式托降解,以及互助身份适当性降解

2) 载入bootloadercode。将居然的dfu_public_key.c替换SDK根附录examplesdfu下的小王子份文件,适当sdk_config.h中的的NRF_BL_DFU_ENTER_METHOD_BUTTON为1,然后广为应用于Keil载入如下附录中的的建设工程:

SDK根附录 examplesdfusecure_bootloaderpca10040e_uartarm5_no_packs

,将降解的hex份文件再改名为:bootloader.hex

3) 载入applicationcode。3.1节诉说是OTA的时候,我们必须要的案例是ble_app_buttonless_dfu,因为我们是通过调制解调器给器材转发一条下达,从而让器材转回DFU方德式将。通过串口换装BIOS,如何转回DFU方德式将,各不相同你的广为应用新设计,你可以择一用通过转发调制解调器下达让其转回DFU方德式将,也可以通过上磁检查键盘前提按下以要求前提转回DFU方德式将。如果想择一用ble_app_buttonless_dfu作为application,那么你须要要把该建设工程中的的main线性如下上下文删减(这些上下文是为调制解调器旧版BootLoader新设计的,我们过去是UART旧版BootLoader,不背书这些上下文):

err_code = ble_dfu_buttonless_async_svci_init();APP_ERROR_CHECK(err_code);

这里我们必须要以上磁检查键盘的方德式将来要求前提转回DFU方德式将,并以ble_app_blinky作为广为应用案例,叮嘱同样载入如下建设工程:

SDK根附录examplesle_peripheralle_app_blinkypca10040es112arm5_no_packs,将降解的hex份文件再改名为:app.hex

4) 降解BootLoader settings page并同时烧写就杨家BIOS,单击“program.bat”无需进行时,这个剧本是广为应用于nrfjprog来进行时BIOS烧写就的。

5) 降解原到时BIOSzip包内并开展UART DFU,单击“dfu.bat”无需进行时,这个剧本是广为应用于nrfutil作为UARTPSP,并将原到时BIOS通过个人磁脑COM口承继器材的。叮嘱回忆起一定要修正剧本中的的UART具质联的个人磁脑COM口,否则换装没有进行时。

引:所有bat剧本都可通过游标必须要Notepad++弹造出,然后查看;还有包内含的具质下达,并按照自己的须受限制开展修正。如须要更进一步明白剧本中的的下达,叮嘱简述3.1节的说是明。

上述所有转换流程已外卖内并上带到QQ网盘,叮嘱去网盘串流份文件:secure_uart_app_SDK160_nRF52810.rar,这个份文件并未过我的飞行测试,大家可以同样广为应用于。

3.4 通过USB口开展安均德式BIOS换装举例来说剧本

我们以nRF52840为例来诉说是如何通过USB开展安均德式BIOS换装,其实通过USB口换装BIOS流程与3.3节的转换却是很漂亮,唯一有所不同的是,必须要如下附录的BootLoader建设工程开展载入:

SDK根附录 examplesdfusecure_bootloaderpca10056_usbarm5_no_packs

通过USB口开展安均德式BIOS换装举例来说剧本已外卖内并上带到QQ网盘,叮嘱去网盘串流份文件:

secure_usb_app_SDK160_nRF52840.rar,这个份文件并未过我的飞行测试,大家可以同样广为应用于。

3.5 通过USB口开展开放于德式BIOS换装举例来说剧本

我们还是以nRF52840为例来诉说是如何通过USB开展开放于德式BIOS换装,其换装流程与3.3节的转换却是很漂亮,唯一有所不同的是,必须要如下附录的BootLoader建设工程开展载入:

SDK根附录 examplesdfuopen_bootloaderpca10056_usbarm5_no_packs

具质剧本已上传QQ网盘,叮嘱串流:

open_usb_app_SDK160_nRF52840.rar,这个份文件并未过我的飞行测试,大家可以同样广为应用于。

3.6 开放于德式调制解调器直升装置的换装(Legacy DFU)流程

实际上开放于德式OTA,是仅指OTA现实生活中的,不须要要验原到时BIOS的署名,假定是BootLoadercode;还有不包内含公身份适当性及具质密码本正则表达德式托,换装的时候,只密钥原旧版分派者,原旧版密钥通过,就可以开始换装程序来中。Nordic SDK以外背书两套开放于德式OTA提议,一套是SDK15和SDK16发放的,一套是SDK9/SDK10/SDK11发放的。SDK15/16发放的开放于德式OTA仅指导方法和程序来中,与安均德式OTA之外一样,无论如何删减了署名验签大多。SDK9/SDK10/SDK11发放的开放于德式OTA也叫legacy OTA DFU,它的仅指导程序来中与SDK15/16略有有所不同,请忽略将以nRF52832/S132为例,详述如何在SDK11中的发挥作用无键盘德式开放于德式调制解调器直升装置的换装,详实流程如下右图:

1) 载入bootloadercode,叮嘱广为应用于Keil载入附录“nRF5_SDK_11.0.0_89a8197examplesdfuootloaderpca10040dual_bank_ble_s132arm5_no_packs”中的的建设工程,将降解的hex份文件再改名为bootloader.hex

2) 载入applicationcode,叮嘱载入附录“nRF5_SDK_11.0.0_89a8197examplesle_peripheralble_app_hrspca10040s132_with_dfuarm5_no_packs”中的的建设工程,将降解的hex份文件再改名为app.hex

3) 将softdevice,bootloader和app三个hex份文件化学合变为一个份文件,下达如下右图:

mergehex 便是merge s132_nrf52_2.0.1_softdevice.hex app.hex bootloader.hex –output whole.hex

4) 烧写就BIOS到器材中的,大家可以用nRF Connect桌面旧版烧写就,也可以通过nrfjprog烧写就,nrfjprog烧写就下达如下右图:

nrfjprog.exe 便是eraseall -f NRF52nrfjprog 便是program whole.hex 便是verify -f NRF52

5) 另外我们还须要要在Flash中的写就一个application适当标志位,从而上磁后程序来同样跑步到application中的去督导,而不是逗留在bootloader中的不造出来,其具质联的下达如下右图:

nrfjprog 便是memwr 0x0007F000 便是val 0x01 便是verify -f NRF52

6) 用杨家原旧版的nrfutil降解原到时BIOS具质联的zip包内。该zip包内除了包内含原到时BIOSimage,还包内含一些的设计分派者。换装时,zip包内都会通过网路发造出通知到APP末端app,APP末端app便把zip包内承继调制解调器器材以开展BIOS换装。叮嘱广为应用于杨家原旧版nrfutil(正德式旧版0.3.0)来降解该zip包内,杨家原旧版nrfutil跟随nRFgo studio一起装配的,只要你装配了nRFgo studio,杨家原旧版nrfutil就都会相应装配好,并放于在附录“C:Program Files (x86)Nordic SemiconductorRFgo Studio”中的。降解zip包内具质联的下达如下右图:

nrfutil dfu genpkg 便是application app_new.hex 便是application-version 1 SDK110_app_s132.zip

7) 把上述的‘SDK110_app_s132.zip’在手到APP中的,阿利和小米APP都可以通过账号的‘XMPP助手’在手基本上,相当简便。引:APPnRF Connect和nRF Toolbox都背书DFU装置制,小米APP复制的时候可以不用必须要其中的一个app。

8) 广为应用于nRF Connect或者nRF Toolbox来进行时DFU现实生活。这里以nRF Connect为例来详述整个换装现实生活。

顺利督导完第5)步后,如果研发板运转假定是,那么它将开展广播磁台,广播磁台英文名字为:Nordic_HRM 相连该器材,并使能CCCD,然后必须要“DFU” 必须要“DFU”后,将踩造出一个视窗,让你必须要原到时BIOS具质联的zip包内。由于zip包内放于在了账号请忽略的download附录下,我们须要要通过份文件JavaScript看见这个zip包内,大家可以到时用种系统内置的份文件JavaScript弹造出这个zip包内(如果弹造出败北,那么大家就要去串流一些第三方的份文件JavaScript了,比如es explorer),具质转换应用程序如下右图: 一旦zip包内弹造出顺利,换装现实生活开始,应用程序如下右图: 换装顺利,器材将相应开启,此时你都会看见原到时BIOS并未在运转,广播磁台英文名字也变变为了:Nordic_HRM_new,如下右图:

以外QQ网盘上传了如下开放于德式BLE OTA举例来说剧本(引:这些剧本都经过我的飞行测试,均都可以同样运转):

open_ble_S132_app_SDK110_nRF52832.raropen_ble_S130_app_SDK110_nRF51.rar

如果你的广为应用是基于SDK11研发的,并且须要要内置DFU装置制,叮嘱简述上述案例ble_app_hrs来再生DFU装置制,主要仅指导包内括两大多:一把BLE_DFU_APP_SUPPORT这个弘包内括的所有code在手到你的建设工程中的,二如果你的器材背书bonding的话,还须要把Device manager具质code也在手到你的建设工程中的,如此无需进行时DFU装置制的再生。

详解如何再生DFU装置制到ble_app_uart

为了让SDK14及之后原旧版的ble_app_uart具有DFU装置制,有2种过分,一是把NUS服务建设项目再生到ble_app_buttonless_dfu中的,这种分析方法相对来说是更简单,大家可以自己去实践一下;二是把DFU服务建设项目再生到ble_app_uart中的,这种再生方德式将考验更大,但更最大限度我们明白DFU的仅指导方法,我们过去就来详述如何给ble_app_uart加在上OTA装置制。值得忽略,OTA现实生活中的,APP跟器材可以开展择一取和bonding,也可以用需忽略开展调制解调器网络系统。择一取bonding的时候,我们可以让BootLoader和application共享bonding分派者,也可以只让application开展择一取bonding,而BootLoader还是以需忽略方德式将开展调制解调器网络系统。

Nordic并未把DFU服务建设项目动手变为了一个广为应用程序来,大家只要把这个广为应用程序来加在到自己的广为应用中的,然后进行时一些不能的的设计,格德式化以及预处理线性的撰写就,便加在上把SVCI广为应用程序来(SVCI广为应用程序来主要用来修正BootLoader的一些的设计匹配)加在入到广为应用中的再生无需大功告变为。在SDK中的,DFU服务建设项目的英文名字是:BLE_DFU_SERVICE,这个服务建设项目放于在份文件ble_dfu.c中的,而ble_dfu.c又有两个后末端发挥作用:ble_dfu_unbonded.c和ble_dfu_bonded.c,分别具质联无bonding需忽略调制解调器相连和有bonding的调制解调器相连,请忽略也将分这两种持续性详实详述再生现实生活。

4.1 需忽略假定是相连OTA(无bonding)

1) 用Keil弹造出如下建设工程:SDK根附录examplesle_peripheralle_app_uartpca10040s132arm5_no_packs

2) 加在到DFU服务建设项目有关的份文件,附录和弘概念。首到时加在到如下DFU附录及具质份文件:

在define中的加在到这些弘:DEBUG DFU_SUPPORT BL_SETTINGS_ACCESS_ONLY NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1,其中的DEBUG弘只是为了检查和简便而设置的,跟DFU本身无关。DFU_SUPPORT是我用来高度集中我加在到的DFUcode的,删减DFU_SUPPORT,将不载入所有DFU有关code。其余的弘都是种系统内置的,如果要背书DFU,就不能要加在到。

然后包内含如下附录:

3) 修正sdk_config.h份文件。首到时我们须要要使能BLE_DFU广为应用程序来,及必须要OTA调制解调器相连方德式将,如下为广为应用于需忽略开展调制解调器网络系统的的设计:

#define BLE_DFU_ENABLED 1#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0

同时我们还须要要修正softdevice的设计。过去整个广为应用包内括2个供应商快捷键UUID:NUS和DFU(其实这两个UUID可以化学合变为一个,但由于近代原因,DFU和NUS分别广为应用于了两个有所不同的vs UUID),相应地ATT table size也要变大,然后转换种系统RAM在在住址也须要要跟着变,如下(引:这里的NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 设置得仍要偏于大):

#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1600#define NRF_SDH_BLE_VS_UUID_COUNT 2

修正转换种系统RAM在在住址,如下:

4) 修正main.c份文件。首到时加在到如下头份文件:

#include "ble_dfu.h"#include "nrf_bootloader_info.h"#include "nrf_power.h"

然后在main线性的开始处,加在到修正BootLoader广播磁台英文名字的code,由于iOS DFU的时候可择一就都会去再改广播磁台英文名字,为了相容iOS,这悄悄code是不能的:

err_code = ble_dfu_buttonless_async_svci_init();APP_ERROR_CHECK(err_code);

然后在services_init()中的加在到ble dfu服务建设项目

dfus_init.evt_handler = ble_dfu_evt_handler;err_code = ble_dfu_buttonless_init(Codfus_init);APP_ERROR_CHECK(err_code);

ble_dfu_evt_handler预处理线性的撰写就,大家只要按照受限制来,就没疑问,如果广为应用只背书一个相连,那么ble_dfu_evt_handler可以同样为空。如果广为应用背书多个相连,可以简述ble_app_buttonless_dfu过分,这里就不刷code了。

5) 在踩转到bootloader早先,如果你想动手一些专门的code管控,比如进行时pending的Flash转换,比如重开某些广为应用程序来,那么你可以引册一个app_shutdown_handler来动手这些仅指导。(引:这一步不是不能的,是除此以外的!)

NRF_PWR_MGMT_HANDLER_REGISTER(app_shutdown_handler, 0);

6) (这一步除此以外)早先的ble_app_uart是没有人BootLoader的,所以开启慢慢地相当快。过去加在了BootLoadercode,为了减慢system off引导的加速,可以概念如下上下文,

nrf_power_gpregret2_set(BOOTLOADER_DFU_SKIP_CRC);

然后到时disable softdevice,然后便转回system off方德式将。这一步本身跟DFU没有人什么关系,主要是为了减慢程序来开启加速而MLT-的。

7) 载入建设工程,并将降解的hex份文件再改名为“app.hex”

8) 然后按照3.1节的流程一步一步进行时更更进一步的DFU现实生活。

4.2 bonding相连OTA

4.1节的建设工程并未再生了DFU装置制,过去我们便把bonding装置制再生到4.1节建设工程上,就可以让我们的广为应用同时背书DFU和bonding。Bonding装置制是通过peer_manager广为应用程序来来发挥作用的,大家只要把peer_manager有关的份文件加在到进来,就可以发挥作用bonding的目标。

1) 弹造出4.1节的建设工程

2) 加在到如下份文件:

3) 修正sdk_config.h份文件,须要要修正多个地方,如下:

#define PEER_MANAGER_ENABLED 1#define FDS_ENABLED 1#define NRF_SDH_BLE_SERVICE_CHANGED 1#define NRF_FSTORAGE_ENABLED 1#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 1

当NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS分设1时,暗示application将与PSP开展bonding,同时该bonding分派者将共享给BootLoader,假定是,转回bootloader方德式将后,PSP将广为应用于在此之前的bonding分派者与器材开展加在密相连。

4) 在main.c份文件开首,包内含如下头份文件:

#include "peer_manager.h"

5) 在main线性中的加在到peer_manager_init(),其概念如下右图:

static void peer_manager_init(){ ble_gap_sec_params_t sec_param; ret_code_t err_code; err_code = pm_init(); APP_ERROR_CHECK(err_code); memset(Cosec_param, 0, sizeof(ble_gap_sec_params_t)); // Security parameters to be used for all security procedures. sec_param.bond = SEC_PARAM_BOND; sec_param.mitm = SEC_PARAM_MITM; sec_param.lesc = SEC_PARAM_LESC; sec_param.keypress = SEC_PARAM_KEYPRESS; sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES; sec_param.oob = SEC_PARAM_OOB; sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE; sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE; sec_param.kdist_own.enc = 1; sec_param.kdist_own.id = 1; sec_param.kdist_peer.enc = 1; sec_param.kdist_peer.id = 1; err_code = pm_sec_params_set(Cosec_param); APP_ERROR_CHECK(err_code); err_code = pm_register(pm_evt_handler); APP_ERROR_CHECK(err_code);}

加在到pm_evt_handler概念,code如下右图:

static void pm_evt_handler(pm_evt_t const * p_evt){ pm_handler_on_pm_evt(p_evt); pm_handler_flash_clean(p_evt);}

相比较要健康检查如下code有没有人加在到,由于iOS DFU的时候可择一就都会去再改广播磁台英文名字,为了相容iOS,这悄悄code是不能的

err_code = ble_dfu_buttonless_async_svci_init();APP_ERROR_CHECK(err_code);

6) 在ble_evt_handler中的封禁BLE_GAP_EVT_SEC_PARAMS_REQUEST是从,因为这个是从在peer_manager广为应用程序来中的并未开展管控了,这里便管控一次,都会产生异常:

// case BLE_GAP_EVT_SEC_PARAMS_REQUEST:// // Pairing not supported// err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);// APP_ERROR_CHECK(err_code);// break;

7) 修正advertising_start概念,上升在封禁bonding分派者装置制(如果你不须要要这个装置制,也可以不再改)

8) (此步除此以外)多半是,如果广为应用于者在APP末端把择一取分派者删减了,为了安均起见,器材末端也须要要把具质择一取分派者清掉,然后才可以受限制APP和器材便次开展择一取和bonding。如何即都会器材末端bonding分派者的封禁转换?可以通过键盘检查的方德式将来动手,比如以外我们这个案例的过分。但是有很多器材没有人键盘,而且很多人期望这种二次择一取的转换具质联用于者来说是无感,即哪怕广为应用于者删减了APP末端择一取分派者,如果广为应用于者想筹划第二次择一取叮嘱求,器材也能放弃,而且转换现实生活跟广为应用于者第一次筹划择一取叮嘱求的现实生活很漂亮。Nordic SDK其实是相容这种转换的,广为应用于者只须要在pm_evt_handler()中的加在到如下code无需:

if (p_evt->evt_id == PM_EVT_CONN_SEC_CONFIG_REQ) { pm_conn_sec_config_t cfg; cfg.allow_repairing = true; pm_conn_sec_config_reply(p_evt->conn_handle, Cocfg); }

9) 上述所有code都包内括在“BONDING_SUPPORT”弘中的。

10) 载入建设工程,将降解的hex份文件再改名为app.hex

11) 然后按照3.1节流程来督导OTA现实生活,不过如下几点须要要引意:

如果你在广为应用中的把NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS分设1,那么bootloadercode就不能择一用可择一的设计,叮嘱修正bootloader建设工程中的的sdk_config.h份文件中的的如下弘概念,然后重原到时载入降解原到时的bootloader.hex。 #define NRF_DFU_BLE_REQUIRES_BONDS 1 #define NRF_SDH_BLE_SERVICE_CHANGED 1在nRF Connect中的勾择一“keep bond information”择一项,如下: APP相连器材顺利后,叮嘱手动使能CCCD,以让APP相应筹划bonding叮嘱求 DFU换装顺利后,器材将都会与APP相应重连,此时须要浏览者“Refresh services”,以获得器材最原到时服务建设项目沙罗,如下:

上述code建设工程我已外卖内变为:ble_app_uart_ota_SDK16_0_0.rar,并上带到QQ网盘,大家串流从前解压缩到:SDK根附录examplesle_peripheral这个附录下,就可以同样载入和运转。DFU现实生活中的请注意的所有剧本我也帮大家动手好了,大家可以同样串流从前广为应用于,其中的secure_ble_S132_uart_SDK160_nRF52832_Nobonding.rar具质联需忽略调制解调器链路,secure_ble_S132_uart_SDK160_nRF52832_bonding.rar具质联bonding调制解调器链路。

5、 APP末端DFU简述code

Nordic不仅发放DFU器材末端的简述code,同时发放APP末端的简述code。Nordic分别研发了Android旧版和iOS旧版的DFU托,大家可以同样拿回来广为应用于,内置到自己的行进末端app中的,这两个托都放于在github上,文档如下右图:

Android旧版DFU托:iOS旧版DFU托:

Nordic还发放了一个行进末端app:nRF Toolbox,nRF Toolbox是codeLinux的,;还有也内置了纸片说明了的DFU托,大家可以简述nRF Toolbox来研发自己的行进末端app。nRF ToolboxGCC也可以在github上看见:

Android旧版nRF Toolbox源code及研发说是明叮嘱简述:iOS旧版nRF Toolbox源code及研发说是明叮嘱简述:

nRF Toolbox转换种系统应用程序如下右图:

文中刊文于:

刊文自:嵌入德式报章杂志

文章;也:博客园

文章文档:

旧侵权指明:本文由来网络,APP传达基本知识,旧侵权归制作公司组所有。如涉及作品旧侵权疑问,叮嘱关系我开展封禁。

蒙脱石散能治口腔溃疡吗
感冒能吃安奇阿莫西林克拉维酸钾片吗
经常便秘怎么办
宝宝喝牛奶腹泻用什么药好
怎么治疗关节早起僵硬