固件在線升級流程

 

從事硬件開發,爲了方便維護,免不了對模塊進行固件升級,所以對於固件升級,簡單整理了一下完整的在線升級的實現思路,該思路適用於所有帶通訊總線的模塊。

需要注意的是,需要額外的上位機配合。

下位機在線升級流程如下圖:

 

原創圖片,轉發請標註出處。

APP升級步驟

(1)讀軟件版本、CPU型號、模塊型號

(2)UDP包,每包長度1024字節,寫入update區

(3)接收n包升級數據包,正常長度1024,將255整數長度的寫入FLASH

(4)若接收到回讀固件指令,則說明數據發送完成,將最後小於255長度的數據補全0xFF寫入FLASH,且根據索引依次返回固件數據,進行校驗比較

(5)比較通過後,寫入APP升級標誌,供重啓後boot識別

(6)重啓,boot判斷升級標誌,將升級區域數據複製到APP區,清除升級標誌,跳入APP開始運行

BOOT升級步驟

(1)讀軟件版本、CPU型號、模塊型號

(2)UDP包,每包長度1024字節,寫入update區

(3)接收n包升級數據包,正常長度1024,將255整數長度的寫入FLASH

(4)若接收到回讀固件指令,則說明數據發送完畢,將小於255長度的數據補全0xFF寫入FLASH,且根據索引依次返回固件標誌,進行校驗比較

(5)比較通過後,將update區域數據複製到boot區,注意最後未滿足255長度的數據,需要補全後再寫入。

(6)重啓,正常運行。


在線升級筆記1:

(1)需要安裝Agv_tool工具包,且本機電腦IP爲192.168.0.xx網段

(2)打開AgvTool後,在車輛管理中新增車輛,輸入參考。 編號:3;IP:192.168.0.3;端口號:4410

(3)配置管理界面:選中新增車輛,點擊“連接”按鈕進行連接;

(4)固件升級界面中,“選擇目標文件”選中xml文件(需要xml文件和bin文件在同一路徑下,xml文件是配置文件,bin是固件)。然後開始獲取固件操作。

若固件獲取失敗,可以通過抓包,查看網口數據包,排查問題。


在線升級筆記2:

(1)由於UDP發送時未獲取到目標IP地址,導致VCU無法獲取到模塊類型、軟件版本、CPU類型;

(2)獲取類型成功後,點擊升級開始升級;

(3)升級邏輯:由於升級代碼存放在0x40000,所以可以通過bin文件查看工具打開bin文件,並於寫入FLASH中的0x40000中的數據進行對比,若完全一樣,則說明寫入成功;否則,寫入失敗,檢查寫入失敗原因。


在線升級筆記3:調試在線升級遇到的問題:

(1)無法獲得模塊型號、軟件版本號、CPU型號

原因:由於udp應答時,協議控制塊中沒有賦給目標IP地址和目標port,導致發送IP地址爲0.0.0.0,MAC地址爲FF FF FF FF FF FF ;VCU無法處理

(2)寫FLASH錯誤,每次寫0x400長度,前0x100寫成功,之後寫均失敗,寫FLASH邏輯問題。

原因:VCU一次寫請求長度爲0x400,即1KB,但是單次寫FLASH最小長度爲0x100,故要分開寫4次,且最後不夠0x100時,用0xFF湊夠,再寫入FLASH,修改邏輯後,寫FLASH問題修復

(3)寫完FLASH後,重啓失敗

原因:重啓失敗是因爲寫FLASH完成後,沒發送重啓響應給VCU,導致VCU以爲響應超時,其實已經重啓完成。在控制板重啓前保證成功發送重啓i響應給VCU,解決問題。

(4)存在概率性文件對比失敗問題(通過抓包排查了問題)

原因:

(1)沒有清除UDP接收標誌,導致UpdataProcess()一直被執行,數據一致性出現問題,響應的索引值與請求索引值不一致,導致文件對比失敗。

(2)UDP發送函數中,pbuf賦值採用pbuf_tack()函數;修改該項無影響。

(3)寫完FLASH後,第一次讀FLASH,會因爲剛寫完立馬去做讀操作,IAP會來不及處理,導致第一次讀取FLASH都是00,做延時處理解決;

(4)將UpdataProcess()處理,放在UDP接收回調中處理,會解決數據一致性,以及第一次讀FLASH錯誤問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章