写在前面:
之前已经写过OTA过程是如何跳转进入bootloader的,在跳转之前主要做了什么,请参考以下文章,使用的SDK为SDK12.2.0,个人QQ:993650814
Nordic 52832 ―― OTA 流程源码分析(一),
正文:
一、 准备工作:如何编译bootloader以及让他正常工作请参考如下文章:
二、OTA基本知识储备:
MBR是如何获取bootloader地址的呢?
在nrf_bootloader_info.c中有个宏定义,
这样UICR就得到了bootloader的起始地址,然后每次启动时,MBR都会检查boot是否存在。
2、52832 Memory Laylout 须知:
3. Nordic OTA分dual bank和single bank,application、协议栈、和bootloader都可以升级,这里只分析OTA application:
dual bank updates:
single bank updates:
三、源码分析:
1、OTA的setting结构体,里面包含了OTA过程中的一些信息,定义在nrf_dfu_types.h中:
2、nrf_dfu_settings_init 函数
3.nrf_dfu_continue 函数
这个函数的作用是通过setting中的信息判断目前使用的是哪个bank,并以此来决定是否进行代码搬运
4、nrf_dfu_continue_bank
这个函数的作用是判断需要搬运的是app、bootloader、SoftDevice还是bootloader+SoftDevice
6、nrf_dfu_app_is_valid 函数
7、
8、nrf_dfu_transports_init 函数
9、ble_dfu_transport_init函数
这个函数就是初始化了一下ble的参数之类的
10.通过Ble 接受数据然后教研然后写flash的操作等的细节这里不讲。
11、最后,检查app的有效性,然后跳转运行