UDS学习笔记(六)——程序刷写
前言
距離上次寫(xiě)UDS學(xué)習(xí)筆記過(guò)去一年了,在這一年里學(xué)習(xí)到了很多知識(shí)。對(duì)UDS也有更深的理解了。其中我還通過(guò)CAPL寫(xiě)了一個(gè)基于UDS的程序刷寫(xiě)軟件。其源碼是基于CSDN上的文章,希望大家通過(guò)這篇文章能夠?qū)DS有更深的理解。
在刷寫(xiě)前要將軟件解析為二進(jìn)制,由于我這邊的軟件為HEX文件,而那個(gè)博主只提供了CAPL對(duì)S19文件的解析,在其基礎(chǔ)上,我寫(xiě)了一個(gè)對(duì)HEX文件解析。
刷寫(xiě)流程
下面我以那篇文章為基礎(chǔ),給大家介紹一下使用UDS刷寫(xiě)的流程。首先刷寫(xiě)流程分為三大狀態(tài):刷寫(xiě)前,刷寫(xiě)時(shí),刷寫(xiě)后。因此在CAPL中定義了三個(gè)刷寫(xiě)狀態(tài):
enum {Pre_programming,Programming,Post_Programming}programming_state;而刷寫(xiě)前我們需要做的步驟為:
刷寫(xiě)前:切換為擴(kuò)展模式(Extended_Session,10服務(wù),03子服務(wù))->測(cè)試是否正常(3E服務(wù))->關(guān)閉DTC(85服務(wù),02關(guān)閉故障儲(chǔ)存,需要注意的是要關(guān)閉所有的ECU,因此是功能地址)->關(guān)閉總線通信(關(guān)閉各個(gè)ECU發(fā)送數(shù)據(jù),提高刷寫(xiě)速度,28服務(wù),03子服務(wù)。需要注意的是要關(guān)閉所有的ECU,因此是功能地址)->發(fā)送Security_Access_Seed->發(fā)送Security_Access_Key->切換到刷寫(xiě)模式。
刷寫(xiě)時(shí):清除Falsh(Erase_Flash)->請(qǐng)求下載數(shù)據(jù)(Request_Download)->傳輸數(shù)據(jù)(Transfer_Data)->推出傳輸(Transfer_Exit)
刷寫(xiě)后:重置(Reset)
因此定義一下
enum{Extended_Session=0,TesterPresent,Disable_DTC,Disable_Communication,Programming_Session,Pending_Programming,Security_Access_Seed,Security_Access_Key,Erase_Flash,Request_Download,Transfer_Data,Transfer_Exit,Reset,Stop}prog_step=Extended_Session;由于上位機(jī)也要識(shí)別是否刷寫(xiě)完成,因此定義以下變量控制刷寫(xiě)進(jìn)程。用與表示刷寫(xiě)還未開(kāi)始、正在刷寫(xiě)、刷寫(xiě)已經(jīng)結(jié)束。
enum {PROG_NOT_STARTED,PROG_INPROGRESS,PROG_STOPED}prog_status=PROG_NOT_STARTED;?
?
一些總結(jié)
物理地址與功能地址的區(qū)別:物理地址每個(gè)ECU都不同,功能地址ECU都相同。因此通過(guò)功能地址可以請(qǐng)求總線上的所有設(shè)備。
在清除Falsh的時(shí)候,請(qǐng)求的參數(shù)為buff起始地址以及buff的結(jié)束地址,可以一次性把要刷寫(xiě)的區(qū)域清空。
而在請(qǐng)求下載數(shù)據(jù)的時(shí)候,請(qǐng)求的參數(shù)為buff的起始地址以及buff的大小,可以一次性把要刷寫(xiě)的區(qū)域清空。
?
在github上找了好幾個(gè)刷寫(xiě)固件的源碼,那么接下來(lái)通過(guò)源碼來(lái)分析刷寫(xiě)程序的步驟吧
https://github.com/satish77/ip_uds_bl_tool
https://github.com/GoodnightV/UDS-based-Refresher/blob/master/DiagboxSRC/src/main.cpp
總結(jié)
以上是生活随笔為你收集整理的UDS学习笔记(六)——程序刷写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#开发移动应用系列(2.使用WebVi
- 下一篇: greenplum vacuum清理删除