基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小

    本文主要对nRF51822的OTA过程进行详细说明,主要通过改写nRF51822_sdk11中的bootloader,实现空中升级的功能。OTA流程:Fireware由app区中的ftp协议下载存于外部flash,然后由bootloader区将Fireware从外部flash导入nRF51822,实现升级的功能。

1、NORDIC 51 OTA简介

      对于nRF51822来说,升级过程有点特殊,nRF51822芯片内部有段SoftDevice的程序,它是芯片上电后首次运行的程序,不过这段程序不负责程序升级,它是Nordic官方提供的蓝牙协议栈程序,当然它也具备一点bootloader的功能,也就是说,芯片上电后,它会判断芯片内部是否有bootloader代码(bootloader代码位置固定,所以它能判断出是否有合法的bootloader程序),若有bootloader程序则会跳转到bootloader程序执行,若没有bootloader程序而只检测到了用户的app程序,那么就直接跳转到app程序运行,当然这个bootloader程序就是我们自己主要改写的代码,只是它存储的位置和app程序是不一样的。

1.1、Flash空间布局

基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第1张图片

基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第2张图片

 图片来源: Nordic SDK 文档(https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v8.x.x/doc/8.1.0/s130/html/a00102.html)

1.2、bootloader起始地址修改

         本文Applicaton区地址为0x1B000-0x3C000,大小为132k,由Flash布局可知bootloader区地址为0x3C000-0x40000,大小为16k。 由于我们需要在boot区操作外部flash,需要移植spi-flash通用驱动库,导致boot区不够用。通过阅读SDK文档,得知我们可以通过修改boot起始地址,改变boot区域的大小。
        例如:修改BOOTLOADER_REGION_START宏为0x38400,然后将工程中配置也修改为0x38400,将size调整相对应大小。
注:nRF51822_AC的flash为256k,所以最大地址为0x40000,故将size改为0x40000-0x38400。(所有地址必须为0x400的整数倍,由于flash的单位为0x400)。
     基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第3张图片

基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第4张图片

        1.2.1 烧写程序时,必须先擦除整个芯片,然后先烧写softdevive,然后再烧boot,烧写工具必须为nrfjprog。

基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第5张图片


                        至此boot区大小已经修改成功为0x7800,我们可以在boot区移植更多功能的代码了                  

基于FTP的Nordic nRF51822 OTA 教程一之修改boot区大小_第6张图片

你可能感兴趣的:(nordic蓝牙)