看了这些帖子:

CH573 CH582 OTA例程讲解二(方式二:使用固定库+扩大APP程序空间) - WCH蓝牙应用分享 - 博客园 (cnblogs.com)

CH582OTA升级带图修改流程 - 编程猎人 (programminghunter.com)

蓝牙BLE从机Peripheral讲解七(CH582OTA升级/空中升级使用说明) - SweetTea_lllpc - 博客园 (cnblogs.com)

感觉很繁琐,准备自己在一个工程里把IAP的功能集成进去, 这样就不需要蓝牙断开再连。


第一步,把工程和lib库分开(以Peripheral为例):

  1.   增加工程预处理:

    LIB_FLASH_BASE_ADDRESSS=0x00040000

    CH58xBLE_ROM=1

  2. 把OnlyUpdateApp_Peripheral工程的Ld和Startup文件夹拷到自己工程,先在Linked Resources里面把Ld和Startup的link先删掉, 如果编译出错(我一开始报_start找不到),把两个文件夹右键点Include/Exclude from build, 消失后再ctrl+z变回来编译就不报错了。

    1711628875406746.png

  3. Link.ld改FLASH大小, RAM大小24K(原始代码是32K):

    image.png

  4. startup_CH583.S改最后的跳转地址:(不知道为什么要填LIB的地址)

    image.png

  5. 合成文件(编译后工程只有48376B,原来有180K左右,不过算上LIB库,又比不分开大),LIB要选CH48xBLE_ROMx.hex:

    image.png

  6. USB烧录进去,成功启动