天天看點

固件線上更新流程

從事硬體開發,為了友善維護,免不了對子產品進行固件更新,是以對于固件更新,簡單整理了一下完整的線上更新的實作思路,該思路适用于所有帶通訊總線的子產品。

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

下位機線上更新流程如下圖:

固件線上更新流程

原創圖檔,轉發請标注出處。

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錯誤問題。

繼續閱讀