针对Nordic BLE,nRF5协议栈设备OTA 之修改boot区大小修改
Platform:Keil5.14、nRF5_SDK_11.0.0_89a8197
【SPP】Content:
1、NORDIC 51 OTA简介
对于nRF51822来说,升级过程有点特殊,nRF51822芯片内部有段SoftDevice的程序,它是芯片上电后首次运行的程序,不过这段程序不负责程序升级,它是Nordic官方提供的蓝牙协议栈程序,当然它也具备一点bootloader的功能,也就是说,芯片上电后,它会判断芯片内部是否有bootloader代码(bootloader代码位置固定,所以它能判断出是否有合法的bootloader程序),若有bootloader程序则会跳转到bootloader程序执行,若没有bootloader程序而只检测到了用户的app程序,那么就直接跳转到app程序运行,当然这个bootloader程序就是我们自己主要改写的代码,只是它存储的位置和app程序是不一样的。
1.1、Flash空间布局
图片来源: 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)。
1.2.1 烧写程序时,必须先擦除整个芯片,然后先烧写softdevive,然后再烧boot,烧写工具必须为nrfjprog。
至此boot区大小已经修改成功为0x7800,我们可以在boot区移植更多功能的代码了;
原文:https://blog.csdn.net/qq_33897480/article/details/80082478