CC3200學習筆記04-OTA詳解

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功能下載

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章