天天看點

CC3200學習筆記04-OTA詳解

CC3200 BootloaderOTA_Update Note.pdf

首先建議大家看一下這個文章大概了解下 SPI Flash中的檔案結構;

首先要實作OTA,和通常下載下傳程式時是不一樣的;

    先說一下通常下載下傳程式時,我們隻需要一個編譯後的.bin檔案,如下圖的freertos.bin,這個就是使用者的程式,下載下傳成功後會在SPI Flash的/sys/目錄下中生成一個名為mcuimg.bin ;重新開機裝置後系統預設運作mcuimg.bin;

CC3200學習筆記04-OTA詳解

咱們在看一下有OTA功能的SPI Flash中的檔案結構

CC3200學習筆記04-OTA詳解

(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

CC3200學習筆記04-OTA詳解

    系統上電後首先運作 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功能下載下傳

CC3200學習筆記04-OTA詳解
CC3200學習筆記04-OTA詳解