【求助】ch582 OTA升級疑問

image.png

  1. 使用方式一升級時imageA和B大小都是216K,那是不是更新的固件大小不能超過216K? 我使用adv_vendor_self_provision_with_peripheral這個例程測試升級時,更新的固件大小為288K,也可以正常升級;

    image.png

  2. 使用方式二升級,進入IAP程序執(zhí)行升級是必須從復位進入IAP嗎;

您好,方式一中,APP層代碼確實是不能超過216K;方式二中,也可以通過類似接口jumpAPP()的方式跳到0地址起始的codeflash重新運行,不過沒必要,這樣跟軟復位效果一樣的,也是要重新加載啟動文件的。

288K的大小是從哪里得出的,要以編譯器編譯后的結果為準,一般來講APP層代碼的LD文件會在編譯時限制codeflash的最大使用量。

如果您修改了LD文件中對codeflash使用量的限制,實際編譯結果就是288K,并且使用方式二+mesh文件夾中的固定庫,理論上也是可以的,因為在手機配網例程中,使用了精簡的BLE固定庫,只占用了136Kcodeflash,除去方式二中12K大小的IAP和4K大小的JumpIAP,還剩296K的空間可以存放代碼。

mesh文件夾下的手機配網例程是結合了方式一和方式二的,既使用了BLE固定庫,又使用了備份升級,對于一同編譯的mesh庫和APP層邏輯來說,是有備份的。如果您直接用手機配網例程的三個工程,即4K的IAP+4K的JumpIAP+288K的APP層代碼+136K的固定庫,會出問題,可能會擦掉一部分BLE固定庫導致升級后BLE無法使用或其他異常。


好的,感謝解答;現(xiàn)在我自己的工程代碼編譯出來已經有300k了,我想用備份升級方式,但是ch582m的資源又不夠;現(xiàn)在想外加一塊512k的外置flash進行備份升級使用。這個方案可行嗎


可以的,這樣的話外置flash就相當于存放升級固件的區(qū)域B;在區(qū)域A運行無線通信,接收升級固件并暫存到區(qū)域B,確認接受完固件后復位到IAP代碼中搬運區(qū)域B的數(shù)據(jù)到區(qū)域A運行。這樣可以把手機配網例程中,除去4K的IAP、4K的JumpIAP和136K的BLE固定庫,剩下的304Kcodeflash區(qū)域都用來存放用戶代碼。

注意IAP中搬運外部flash到內部codeflash,一般要用到SPI,可能會導致代碼量增加,IAP代碼占用變多,可以以4K大小為單位擴大IAP工程下LD文件中的限制。


好的;還想問一下MESH_LIB和LIB兩個庫有什么區(qū)別,上述說的精簡的BLE固定庫是指的什么;我看官方例程adv_vendor_self_provision_with_peripheral這個工程里面配置如下:

image.png

為什么里面定義的是CH58xBLE_ROM而不是CH58xBLE_ROM_MESH呢;

此外,使用ble mesh升級,資源夠的情況下是不是也可以不使用固定LIB庫的方式升級,把LIB庫直接編進工程里面吧,以后升級也可以把LIB庫一起升級;


MESH_LIB文件夾中包含有mesh協(xié)議棧及其頭文件,以及meshOTA升級使用的BLE固定庫,這個BLE固定庫精簡掉了BLE主機的功能,所以大小被壓縮到了136K;LIB文件夾中包含有一般BLE工程用到的BLE協(xié)議棧及其頭文件,兩個不同起始地址的包含有BLE主從機功能的OTA升級用的固定庫。

CH58xBLE_ROM只用來表明該工程使用固定庫,而具體固定庫存放的地址,由LIB_FLASH_BASE_ADDRESSS決定。頭文件中沒有CH58xBLE_ROM_MESH相關的處理,也用不到它,因為有了LIB_FLASH_BASE_ADDRESSS將固定庫起始地址配置到0x0004E000,并用CH58xBLE_ROM選擇使用固定庫,就已將庫的位置鎖定,燒錄時和固定庫一并燒錄后,APP層代碼就能找到接口函數(shù)。

資源夠的話確實是可以帶BLE庫和mesh庫一起編譯后備份升級,在APP層代碼接收固件后在IAP代碼里搬運備份區(qū)域代碼到運行區(qū)域,好處也是兩個庫都能升級到。



只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频