藍芽韌體升級

zhangferry發表於2019-04-17

Bluetooth.png

升級介紹

藍芽韌體升級是使用手機給韌體進行更新,以達到修復bug,完善功能的作用。升級的大概流程是:首先,當手環的韌體需要升級時,由嵌入式開發人員提供新的韌體,由伺服器管理人員將韌體放到伺服器上,此時,使用者開啟手機APP的時候會檢測到伺服器有更新,請求更新手環韌體,確認更新後,手機會從伺服器下載韌體。下載完畢後,APP會讀取韌體內容,並根據升級協議將內容傳到手環裡,完成升級。

  • DFU = Device Firmware Update (裝置韌體更新)
  • OTA = Over The Air (空中升級)

升級流程

各個藍芽裝置不盡相同,以下是我測試裝置的升級流程:

OTA下載韌體

從雲端下載的韌體為.bin字尾的檔案,檔名會有一定的格式,含有韌體版本號和檔案CRC32校驗值。

資料分塊

規定一個資料塊大小比如2048位元組,然後把升級資料進行分塊,不夠的就剩餘多少作為一塊。藍芽一次傳送的資料量是有限的,所以每次傳送20位元組的資料。這個資料要遵循升級資料格式,帶指令頭和校驗和,下載包的資料只是這20位元組中的一部分。所有包內資料都攜帶在每條升級資料指令中。

升級過程

  • 連線裝置,傳送升級請求。
  • 待藍芽確認之後,開始傳送資料頭告知藍芽此次傳送的資料量和CRC校驗。
  • 開始傳送升級資料。(每條資料之間間隔20ms為了藍芽能夠方便處理)
  • 待一個塊傳送完就傳送塊結束命令
  • 藍芽確認傳送下一個塊,返回錯誤則終止此次升級
  • 發完所有資料之後傳送升級完成
  • 藍芽確認則升級完成,返回錯誤則升級失敗

流程圖

upgrade.png

總結

藍芽升級最複雜的就在升級過程,大量的資料與藍芽互動,這時最好記錄傳送到升級資料的那一部分,可以給使用者展示升級的程式。

相關文章