NRF52840 BLE OTA
1 . 概述
一般MCU DFU(Device Firmare Update)接口为USB、UART、I2C等有线接口。对于NRF52840这颗MCU来说,通过BLE可以做到无线的DFU,即OTA(over the air) DFU。这里主要试下Nordic官方的BLE OTA例程,看看有没有上面需要特别注意的点。
2. nRF5 SDK DFU工作原理
这里介绍下nRF5 SDK Secure DFU(SoftDevice-S140)工作的原理,即需要加密升级过程。
2.1 ROM空间规划
不同其他家MCU bootloader的放置位置,NRF52系列的Bootloader放置在App的后面,因为前面放置了SoftDevice即协议栈,SoftDevice里面前4K(0x1000)空间放置的是MBR( master boot record) 主引导记录部分,上电后由MBR决定跳转到Bootloader还是SoftDevice里面运行,MBR会读取NRF_UICR->NRFFW[0] 的值,不为0xFFFFFFF时即认为bootloader是有的,所以跳转到NRF_UICR->NRFFW[0]对应的值里运行。所以bootloader工程里会通过编译指令把bootloader起始地址设置到NRF_UICR->NRFFW[0](0x10001014)位置上, 此外bootloader 还会在MBR_BOOTLOADER_ADDR(0x0FF8)地址上写入Bootloader起始地址,在MBR_PARAM_PAGE_ADDR(0x0FFC)地址上也写入MBR Params Page Address。
这里APP是有两块的,就是Double bank架构,每次都运行App bank0里的程序,bootloader先更新App Bank1,等App Bank1更新OK后,再把Bank1里的内容搬移到Bank0,就完成了一次更新。这样架构能保证即使更新失败时也有设备也有正常功能。
Reverse区域可以放置一些不希望被更新掉的App数据
Bootloader(空间占用24K)会判断是否需要跳转到App运行,还是留在bootloader执行升级DFU操作,判断条件如下
- 按键是否按下(GPIO状态)
- 保持寄存器GPREGRET1是否为0x