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