CC3200 BootloaderOTA_Update Note.pdf
首先建議大家看一下這個文章大概了解下 SPI Flash中的檔案結構;
首先要實作OTA,和通常下載下傳程式時是不一樣的;
先說一下通常下載下傳程式時,我們隻需要一個編譯後的.bin檔案,如下圖的freertos.bin,這個就是使用者的程式,下載下傳成功後會在SPI Flash的/sys/目錄下中生成一個名為mcuimg.bin ;重新開機裝置後系統預設運作mcuimg.bin;
咱們在看一下有OTA功能的SPI Flash中的檔案結構
(2.1) /sys/mcuimg.bin
使用CCS UniFlash燒錄的檔案
系統運作後首先執行的IMG檔案,這個檔案是使用者編寫的bootloader(其實也可以說是使用者代碼),
bootloader會根據檔案"/sys/mcubootinfo.bin"的内容跳轉到/sys/mcuimg1.bin, /sys/mcuimg2.bin, /sys/mcuimg3.bin中的某一個運作
(2.2) /sys/mcubootinfo.bin
使用CCS UniFlash燒錄代碼時需要擦出除掉"/sys/mcubootinfo.bin"這個檔案,将之前可能存儲在Sflash的啟動标志位清除
是以正常燒錄完程式後這個檔案是沒有,是以/sys/mcuimg.bin首次運作時會建立該檔案,并檢測Sflash中已存在的IMG檔案,
由于第一燒錄時隻存在/sys/mcuimg1.bin, 是以會跳轉到/sys/mcuimg1.bin運作
(2.3) /sys/mcuimg1.bin
使用CCS UniFlash燒錄的檔案
這個是認為是系統的出廠IMG, 系統初次啟動後最終會運作該檔案,
初次更新時會将更新檔案存放為/sys/mcuimg2.bin,再次更新時會将更新檔案存放為/sys/mcuimg3.bin,
依次類推,之後的更新都會在/sys/mcuimg2.bin與/sys/mcuimg3.bin兩個檔案中來回替換,
(2.4)/sys/mcuimg2.bin,/sys/mcuimg3.bin
這兩個檔案初始時是沒有的,随着系統的更新被建立
如何實作的OTA呢,在 C:\TI\CC3200SDK_1.1.0\cc3200-sdk\example\目錄下有一個application_bootloader的工程,實作OTA需要這個工程生成的 application_bootloader.bin 檔案;
在這之前講解一下mcubootinfo.bin檔案,這個檔案決定裝置複位後運作哪個bin檔案,這個檔案中儲存了一個結構體;
typedef struct sBootInfo
_u8 ucActiveImg;
_u32 ulImgStatus;
}sBootInfo_t;
ucActiveImg取值:IMG_ACT_FACTORY, IMG_ACT_USER1, IMG_ACT_USER2
ulImgStatus取值:IMG_STATUS_TESTING, IMG_STATUS_TESTREADY, IMG_STATUS_NOTEST
系統上電後首先運作 application_bootloader.bin; 先說一下這個程式的工作流程圖,
1, 讀取 "/sys/mcubootinfo.bin" 檔案, 假如沒有的話跳轉到2, 否則跳轉到4
2, 建立 "/sys/mcubootinfo.bin" 檔案, 跳轉到3
3, 檢測 spi flash 中已存在的IMG檔案, 優先級為 /sys/mcuimg1.bin > /sys/mcuimg2.bin > /sys/mcuimg3.bin 并寫入"/sys/mcubootinfo.bin", 跳轉到4
4, 加載, 執行【ucActiveImg這個參數】指定的IMG檔案,
總結一點來說,就是系統上點後運作application_bootloader.bin,這個檔案讀取/sys/mcubootinfo.bin中的參數決定加載Flash中的哪一個鏡像檔案【/sys/mcuimg1.bin;/sys/mcuimg2.bin ;/sys/mcuimg3.bin 這3個檔案中選擇一個加載】
帶OTA功能下載下傳