本應用筆記介紹運行于隨 BlueNRG-LP、BlueNRG-LPS 片上系統(tǒng)提供的 Bluetooth?低功耗(LE)棧之上的 BlueNRG-LP、BlueNRG-LPS 無線(OTA)固件升級程序。
首先介紹與 OTA 固件升級過程相關的一些概念,然后幫助用戶了解運行一些 OTA 固件升級會話所需的所有步驟。
“無線”固件升級的概念
“無線”(OTA)固件升級是一種協(xié)議,允許低功耗藍牙從設備無線接收來自低功耗藍牙主設備的固件映像,并將其寫入 Flash 存儲器。就低功耗藍牙技術而言,OTA 固件升級框架定義了一種提供其自己的特性,并能與藍牙 LE 棧上運行的任何給定應用使用的其他服務共存的服務。藍牙 LE 主設備是由通過 USB 連接到 PC的 BlueNRG-LP、BlueNRG-LPS 開發(fā)套件平臺構成的組合系統(tǒng)。BlueNRG-LP、BlueNRG-LPS 平臺由BlueNRG GUI 驅動。鑒于這種選擇,可以使用 PC 上的大量資源,尤其是用于生成固件映像的編譯器,以及為了進行固件升級而在無線部署映像前存儲映像所需的存儲器空間。
OTA 固件升級服務描述
OTA 固 件 升 級 服 務 通 過 BlueNRG-LP 、 BlueNRG-LPS DK 軟 件 包 中 提 供 的 文 件 OTA_btl.[ch](MiddlewaresSTBLE_ApplicationOTA folder)實現(xiàn)。
下面是關于 OTA 固件升級服務及其相關特性的簡述:
— Btl OTA 服務(OTA_SRVC_UUID):固件升級服務
? aci_gatt_srv_add_service((ble_gatt_srv_def_t *)&ota_service);
— Btl 映像的特性(IMAGE_CHR_UUID):包含一些與空閑內存范圍相關的信息,這是包含 OTA 固件升級服務的當前應用建議的范圍
— Btl 新映像的特性(NEW_IMAGE_CHR_UUID):包含 OTA 固件傳輸期間主設備想要無線發(fā)送的映像的基址和大小以及要求從設備發(fā)送確認的通知范圍
— Btl 新映像內容的特性(IMAGE_CONTENT_CHR_UUID):它包含主設備發(fā)送(通過特性寫入指令)的16 字節(jié)固件映像數(shù)據(jù)塊,以及一些控制信息,例如塊序號(2 字節(jié))和用于完整性檢查的校驗和(1 字節(jié))
— Btl 預期映像序號特性(IMAGE_SEQ_NUM_CHR_UUID):從設備通過該特性通知主設備其預期的下
一個數(shù)據(jù)塊或錯誤條件
OTA 固件升級事務
本節(jié)將介紹 OTA 固件升級步驟:
1. 在安裝了運行 OTA 固件升級服務的主設備和從設備后,需執(zhí)行搜索程序以便連接兩個設備。通過收聽無線傳輸范圍內的設備的廣播進行搜索(主動掃描),并選擇掃描響應中包含 OTA FW 升級服務 UUID(128 位)的設備。
2. 此外,將從廣播消息中讀取所選設備的名稱,主設備將使用該名稱強化從設備識別程序。
3. 連接后,主設備將發(fā)送“ACI_GATT_CLT_DISC_CHAR_BY_UUID”指令,以便讀取所有 OTA 固件升級特性句柄。
4. 主設備通過“ACI_GATT_CLT_READ”指令讀取 Btl 映像特性,以獲悉目標從設備 Flash 存儲器上的空閑空間。
5. 根據(jù)上一步中獲得的信息,主設備將選擇合適的映像進行無線發(fā)送。候選映像(位于主設備上某位置的*.bin 文件)必須處于目標的空閑 Flash 存儲范圍內。
6. 完成選擇后,主設備發(fā)送“ACI_GATT_CLT_WRITE”指令,以將映像基址、大小和通知范圍寫入 Btl新映像特性,并通過“ACI_GATT_CLT_READ”讀回以進行確認。
7. 主設備寫入 Btl 預期映像序號特性描述符,以啟用映像塊序號和錯誤的從設備通知。在接收到該指令后,從設備將發(fā)回通知。
8.映像傳輸開始。主設備將通過一系列“ACI_GATT_CLT_WRITE_WITHOUT_RESP”指令以 16 字節(jié)數(shù)據(jù)塊發(fā)送映像(每個 16 字節(jié)數(shù)據(jù)塊一個)。目標從設備每次收到新的 WRITE 指令時,將新數(shù)據(jù)塊寫入Btl 新映像內容特性。每個(N*16)字節(jié)數(shù)據(jù)塊附帶 2 字節(jié)序號和 1 字節(jié)校驗和字段,用于在目標位置檢查順序和消息完整性。每次(N*16)字節(jié)數(shù)據(jù)塊占滿從設備的內部緩沖區(qū)時,數(shù)據(jù)塊被下載到 Flash 存儲器。一旦從設備完成 16 字節(jié)數(shù)據(jù)塊內部緩沖區(qū)的管理,它將向主設備發(fā)送通知消息,其中包含下一個預期數(shù)據(jù)塊的數(shù)據(jù)塊號。它可能通過最新數(shù)據(jù)塊通知 Flash 寫入錯誤和 Flash 驗證錯誤,假如問題出在目標設備 Flash 上,此時自舉會話應停止。