UDS學習筆記(六)——基於UDS的程序燒寫流程

 

 

在學習了這麼多的服務之後,我們就可以正式開始學習程序燒寫流程這一環節了。根據ISO14229提供的文檔或者網上的很多資料都能知道,程序燒寫可以分爲三大流程:預編程階段,編程階段,後編程階段。本文也是根據這三大流程進行一步步的分析的。

預編程階段

裏面的有的步驟不是必須的

預編程階段的功能是使ECU進入到刷寫狀態。首先我們要進入到擴展模式,使用的是10服務中的03子服務進入到擴展模式。

切換擴展模式:    02 10 03 XX XX XX XX XX (10表示切換模式,03表示擴展模式)

之後設置禁止故障碼,則使用的是85服務中的02子服務來關閉ECU存儲DTC的功能。

禁止故障碼:      02 85 02 XX XX XX XX XX (85表示DTC,02表示OFF)

之後是使用28服務的03子服務表示關閉非刷寫數據流,同時使用01參數表示關閉的通訊類型爲普通應用報文。(預編程的必須進行的三步,其他步驟可選)

關閉刷新數據:    03 28 03 01 XX XX XX XX (28表示通訊控制,03表示關閉接收和發送,0x1代表普通應用報文)

編程階段 

 編程階段要對原來的程序進行擦除,如圖,首先要進入編程(刷新)模式。

切換編程模式:    02 10 02 XX XX XX XX XX (10表示切換模式,02表示編程模式)

進入編程模式之後,就需要進行解鎖了。解鎖的步驟就是向控制器發生請求“seed”,然後控制器回覆“seed”對應的數據。診斷儀對回覆的數據加上自己預設的密碼之後再回復給控制器,控制器校驗成果後就可以進入下一步了。安全校驗需要算法才能進行,因此具體怎麼回覆不同控制器都不一樣。參考文章

安全校驗: 02 27 05 XX XX XX XX XX XX (27表示安全服務,05)

在完成安全驗證之後,就要對控制器的應用區進行擦除了。擦除使用的是0x31服務。值得注意的是,在這裏需要使用到多幀傳輸模式。多幀傳輸中,首診的前兩位被ISO15765佔用了。同時有一個addressAndLengthFormatIdentifier,用於指示後面兩個部分所佔用的字節,高4bit表示memorySize所佔的字節長度,低4bit表示memoryAddress

擦寫控制器 10 0D 31 01 FF 00 44 XX (10中的1表示首幀,後面的D表示有效數據位數爲13位,31表示31號服務,01表示開啓服務,FF與後面的00表示擦除服務,44翻譯成中文爲地址與數據標識,XX表示地址的高兩位)
連續幀 21 XX XX XX YY YY YY YY (XX表示地址,YY表示數據的大小)

 

在擦除完數據後,就是開始傳輸數據了,首先我們要設置上傳數據的大小以及地址。

請求上傳數據 10 0B 34 00 44 XX XX XX (10中的1表示首幀,後面的D表示有效數據位數爲11位,34表示請求上傳數據服務,00表示數據格式未加密,,44翻譯成中文爲地址與數據標識,XX表示地址高位)
連續幀 21 XX YY YY YY YY (XX表示地址,YY表示數據從高到底的大小)

這時候控制器會回覆一串數據,用來表示塊大小,表示一次性能夠上傳多少組數據。

之後便是使用36服務進行傳輸數據 了,這一部分涉及到大量的數據,因此在這裏也無法完全寫出來。使用完36服務後再通過37服務進行檢查後就完成數據傳輸。(34服務可以一次性請求,然後通過多幀傳輸不停傳輸數據就好)

數據校驗 02 37 00 (37表示進行數據校驗,00表示校驗mode)

以上就是編程階段的數據代碼簡介,如果有什麼問題,以後再進行補充。

後編程階段

後編程階段功能就是重啓控制器然後將診斷對話切換爲正常模式。

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