升級介紹
藍牙固件升級是使用手機給固件進行更新,以達到修復bug,完善功能的作用。升級的大概流程是:首先,當手環的固件需要升級時,由嵌入式開發人員提供新的固件,由服務器管理人員將固件放到服務器上,此時,用戶打開手機APP的時候會檢測到服務器有更新,請求更新手環固件,確認更新後,手機會從服務器下載固件。下載完畢後,APP會讀取固件內容,並根據升級協議將內容傳到手環裏,完成升級。
- DFU = Device Firmware Update (設備固件更新)
- OTA = Over The Air (空中升級)
升級流程
各個藍牙設備不盡相同,以下是我測試設備的升級流程:
OTA下載固件
從雲端下載的固件爲.bin後綴的文件,文件名會有一定的格式,含有固件版本號和文件CRC32校驗值。
數據分塊
規定一個數據塊大小比如2048字節,然後把升級數據進行分塊,不夠的就剩餘多少作爲一塊。藍牙一次發送的數據量是有限的,所以每次發送20字節的數據。這個數據要遵循升級數據格式,帶指令頭和校驗和,下載包的數據只是這20字節中的一部分。所有包內數據都攜帶在每條升級數據指令中。
升級過程
- 連接設備,發送升級請求。
- 待藍牙確認之後,開始發送數據頭告知藍牙此次發送的數據量和CRC校驗。
- 開始發送升級數據。(每條數據之間間隔20ms爲了藍牙能夠方便處理)
- 待一個塊發送完就發送塊結束命令
- 藍牙確認發送下一個塊,返回錯誤則終止此次升級
- 發完所有數據之後發送升級完成
- 藍牙確認則升級完成,返回錯誤則升級失敗
流程圖
總結
藍牙升級最複雜的就在升級過程,大量的數據與藍牙交互,這時最好記錄發送到升級數據的那一部分,可以給用戶展示升級的進程。