例程中提供的两种OTA就不过多介绍了,在BLE目录下有一个PDF专门讲解:WCH蓝牙空中升级(BLE OTA)
方式一是带库升级,整个codeflash分成四个区域,Jump IAP,APP,OTA,IAP
Jump IAP为4K,这边分配4K是有讲究的,一开始我认为Jump IAP是没有作用的,可以省略,后面才知道,它有防止代码泄露的功能,固定大小4K,不要修改,
APP为216K,是用来放自己运行的代码的,需带有蓝牙功能,通过手机app蓝牙连接,将需要升级的固件放到OTA区域,
OTA为216K,是用来存放即将升级的固件,
IAP为12K,它的作用将OTA中的待升级固件写到APP区域完成升级,
使用此种升级方式,APP中带有蓝牙库,所以升级时带着蓝牙库一起升级,如果想要添加功能,可以在BackupUpgrade_OTA(APP)例程中修改。
方式二是不带库升级,整个codeflash分成四个区域,Jump IAP,APP,IAP,LIB
Jump IAP为4K,用处和上面一样,此工程main中并无函数,会直接跳转到IAP,IAP的起始地址修改后,此工程启动文件中的地址也需对应修改,
APP为44K,设置这个大小的原因是为了使一些192Kflash的芯片也能直接使用OTA,此app可以不带蓝牙功能,
IAP为16K,它的作用就是将手机app发送的升级固件直接写到APP区域,
LIB为573的是128K,583的是192K。
那么就有一个问题,对于448Kflash的芯片,该如何扩大APP区域呢?
如果想要扩大,那么四个固件都要修改,
Jump IAP的修改十分简单,因为它的功能就只是跳转到IAP,因为APP要扩大,IAP要后移,只要如下图修改跳转地址即可:
APP需要修改四个地方,一是工程预处理,二是Link.ld,最后一个是启动文件startup_CH583.S,四是自己写的APP,那么还需额外添加Jump_OTA代码。
1.工程预处理:
添加CH57xBLE_ROM=1,如使用的OTA例程的APP,那么就无需再添加,因为本身就已经添加了。
582添加LIB_FLASH_BASE_ADDRESSS=0x00040000/573添加LIB_FLASH_BASE_ADDRESSS=0x00050000
2.Link.ld修改:
如果是OTA例程的APP,那么就只需要修改一处,将原本给的44k按4k为单位扩大,建议直接给到最大,582为236k,573为300k,
如果是自己的任意APP代码,那么将OTA例程的APP的Link.ld直接复制粘贴过来修改上面那一处即可。
3.startup_CH583.S修改:
如果是OTA例程的APP,那么也只需要修改一处,583将将j 0x10000修改为j 0x40000,573将将j 0x10000修改为j 0x50000,
如果是自己的任意APP代码,那么将OTA例程的APP的startup_CH583.S直接复制粘贴过来修改上面那一处即可。
4.添加Jump_OTA代码:可以按照自己的逻辑调用Jump_OTA跳入到IAP中开始升级,
IAP需要修改四处,一个是工程预处理,一个是Link.ld,一个是启动文件startup_CH583.S,最后一个是ota.h文件,
1.工程预处理:582添加LIB_FLASH_BASE_ADDRESSS=0x00040000/573添加LIB_FLASH_BASE_ADDRESSS=0x00050000,添加位置和APP一致
2.Link.ld文件:需要修改起始地址,582起始地址为4+236(0x0003C000)/573起始地址为4+300(0x0004C000)
3.ota.h文件:将APP大小修改为重新配置后的大小
4.startup_CH583.S文件如APP一样修改即可。
LIB则是合并的时候选择带x后缀的hex文件,这个LIB是靠着flash最后的位置放的,可以让APP增大至最大。
将四个HEX合成一个之后使用isp工具烧录。
HEX合成工具链接:WCH_AssemblingFileTool.ZIP - 南京沁恒微电子股份有限公司
标签:CH57x,LIB,OTA,APP,Jump,修改,CH58x,IAP From: https://www.cnblogs.com/risc5-ble/p/16986897.html