FOTA 更新

FOTA 是 Firmware Over the Air 的縮寫,意指可用 Wi-Fi 透過無線方式更新開發板上的韌體。

LinkIt 7697 提供了 LHTTPUpdate 函式庫,讓開發者可從給定的 HTTP URL 下載並燒錄更新 LinkIt 7697 的 sketch 應用程式,達成 FOTA 無線更新應用程式的功能。

範例

  • 將 LinkIt 7697 Arduino BSP 更新至 v0.10.5 或更新的版本。

  • Tools > Board 選單中選擇 LinkIt 7697

  • 開啟 Examples > LHTTPUpdate > LHTTPUpdate 範例。

  • 依照使用的 Wi-Fi AP 組態,更新程式碼中的 ssidpass 資訊:

    char ssid[] = "yourapssid";      // your WPA2 network SSID (AP name)
    char pass[] = "yourpassword";    // your WPA2 network password
  • 點選 Upload 按鈕將 sketch 上傳至 LinkIt 7697。

  • 上傳完成後,開啟 Serial Monitor (baudrate 為 9600)。

  • 會看到下列的系統訊息:

    HTTPUpdate example begins.
    Attempting to connect to SSID: yourssid
    Connected to wifi
    Begin downloading new firmware
    Press RST key to reboot to updated firmware version.
    After reboot, it may take a while to update the firmware.
    The USR LED lights up during the update process.

    這表示系統已從 http://download.labs.mediatek.com/resource/fota_example.bin 將範例 FOTA binary 的 bin 檔下載至 LinkIt 7697。

  • 此時按下 RST 按鈕,系統即會重新開機,並將剛剛下載的 FOTA binary 程式 (fota_example.bin) 燒錄至 LinkIt 7697 以取代原本的 sketch。

  • 約經過三秒鐘燒錄時間後,會看見開發板橘色 LED 閃爍,表示板上的 sketch 已完成替換為新的 "blinking" sketch。

運作機制

範例程式碼透過呼叫下列 API,從 http://download.labs.mediatek.com/resource/fota_example.bin 下載 FOTA binary 的 bin 檔,並將之燒錄至 flash:

fotaUpdater.update(fotaBinaryURL);

FOTA binary 是經過前處理的 sketch bin 檔,為一種經過壓縮並帶有 checksum 資訊的檔案格式,以確保韌體更新過程中發生的錯誤可被即時偵測。

執行 update() 函式時,FOTA binary 會先被寫入至 flash 的 FOTA 區間。整個 flash 的區間劃分如下:

完成寫入 FOTA binary 至 FOTA 區間後,update() 函式會將 FOTA 區間標示為等待被更新的狀態。

接著系統重新開機,bootloader 偵測到 FOTA 區間有新韌體等待被更新時,即會將之解壓縮並檢查 checksum,一切無誤的話便把新韌體燒錄至 CM4 firmware 的區間:

CM4 firmware 區間燒錄完成後即完成 sketch 應用程式更新,結束整個 FOTA 處理程序。

如何生成 FOTA Binary

前文提到 FOTA binary 是經過前處理的 sketch bin 檔,以下將說明如何將正常的 sketch binary 檔轉換為 FOTA binary:

  • 針對要轉換的 Arduino sketch,在 Arduino IDE 選單中選取 Sketch > Export Compiled Binary 產生該 sketch 的 binary 檔案。

  • 依照 FOTA ROM Package 的說明進行相關設定與轉換。以下將示範在 Windows 下的轉換方法:

Windows 版的 FOTA ROM Package 工具

假設 FOTA ROM Package 的根目錄在 $FOTA_ROOT

  • $FOTA_ROOT\_ini\template\mt7697\FOTARomPacker.ini 檔案拷貝至 $FOTA_ROOT\_ini 目錄。

  • 開啟 $FOTA_ROOT\_ini\FOTARomPacker.ini 如下:

    [General Setting]
    Base_Directory=.\_Load\mt7697
    
    [CM4 bin]
    File=fota_example.bin
    Start_Address=0x79000
    Partition_Size=0x1ED000
    Is_Compressed=true

    修改 File 欄位的內容,填入之前從 Arduino IDE 輸出的 sketch binary 檔的路徑。

修改 Start_AddressPartiion_Size、和 Is_Compressed 欄位,這幾個值需固定與 LinkIt 7697 flash 分區資訊一致。

  • 將 sketch binary 拷貝至 $FOTA_ROOT\_Load\mt7697

  • 執行 gen_image.bat 批次檔。

  • 產生的 FOTA binary 會放在 _Output 目錄。

取得 FOTA binary 後,開發者即可將之放在 HTTP 伺服器上,透過在 sketch 中使用 LHTTPUpdate.update() 函式呼叫,下載並燒錄該 FOTA binary 至開發板。

Last updated