日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UDS学习笔记(六)——程序刷写

發(fā)布時(shí)間:2023/12/10 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UDS学习笔记(六)——程序刷写 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

距離上次寫(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。