0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

圖解基于UDS的Flash BootLoader

汽車ECU開發(fā) ? 來(lái)源: 汽車電子嵌入式 ? 2023-08-14 10:49 ? 次閱讀

130eb3e0-3980-11ee-9e74-dac502259ad0.png

bootloader程序架構(gòu)

1327a508-3980-11ee-9e74-dac502259ad0.jpg

略有簡(jiǎn)化的bootloader圖

這張圖和恒潤(rùn)教程中的BootLoader流程大體是一致的。

疑問(wèn)點(diǎn)

Q:圖中的燒寫順序是34-36-34-36-34-36-37,但另一些材料中的順序是34-36-36-36-37。

A:這個(gè)問(wèn)題這樣理解,34-36-36-36-37的前提是你要下載的數(shù)據(jù)是連續(xù)的數(shù)據(jù),每個(gè)36所使用的地址信息,都是34中包含的地址信息再加上一定的偏移量。

如果需要下載不連續(xù)的數(shù)據(jù),就需要重新進(jìn)行34服務(wù)或31(擦除)-34服務(wù)。

1、為什么要搞Bootloader?為什么要基于UDS搞Bootloader

假如你的控制器有外殼,卻沒(méi)有設(shè)計(jì)bootloader的話,每次更新ECU的程序,你都需要把外殼拆開,用燒寫器來(lái)更新程序。有了bootloader,你就可以通過(guò)CAN線來(lái)更新程序了。更方便些的話,甚至可以通過(guò)OTA進(jìn)行遠(yuǎn)程升級(jí)。

那為什么使用UDS呢?主要是為了規(guī)范bootloader的全過(guò)程。比如燒寫小明牌ECU時(shí),我們肯定希望其他牌子的ECU處于一個(gè)靜默的狀態(tài),都歇一歇,這就需要一個(gè)大家共同執(zhí)行的標(biāo)準(zhǔn)來(lái)進(jìn)行規(guī)范,什么時(shí)候停發(fā)數(shù)據(jù),什么時(shí)候不能再儲(chǔ)存DTC了等等。

又比如在調(diào)試時(shí),大家肯定希望你的控制器經(jīng)由CAN燒寫的過(guò)程是大家都能看得懂的,是滿足于某種規(guī)范的。由此,UDS在設(shè)計(jì)時(shí)考慮了bootloader的需求,專門為bootloader設(shè)計(jì)了幾個(gè)服務(wù),供大家使用。主機(jī)廠在發(fā)需求時(shí)自然就要求大家要在UDS規(guī)范的基礎(chǔ)上完成bootloader功能了。

2、Bootloader應(yīng)支持的UDS服務(wù)

顯然bootloader不需要支持19/14等故障類服務(wù)。

在boot程序中,10/27/11/3E這樣的基礎(chǔ)診斷服務(wù)需要支持,22/2E讀寫DID的服務(wù)需要支持,31/34/36/37這4個(gè)bootloader主打服務(wù)需要支持,共10個(gè)。

在app段程序中,85和28服務(wù)需要支持,保證暫停CAN正常通信,暫停記錄DTC,讓被升級(jí)設(shè)備專心升級(jí)。

13315562-3980-11ee-9e74-dac502259ad0.jpg

10種boot段服務(wù)+2種app段服務(wù)

3、Bootloader——三段式

(1)預(yù)編程階段

1. 3E TP報(bào)文。

2. 10服務(wù)切換到03擴(kuò)展模式。

3. 85服務(wù)和28服務(wù),關(guān)DTC和非診斷報(bào)文。使整個(gè)CAN網(wǎng)絡(luò)處于安靜的狀態(tài)。這是對(duì)整車網(wǎng)絡(luò)進(jìn)行操作的,一般都是以功能尋址的方式來(lái)發(fā)送。注意先用85服務(wù)關(guān)閉DTC,再使用28服務(wù)關(guān)報(bào)文。

1348f050-3980-11ee-9e74-dac502259ad0.png

(2)主編程階段

1. 10服務(wù)切換到編程模式,這里要注意,正確的方式是App段程序回復(fù)0x78 NRC,接下來(lái)跳轉(zhuǎn)到boot段程序,最后由Boot段程序來(lái)回復(fù)10 02的肯定響應(yīng)。錯(cuò)誤的方式是由App段回復(fù)10 02的肯定響應(yīng),再進(jìn)行跳轉(zhuǎn)。

2. 讀取一個(gè)DID,tester要判斷一下返回值。返回值里面可能包含密鑰的一部分信息。

3. 27服務(wù),解鎖,通過(guò)安全驗(yàn)證。

13640de0-3980-11ee-9e74-dac502259ad0.jpg

注意10 02服務(wù)不應(yīng)直接進(jìn)行肯定響應(yīng),存在風(fēng)險(xiǎn)

1370d78c-3980-11ee-9e74-dac502259ad0.jpg

4. 寫DID指紋,標(biāo)記寫軟件人的身份,ECU回復(fù)寫指紋成功。(根據(jù)OEM要求來(lái)執(zhí)行)

5. 31服務(wù)-擦除Flash。ECU肯定響應(yīng),擦除成功。

6. 34服務(wù),請(qǐng)求數(shù)據(jù)下載,ECU回復(fù)確認(rèn)最大塊大小。

7. 36服務(wù),開始傳輸數(shù)據(jù)。每個(gè)塊傳輸完成后,ECU肯定響應(yīng)。判斷是否還有更多塊需要下載。最多可以支持255個(gè)塊。

8. 37服務(wù),請(qǐng)求退出傳輸。ECU肯定響應(yīng)。

9. 31服務(wù)-校驗(yàn)APP段程序,檢查編程一致性/完整性。ECU肯定響應(yīng)。校驗(yàn)成功。

10. 若有更多塊需要下載,重新執(zhí)行31(擦除Flash區(qū)域)-34-36-37-31(校驗(yàn))服務(wù)。若無(wú),往下執(zhí)行。

11. 11服務(wù),ECU復(fù)位。之后應(yīng)直接跳轉(zhuǎn)到新下載的APP段程序中。

138fe19a-3980-11ee-9e74-dac502259ad0.jpg

31(擦Flash)-34-36

13aed8c0-3980-11ee-9e74-dac502259ad0.jpg

36-37-31(校驗(yàn))

(3)后編程狀態(tài)

1. 10服務(wù)切換到03擴(kuò)展會(huì)話。

2. 執(zhí)行28服務(wù)和85服務(wù),使能非診斷報(bào)文和DTC。這是對(duì)整車網(wǎng)絡(luò)進(jìn)行操作的,一般都是以功能尋址的方式來(lái)發(fā)送。注意先執(zhí)行28,后執(zhí)行85,避免DTC誤報(bào)。

13b8126e-3980-11ee-9e74-dac502259ad0.png

3. 27服務(wù),安全校驗(yàn),準(zhǔn)備寫入數(shù)據(jù)。

4. 2E服務(wù),將編程信息寫入到ECU中。

5. 10服務(wù),退回01默認(rèn)會(huì)話。結(jié)束。

13d4b478-3980-11ee-9e74-dac502259ad0.jpg

4、BootLoader的啟動(dòng)順序與轉(zhuǎn)換流程

以下流程僅作為參考,有很多不規(guī)范之處。歡迎大家留言探討。

1. ECU上電或復(fù)位后,先進(jìn)入Boot段。從Flash/EEPROM中讀取 App有效標(biāo)志,運(yùn)行boot標(biāo)志 。

2.判斷運(yùn)行boot標(biāo)志,若為1,則進(jìn)入Boot段的編程會(huì)話(安全等級(jí)為上鎖),之后寫Flash/EEPROM(不安全操作),運(yùn)行boot標(biāo)志清零。若S3定時(shí)器超時(shí)則退回Boot段默認(rèn)會(huì)話。

3. 經(jīng)過(guò)安全訪問(wèn)進(jìn)入Level2解鎖狀態(tài),開始執(zhí)行App內(nèi)存擦除,擦除后 App有效標(biāo)志清零(不安全操作)。

4. 開始燒寫。燒寫成功后運(yùn)行boot標(biāo)志寫0,App有效標(biāo)志 寫1。

2*. 判斷運(yùn)行boot標(biāo)志,若為0,則進(jìn)入Boot段的默認(rèn)會(huì)話。

3*. 50ms后判斷 App有效標(biāo)志,若為1,則跳轉(zhuǎn)到 App段默認(rèn)會(huì)話。實(shí)現(xiàn)時(shí)使用匯編指令執(zhí)行APP段程序;若為0,退回Boot段默認(rèn)會(huì)話,且不再判斷 App有效標(biāo)志,不會(huì)再嘗試進(jìn)入App段。

4*. App段程序若收到了編程會(huì)話請(qǐng)求,運(yùn)行boot標(biāo)志寫1 ,隨即執(zhí)行ECU復(fù)位,這樣會(huì)重新進(jìn)入boot段程序。

注:從BOOT跳入APP前需要判斷APP的數(shù)據(jù)完整性,例如進(jìn)行CRC校驗(yàn)。

5、問(wèn)題點(diǎn)

Q:假如燒進(jìn)去了不良App段程序,無(wú)法返回boot段程序怎么辦?

A:參照電腦的開機(jī)方式,在ECU開機(jī)之后,預(yù)留很短的一段時(shí)間維持在boot狀態(tài),在這段時(shí)間內(nèi),若收到指定報(bào)文(比如,電腦是按住F8),那么就不跳轉(zhuǎn)到App段了。

Q:運(yùn)行boot標(biāo)志和App有效標(biāo)志為了安全起見,應(yīng)該保存到哪里?

A:運(yùn)行boot標(biāo)志可以放置在RAM中,由Boot和App共用。

Q:上文圖中的CAN數(shù)據(jù)實(shí)例,為什么出現(xiàn)了兩次CRC的校驗(yàn)?CRC校驗(yàn)是對(duì)哪些數(shù)據(jù)的校驗(yàn)?

A:OEM不希望ECU中保存有可以擦寫Flash的代碼,所以BootLoader需要在燒錄App之前,先把擦寫Flash的代碼通過(guò)UDS燒寫到RAM中,燒完了之后進(jìn)行一下31服務(wù)下的CRC校驗(yàn)。之后燒錄ECU的App程序,App可能會(huì)因?yàn)榈刂凡贿B續(xù)而分為很多段下載。下載完畢后需要進(jìn)行總的CRC校驗(yàn)。不管哪次校驗(yàn),CRC所校驗(yàn)的數(shù)據(jù)是代碼的數(shù)據(jù)段,即36服務(wù)中傳輸?shù)挠行?shù)據(jù)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1635

    瀏覽量

    148032
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2754

    瀏覽量

    463717
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6032

    瀏覽量

    135995
  • ecu
    ecu
    +關(guān)注

    關(guān)注

    14

    文章

    886

    瀏覽量

    54504
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    235

    瀏覽量

    45627

原文標(biāo)題:圖解基于UDS的Flash BootLoader

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TSMaster 的 CAN UDS 診斷操作指南(下)

    UDSonCAN/CANFD的功能以及詳細(xì)的使用操作。本文關(guān)鍵詞:UDS,BootLoader,自動(dòng)診斷流程,診斷系統(tǒng)變量目錄Catalog4.TSMaster診斷控制臺(tái)5.
    的頭像 發(fā)表于 06-18 08:21 ?1849次閱讀
    TSMaster 的 CAN <b class='flag-5'>UDS</b> 診斷操作指南(下)

    Flash bootloader 軟件免費(fèi)體驗(yàn)報(bào)名了,數(shù)量有限僅有5套測(cè)試板

    Flash bootloader 軟件免費(fèi)體驗(yàn)報(bào)名了,數(shù)量有限僅有5套測(cè)試板,先到先得。2015-04-21 15:36來(lái)源:深圳市富裕龍電子作者:Ken使用群體:汽車電子ECU開發(fā)人員,測(cè)試人員
    發(fā)表于 04-25 17:23

    STM32 Bootloader UDS技術(shù)要點(diǎn)是什么?

    STM32 Bootloader UDS技術(shù)要點(diǎn)是什么?
    發(fā)表于 02-11 07:26

    基于MM32F0140系列MCU實(shí)現(xiàn)UDS Bootloader的設(shè)計(jì)

    1、使用MM32F0140系列MCU實(shí)現(xiàn)UDS Bootloader  MM32F0140 使用高性能的 Arm?Cortex-M0 內(nèi)核的 32 位微控制器,最高工作頻率可達(dá) 72MHz,內(nèi)置
    發(fā)表于 09-15 16:35

    求分享S32K3xx UDS引導(dǎo)加載程序

    我的BootLoader工程是基于UDS協(xié)議實(shí)現(xiàn)燒寫的,燒寫功能是通過(guò)配置EB實(shí)現(xiàn)的,EB版本為28.2.0,RTD版本為2.0.2。 為了防止擦寫函數(shù)被誤觸發(fā),我想直接在RAM區(qū)間內(nèi)生成擦寫函數(shù)
    發(fā)表于 05-12 08:12

    BOOTLOADER (基于Platform Flash)

    Xilinx FPGA工程例子源碼:BOOTLOADER (基于Platform Flash)
    發(fā)表于 06-07 14:13 ?9次下載

    基于不同類型Flash-ROM的Bootloader設(shè)計(jì)

    基于不同類型Flash-ROM的Bootloader設(shè)計(jì)
    發(fā)表于 10-26 11:41 ?11次下載
    基于不同類型<b class='flag-5'>Flash</b>-ROM的<b class='flag-5'>Bootloader</b>設(shè)計(jì)

    加載flash并執(zhí)行(LFAE)次級(jí)bootloader的示例

    這篇應(yīng)用筆記描述了一個(gè)加載flash并執(zhí)行(LFAE)次級(jí)bootloader的示例。這個(gè)應(yīng)用是開發(fā)來(lái)增強(qiáng)AN2546中給出的加載RAM并執(zhí)行主bootloader的,其中加入了允許隨意寫fl
    發(fā)表于 11-24 13:53 ?3196次閱讀

    STM32單片機(jī)bootloader掃盲

    BootLoader只不過(guò)是擁有從外部接收數(shù)據(jù),更新Flash(也就是APP),跳轉(zhuǎn)至APP功能的特殊APP罷了。以STM32F103為例,如果沒(méi)有BootLoader,flash
    發(fā)表于 11-26 18:21 ?77次下載
    STM32單片機(jī)<b class='flag-5'>bootloader</b>掃盲

    STM32 Bootloader UDS 技術(shù)概要

    STM32在單片機(jī)領(lǐng)域因性價(jià)比高受到廣大工程師的青睞,筆者最近做了一個(gè)STM32 M3內(nèi)核的BootLoader現(xiàn)在把技術(shù)的要點(diǎn)梳理如下:1、首先是對(duì)ROM分區(qū)的規(guī)劃,把ROM劃分為BOOT區(qū)
    發(fā)表于 12-08 16:21 ?18次下載
    STM32 <b class='flag-5'>Bootloader</b> <b class='flag-5'>UDS</b> 技術(shù)概要

    UDS常用診斷服務(wù)

    UDS診斷概述 UDS(Unified Diagnostic Services,統(tǒng)一的診斷服務(wù))診斷協(xié)議是在汽車電子ECU環(huán)境下的一種診斷通訊協(xié)議。簡(jiǎn)單來(lái)說(shuō),可以理解為UDS診斷協(xié)議就是ISO
    的頭像 發(fā)表于 06-12 10:36 ?1.2w次閱讀
    <b class='flag-5'>UDS</b>常用診斷服務(wù)

    STM32 UDS Bootloader開發(fā)需求

    本次使用的單片機(jī)為STM32F103RCT6,flash大小256k,一個(gè)扇區(qū)2k,SRAM:48KB
    發(fā)表于 06-12 15:44 ?1385次閱讀
    STM32 <b class='flag-5'>UDS</b> <b class='flag-5'>Bootloader</b>開發(fā)需求

    基于CAN總線的UDS診斷Bootloader升級(jí)MCU工具

    今日跟大家分享參加野火【瑞薩RA MCU創(chuàng)意氛圍賽】選手的項(xiàng)目——基于CAN總線的UDS診斷Bootloader升級(jí)MCU工具。
    的頭像 發(fā)表于 08-21 14:01 ?2374次閱讀
    基于CAN總線的<b class='flag-5'>UDS</b>診斷<b class='flag-5'>Bootloader</b>升級(jí)MCU工具

    基于MM32F0140的UDS Bootloader學(xué)習(xí)筆記

    基于MM32F0140的UDS Bootloader學(xué)習(xí)筆記
    的頭像 發(fā)表于 10-30 17:11 ?777次閱讀
    基于MM32F0140的<b class='flag-5'>UDS</b> <b class='flag-5'>Bootloader</b>學(xué)習(xí)筆記

    如何開發(fā)不帶Flash API 的Bootloader實(shí)現(xiàn)在線升級(jí)

    電子發(fā)燒友網(wǎng)站提供《如何開發(fā)不帶Flash API 的Bootloader實(shí)現(xiàn)在線升級(jí).pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:41 ?0次下載
    如何開發(fā)不帶<b class='flag-5'>Flash</b> API 的<b class='flag-5'>Bootloader</b>實(shí)現(xiàn)在線升級(jí)