編輯語:
技術解碼欄目:是面向開發者詳細解讀晶片開放社群(OCC)上關于處理器、晶片、基礎軟體平台、內建開發環境及應用開發平台的相關技術,友善開發者學習及快速上手,提升開發效率。
一.概述
RVB2601是基于平頭哥RISC-V生态晶片的開發套件,開發者基于RVB2601可進行端雲一體的物聯網應用開發及音頻方案開發。上周向大家推薦了
RVB2601應用開發實戰系列三: GUI圖形顯示。本文介紹如何在CH2601開發闆上進行FOTA更新。
FOTA 是 Firmware Over the Air 的縮寫,即固件空中更新,最常見的就是手機固件的更新。固件的定義範圍比較模糊,windows作業系統更新、手機更新、嵌入式系統、單片機控制程式等都的遠端更新可以籠統地稱為FOTA,用這種方式,裝置廠商可以更加快速地進行系統軟體的疊代,能夠更加快速地向市場推出具有新功能的裝置并以此提高使用者對其裝置的滿意度。下面我們以ch2601_FOTA_DEMO為例來介紹如何進行FOTA更新。
二. 環境準備
- 硬體:RVB2601開發闆一塊、USB線2根
- 軟體:劍池CDK最新版本(Windows)
三. 示例擷取
打開劍池CDK,點選紅色處按鈕,點選建立工程按鈕。
在搜尋框輸入FOTA,點選右邊的搜尋按鈕,ch2601_fota_demo就顯示出來了。點選建立工程。
在彈出框輸入工程名字,版本号預設v7.4.3即可。點選下載下傳方案按鈕,等待下載下傳完成。
四. 操作流程
我們分成3個大的步驟進行介紹:
- 不同版本固件的生成
- OCC固件添加,更新政策配置
- 裝置端配置參數,下載下傳固件并進行系統的更新
請注意:以下出現的方案目錄指的是solutions/ch2601_fota_demo這個檔案夾下。
4.1 編譯生成不同版本固件
4.1.1 基礎鏡像包1.0.0生成
在示例擷取那個章節我們已經把ch2601_fota_demo工程拉取下來了,接下來我們要編譯這個工程并生成相應的鏡像包。如下圖所示,點選紅色方框處按鈕進行編譯。
編譯結束之後,會在方案目錄的generated下生成images.zip包。如下所示,打開方案目錄。
将這個images.zip拷貝到上級目錄(方案目錄)并重命名為images_1.0.0.zip。
4.1.2 鏡像包1.1.1版本生成
可以在方案的app/src/app_main.c檔案中加個列印儲存檔案,并重新編譯。将生成的generated/images.zip拷貝到方案目錄,并重命名為images_1.1.1.zip,作為高版本。
4.2 OCC版本管理
4.2.1 建立産品,擷取許可證
- 注冊登陸平頭哥晶片開發社群後,進入到控制台中
- 在平頭哥晶片開發社群上建立産品,在控制台->我的産品->添加産品,如下圖所示,點選送出按鈕。
- 點選編輯按鈕
- 選擇許可證, 點選生成按鈕,稍等重新整理下即可
如下圖所示,表示開發許可證已經生成完畢
4.2.2 上傳鏡像包至OCC伺服器,并釋出
在我的産品->編輯->FOTA頁面選擇添加強件
點選送出按鈕
點選紅色方框
點選釋出按鈕
傳回之後,釋出狀态就會變成已釋出,如果狀态未變,可以再次重新整理下。
- 釋出1.1.1版本
送出完畢之後,選擇1.1.1版本那一行進行釋出。釋出成功之後,伺服器就會生成FOTA固件了。
4.2.3 雲端選擇更新政策
如右邊紅色框框,添加标簽:
下圖中的CID的值後面需要用到,請先記錄下來
選擇更新政策:
選擇剛才寫的标簽,并送出:
到此為止,雲端的配置基本結束了。
4.3 裝置檢測更新
4.3.1 将釋出的鏡像包下載下傳到本地
點選紅色框圖位置下載下傳鏡像包到本地
4.3.2 取出hex檔案放到指定位置用劍池CDK進行燒錄
将下載下傳過來的鏡像包解壓,并取出total_image.hex檔案,放到方案目錄的generated目錄下。
切換到劍池CDK工程,點選紅色方框處按鈕開始燒錄。
燒錄過程中。
燒錄完畢。
按複位鍵啟動的列印如下,可以看到目前的版本為1.0.0的版本。
4.3.3 裝置端設定deivce_id/model,接收固件
我們需要設定一些參數才能聯網并且接受新的固件。
4.3.3.1 WiFi設定
通過序列槽終端輸入: kv set wifi_ssid <your_wifi_ssid> kv set wifi_psk <your_wifi_password>
- your_wifi_ssid:你的wifi名字
- your_wifi_password:你的wifi密碼
4.3.3.2 裝置資訊設定
通過序列槽終端輸入: kv set device_id <key> kv set model ch2601
- key:即4.7章節圖檔中提到的CID的值
- model:即4.1章節中的産品型号值
設定完畢之後按開發闆上的複位鍵重新開機。
4.3.4 裝置端完成固件接收,進入系統更新
請確定裝置聯網成功。裝置檢測到新版本的列印:
開始下載下傳資料:
下載下傳檢驗完畢,裝置自動重新開機進入系統更新:
4.3.5 系統更新完畢,裝置重新開機,正常運作
系統更新完畢之後,裝置自動重新開機,可以看到剛才加的列印資訊出來了,版本号也更新了。
至此,說明整個FOTA更新已經成功完成了。
五. 注意事項
5.1 分區配置
使用更新功能需要指定更新包的存儲區域。配置檔案:configs/config.yaml
1. mtb_version: 4
2. chip: ch2601
3.
4. diff:
5. fota_version: 0
6. ram_buf: 50 #DEC KB ( max ram need)
7. flash_buf: 16 #DEC KB ( buffer size)
8. flash_sector: 4096 #DEC byte ( flash sector)
9. diff_mode: 010 #BIN
10. double_control: 1
11. flash:
12. base_address: 0x18000000 # 存儲基位址,比如FLASH的基位址
13. sector: 4096 # Bytes
14. size: 524288 #512kb $(sector count) * sector
15.
16. partitions:
17. - { name: boot, address: 0x18000000, size: 0x10000 }
18. - { name: imtb, address: 0x18010000, size: 0x02000 }
19. - { name: bmtb, address: 0x18012000, size: 0x01000 }
20. - { name: kv, address: 0x18013000, size: 0x04000 }
21. - { name: prim, address: 0x18017000, size: 0x30000, verify: true, update: FULL}
22. - { name: misc, address: 0x18047000, size: 0x39000 }
yaml
對需要更新的分區加上update字段。
- 分區說明
分區 | 說明 |
boot | bootloader鏡像 |
bmtb | 分區表 |
imtb | 分區表,包含所有分區位置及安全資訊 |
prim | 應用鏡像 |
misc | 更新備份區,下載下傳下來的鏡像先存儲在此分區 |
kv | KV資料區 |
5.2 代碼
有關FOTA更新相關的代碼主要是在app/src/cop_fota.c檔案中。
六. 結束語
以上即為整個FOTA更新示例詳細的操作說明。主要是在OCC晶片開放社群和劍池CDK中進行操作。實際應用過程中需要做好版本的管理。