Nordic 52832 ―― OTA 流程源码分析(二)

匿名 (未验证) 提交于 2019-12-03 00:26:01

写在前面:

之前已经写过OTA过程是如何跳转进入bootloader的,在跳转之前主要做了什么,请参考以下文章,使用的SDK为SDK12.2.0,个人QQ:993650814

Nordic 52832 ―― OTA 流程源码分析(一),

正文:

一、 准备工作:如何编译bootloader以及让他正常工作请参考如下文章:

DFU升级

二、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的有效性,然后跳转运行




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!