最近有客戶反饋在鄉村裡頻繁出現掉線的情況。
趕緊排查原因!
透過換貨、換SIM卡對比排查測試,發現只有去年採購的那批模組在客戶環境附近會出現掉線的情況,而今年採購的模組批次就不會掉線。。。
繼續追究原因,聯絡對應的銷售工作人員,瞭解到差異就是模組內的韌體版本不同。
去年採購的那批模組版本是:
AirM2M_780E_LTE_AT_V1138今年採購的那批模組版本是:
AirM2M_780E_LTE_AT_V1162
看來是高版本對網路做了最佳化,但在這個地區出貨的也有150多臺裝置了,不可能每個都單獨回收回來給模組用USB燒錄成高版本韌體。
所以,不如直接透過FOTA遠端批次升級。
一、第一次嘗試升級,出現失敗
從合宙DOC社群上找到了FOTA遠端升級的文件參考,先用手邊的裝置用合宙IoT平臺做下測試,看能不能升級。
什麼都配置好了,結果到最後模組發AT+UPGRADE觸發升級的時候,卻老是報錯:
+UPGRADEIND: -1003
透過升級日誌查詢結果是“正在生成版本”?
在頁面右上角看到有個紅色問號“ ?”,是IoT平臺的幫助中心,往下滑就看到了升級日誌返回結果的對應描述。
如下圖示:
正在生成版本,請稍後再次請求——看樣子是版本相差太大了,平臺內部還在做差分包,那我就等一會兒再請求看看。
二、第二次嘗試升級,再次出現失敗
保險起見間隔了30分鐘再次請求,以看到已經進入下載了,但是結果卻又出現了:
+UPGRADEIND: -1003
這又是什麼原因?!!
先去IoT平臺上看一下升級日誌的結果是什麼,查詢看到顯示的是“成功”,但實際上並沒有升級成功啊,反而還報錯了。
緊接著找合宙的技術人員諮詢瞭解到,差分包大小是有限制的,不能大於480KB,否則會升級不成功。
至於IoT平臺上升級日誌顯示“成功”,原因是這個成功代表的意思不是模組升級成功——而是給予模組的升級請求,下發了升級檔案成功了。
經過進一步確認,可以透過合宙自己提供的生成差分包工具的網址,把V1138和V1162的dfota.bin檔案放上去,製作一個差分包看看,到底有多大。
等了大概3分鐘左右,差分包製作出來了,點選下載後,檔案大小有550KB,那確實超出了480KB,升級不了。
從合宙的技術那裡還得到了一份AT韌體各個版本之間製作差分包的大小,以及是否可以差分升級的表格,這方便多了啊。
有數字的代表是在480KB以內,可以差分升級的版本;空白的就是不能升級的。
差分升級表格如下圖示:
那麼透過這張圖來看,例如我當前的模組版本是V1138,需要升級到1162,對應的交叉格並沒有數字。
而且V1138升級到1147的差分包就已經到480KB的臨界點了,只能先升到V1147,再升到1162。
三、事不過三,第三次升級,成功!
那麼,先獲取到V1147版本的韌體。
然後搜尋得到AirM2M_780E_LTE_AT_V1147,
解壓出來找到:
AirM2M_780E_V1147_LTE_AT.dfota.bin檔案,
放到IoT平臺上面。
傳送AT指令走下升級流程:
成功從AirM2M_780E_V1138_LTE_AT,
升級到了 AirM2M_780E_V1147_LTE_AT。
接下來就是按照步驟,
升級到 AirM2M_780E_V1162_LTE_AT版本。
四、總結及建議
從以前的老韌體做升級,很重要的一點——要考慮到模組內部對差分升級所分配的FOTA分割槽有多少。如果差分包超過了分割槽(Air780E模組的FOTA分割槽看來就是480KB了),超出肯定是升級不了的。
緊接著和領導做了彙報,在本地測試了Air780E模組FOTA升級可以了,流程也寫好了,先找了5臺在外的裝置遠端升級,測試一下看升級後掉線的現象也確實減少了,那說明韌體沒問題。掉線的麻煩事,也完美解決了!
如果你在專案開發中也遇到類似問題,記得一定一定要先注意差分升級FOTA分割槽大小。