-------------------------------------------------------------------------------------------------------------------------------------
基于前面的蓝牙OTA空中升级(一)的基础上,这里将以BLE_UART为例,将BLE_UART实现带OTA功能的程序,依然是方式二不带库升级方式。并且扩大APP的空间,所以我们依然需要四个HEX文件同时烧写。
分别是
1、 CH58xBLE_ROMx.hex ——带x后缀,指蓝牙库是靠着flash最后的位置放的,可以让APP增大至最大
2、 OnlyUpdateAPP_BLE_UART.hex ——设置应用层APP程序中不带库编译,能大幅度降低RAM使用率
3、 OnlyUpdateApp_IAP.hex —— IAP的是将手机APP发送的固件直接写到APP区域
4、 OnlyUpdateApp_ JumpIAP.hex ——用来跳入IAP中,文件中启动文件中的地址也需对应修改为IAP的起始地址
第一步:
修改JumpIAP中启动文件配置参数,JumpIAP只是跳转到IAP中,因为APP空间要扩大,所以IAP地址要后移,继而要修改JumpIAP启动文件的起始地址。
JumpIAP本身就4K,将APP从44K扩大了192K,所以CH582的IAP的起始地址是4K + 236K = 240K。
在OnlyUpdateApp_ JumpIAP中将启动文件中地址改为240K转换后的0x0003C000
第二步:
修改APP中的参数,由于是在BLE_UART程序中添加OTA功能,在预处理这里添加LIB_FLASH_BASE_ADDRESSS=0x00040000和CH58xBLE_ROM=1这个宏
第三步:
修改Link.ld文件中,将OnlyUpdateApp_Peripheral例程中Link.ld文件复制到OnlyUpdateApp_BLE_UART的Link.ld文件中,再将44K跟改为236K
第四步:
修改startup_CH583.S,将OnlyUpdateApp_Peripheral例程中startup_CH583.S文件复制到OnlyUpdateApp_BLE_UART的startup_CH583.S文件中,
再将j 0x10000修改为j 0x40000
第五步:
添加OTA升级功能的程序至OnlyUpdateApp_BLE_UART中, 在蓝牙往串口发送数据的部分,添加JUMP_OTA函数,通过判断蓝牙发送的数据来决定是否跳转到OTA升级功能。
在peripheral_main.c中添加用于APP判断文件有效性的程序部分,否则升级时,app会认为存放的hex是非法的。
第六步:
修改OnlyUpdateApp_IAP中配置参数;
在预处理中添加LIB_FLASH_BASE_ADDRESSS=0x00040000和CH58xBLE_ROM=1
在Link.ld文件中,由于起始地址为4K+236K=240k,填入0x0003C000。
将FLASH (rx) : ORIGIN = 0x0000C000, LENGTH = 16K,修改为FLASH (rx) : ORIGIN = 0x0003C000, LENGTH = 16K。
在OTA.h文件中,将APP大小修改为236*1024
在startup_CH583.S文件,将j 0x10000修改为j 0x40000
这样所需要的文件都更改好了,现在只要将这三个文件加上库文件,一起烧录进芯片。
第七步:烧录程序,观察现象
1、将APP、LIB、IAP、JUMPIAP的四个HEX同时烧录至芯片。
2、利用BLE调试助手,连接蓝牙设备,发送数据0x77,蓝牙会自动断开,会跳到OTA升级的部分。
3、利用OTA升级工具,搜索OTA升级的蓝牙名字为OTAOTA_OTAOTA_OTA设备并连接。
4、通过选择要升级的HEX文件,然后点击START,开始OTA升级,等到OTA升级成功就OK。
标签:文件,OnlyUpdateApp,OTA,APP,蓝牙,开发板,IAP From: https://www.cnblogs.com/ZYL-FS/p/18008302