NRF51822 SDK12的空中升级

        nrf51822 SDK12版本及以后的版本的空中升级是加密的,这种加密的好处就是,有一对密钥来实现加解密。公钥添加在BootLoader程序中,源文件为dfu_public_key.c,私钥用于加密要进行升级的.hex文件,通过官方的软件最终生成private.key的私钥文件和dfu_public_key.c的公钥文件,有了这一对密钥,需要升级的文件才能被设备识别解析,否则即便任何人拿到了升级的文件,但是由于没有相应的BootLoader代码程序,最终也无法完成升级。这样很好地保证了产品的软件的更新迭代,同时也不会被窃取的风险。在实际的应用场景中,你可以给客户提供升级的文件,但客户那边的产品必须烧录了你这边的BootLoader程序,否则也没有用,因为只有你的BootLoader中才有正确公钥与你提供的升级文件中的私钥相对应,从而保证了自己软件的保密性。

       至于升级的前期准备工作比较复杂,有一份“SDK12空中升级详细步骤操作.pdf”的PDF文档有详细的说明,升级的所有步骤均实现按照该文档的描述进行,该文档的例子是针对nrf52832的,所以需要将IC型号换为nrf51822,其中需要改动的地方如下,SDK12版本一直有BUG,建议使用SDK12.3版本,是BUG最少的版本,一下问题说明均是针对SDK12.3版本的:

1、加密升级文件,我们把要升级的HEX文件更改名称为application.hex,协议栈版本采用S130的2.0.1版本,ID号为0x87,按照“SDK12空中升级详细步骤操作.pdf中的操作步骤,在命令框中输入下述命令,用私钥对要升级的HEX文件进行加密合成想要升级的文件的压缩包

nrfutil pkg generate --hw-version 51 --application-version 1 --application application.hex --sd-req 0x87 --key-file private.key cc_Dfu12.3.zip 

2、生成Bootloader的设定程序,bootloader_setting.hex,这个文件的作用是保证在同时烧录协议栈,bootloader程序和应用程序的时候需要有一个引导程序保证程序上电后执行在应用程序区,如果要合成一个Hex文件时,也需要这个文件

nrfutil settings generate --family NRF51 --application application.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 bootloader_setting.hex

       3、在私钥进行生成的时候输入 python setup.py install 无效,总是出错,这个时候应该和网络无关,这里出现一个问题,安装一直不能成功,最终在DOS窗口输入pip install -r requirements.txt指令后,保证编译成功后,再输入python setup.py install 编译就通过了。

       4、对于升级的应用程序,升级的ROM大小也是有问题的,对比文档针对nrf52832的修改,可以将IROM1:ROM起始地址0x1B000,ROM大小0x25000,修改为IROM1,ROM起始地址0x1B000,ROM大小改为0x1FC00,我修改的工程为官方提供的experimental_ble_app_buttonless_dfu例程,如果不添加任何服务,这样修改已经可以满足要求,如果添加其他的服务,就无法运行,一般是程序死在了协议栈初始化的位置,错误提示没有足够的存储空间,这个时候是由于添加了新的服务,协议栈需要更多的RAM空间,此时需修改改为,缩小应用程序的RAM空间以给蓝牙协议栈提供更多的RAM,就可以满足要求了,记得在添加服务的时候记得修改sdk_config.h中的宏定义开启相应服务的使能,针对空中升级的BUG,SDK13修改了write属性和ROM分配的问题,但问题是SDK13不支持nrf51822,所以目前只能修改SDK12.3完成DFU功能。

5、在Bootloader工程中可以把按键给屏蔽掉,如果要屏蔽掉的话,也需要在nrf_dfu.c中将if (nrf_gpio_pin_read(BOOTLOADER_BUTTON) == 0){return true;}的语句屏蔽掉,否则由于按键的检测错误会让程序一直处于Bootloader程序中,无法完成跳转,因为在IC上电的时候会检测按键状态决定是否进入空中升级;

谢谢“SDK12空中升级详细步骤操作.pdf”的作者小潘的分享

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值