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

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

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

簡述基于UDS的BootLoader架構(gòu)設(shè)計及規(guī)范

汽車工程師 ? 來源:CSDN技術(shù)社區(qū) ? 作者: 摸魚的攻城獅 ? 2021-10-20 09:43 ? 次閱讀

01

BootLoader概述

1.1 Boot Loader設(shè)計目的

車載控制器軟件需要滿足兩方面的要求:

1)、功能方面的需求:用戶需要的基本功能實現(xiàn);

2)、更新及升級需求:對于售后的要求,車輛上市后針對軟件缺陷修復(fù)及后續(xù)功能擴展等要求。

刷寫App程序存在兩種方式:

1)、使用仿真器或燒錄器直接燒錄Application;

2)、將Application數(shù)據(jù)通過總線(CAN、LIN、CANFD或以太網(wǎng))按照一定格式傳輸給ECU。

對于實車,直接連接燒錄器或仿真器這種方式極不方便且花費較大,再者安全性不高。因此,產(chǎn)品很少存在燒錄接口。從經(jīng)濟使用的角度來講,普遍采用第二種方式。

1.2 Boot Loader基本功能

Boot Loader又稱為引導(dǎo)加載程序,引導(dǎo)加載程序是系統(tǒng)上電后運行的第一段軟件代碼,常被用來加載系統(tǒng)或者更新系統(tǒng)等。因此,大部分的Boot Loader存在兩種不同的操作模式:

1)啟動模式

啟動加載(BootLoading)模式也稱為自主模(Autonmous)式,即BootLoader從目標機上某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載至RAM中運行,整個過程中并沒有用戶的介入。

2)下載模式

在下載(DownLoading)模式下,目標機上的Boot Loader將通過串口連接或者網(wǎng)絡(luò)連接等通信手段下載文件,如下載內(nèi)核映像和根文件系統(tǒng)映像等。通常文件會保存在RAM中,然后將其寫入目標地址完后系統(tǒng)的更新等。

02

BootLoader基本需求設(shè)計

2.1 Boot Loader功能概述

兩個SWC:

1)、啟動管理——控制器的啟動管理等

2)、應(yīng)用程序——ECU軟件下載升級及標定數(shù)據(jù)再編程

四個服務(wù)模塊:

1)、內(nèi)存管理——軟件更新主要是將Flash中的Application及標定數(shù)據(jù)重編程,內(nèi)存擦除與重寫驅(qū)動必不可少的模塊;

2)、CAN協(xié)議棧——軟件更新媒介

3)、看門狗模塊——軟件運行保護

4)、安全模塊——軟件數(shù)據(jù)保護,下載數(shù)據(jù)校驗等

2.2 ECU啟動時序

Bootloader是所有支持重編程的ECU必須具備的軟件功能,在ECU運行過程中,執(zhí)行的是應(yīng)用軟件和應(yīng)用數(shù)據(jù),僅當應(yīng)用軟件或應(yīng)用數(shù)據(jù)無效時,或者要求對其進行升級或特殊測試時,Bootloader軟件才被激活。啟動過程如下圖所示:

2.3 軟件執(zhí)行安全機制設(shè)計

2.3.1 應(yīng)用軟件運行安全性

應(yīng)用軟件和應(yīng)用數(shù)據(jù)可以同時編程或者相互獨立編程,不允許Boot Loader在軟件運行時被非法修改。因此,Bootloader軟件存儲于被保護的存儲器區(qū)域,即使發(fā)生潛在錯誤時,控制器始終保證可重新編程。

基于軟件運行安全性考慮,flash diver不會存在放在flash中,避免正常程序在發(fā)生錯誤時可能的非法修改。在需要執(zhí)行應(yīng)用程序或應(yīng)用數(shù)據(jù)需要時,首先將flash diver下載至ram中,然后執(zhí)行相應(yīng)的更新。

基于以上考慮,將Boot Loader劃分為:

PBL(Primary Boot Loader):用于啟動過程中的狀態(tài)管理及下載軟件等,下載 SBL、更新應(yīng)用軟件及應(yīng)用數(shù)據(jù)

SBL(Secondary Boot Loader):本質(zhì)為Flash Diver(可被用來修改寫在flash中生產(chǎn)信息校驗信息等),下載完成后重新啟動將會被清除

##SBL也可是運行在RAM中的另一個完整Boot Loader,以上將其認為flash driver

2.3.2 軟件更新安全機制設(shè)計

為確保下載的安全,ECU需設(shè)計安全機制,避免以下幾種情況:a. 來自非法源的下載動作;b. 當前編程條件不滿足;c. 下載錯誤的應(yīng)用軟件或應(yīng)用數(shù)據(jù)到ECU;d. 軟件之間不兼容;

解決措施:

1)、安全訪問——ECU通過SEED&KEY機制進行安全訪問服務(wù)限制,保證ECU免遭未授權(quán)的編程動作影響。

2)、預(yù)編程條件——ECU確保編程時處于安全狀態(tài),條件不滿足(如高壓上電或車輛運行)時,編程服務(wù)請求將被拒絕。

3)、完整性校驗——ECU對即將下載到存儲器的程序或數(shù)據(jù)進行完整性檢查,當一個邏輯模塊下載后,使用CRC32算法驗證當前邏輯塊的所有數(shù)據(jù)字節(jié)是否被正確傳輸和寫入。通過“檢查編程完整性”例程控制激活ECU完整性校驗。當ECU接收到此服務(wù)請求時,Bootloader將計算下載數(shù)據(jù)字節(jié)的CRC32值,并將計算結(jié)果與診斷儀請求報文中發(fā)送的校驗值進行比較。

4)、一致性檢查——不兼容的軟件不能配合使用,如果配合使用可能會使功能異?;虍a(chǎn)生致命性錯誤。為此,ECU通過驗證軟件兼容性來檢查編程程序的一致性,包括應(yīng)用軟件與Bootloader軟件、應(yīng)用數(shù)據(jù)與應(yīng)用軟件檢驗等。

5)、有效性檢查——ECU內(nèi)部有一個標志位,用于標識應(yīng)用軟件是否有效。如果編程完整性檢查和一致性檢查都正確時,ECU才會設(shè)置應(yīng)用軟件的標志位為有效。只有標志位為有效時,應(yīng)用軟件才可以運行。

03

BootLoader重編程流程設(shè)計

3.1 BootLoader重編程會話跳轉(zhuǎn)設(shè)計

在應(yīng)用模式下,使用了兩種不同的診斷會話模式:默認會話模式和擴展會話模式。

在Bootloader模式下,使用了三種不同的診斷會話模式:默認會話模式,擴展會話模式和編程會話模式。

如果ECU在正確的條件下收到“$10 $02”指令,ECU將重編程請求標志狀態(tài)位設(shè)為有效,并執(zhí)行ECU重啟。

上電/復(fù)位后,ECU首先執(zhí)行Bootloader引導(dǎo)代碼,然后檢查外部編程請求標志位:

1)、如果外部編程請求標志位為有效,那么即使應(yīng)用程序是有效的,Bootloader也會繼續(xù)進一步執(zhí)行,在此情況下,ECU直接進入編程會話模式。

2)、如果外部重編程請求標志位為無效,則繼續(xù)檢查應(yīng)用軟件的標志位狀態(tài):(a)、 如果應(yīng)用軟件是有效的,則啟動應(yīng)用模式;(b)、如果應(yīng)用軟件無效,ECU停留在Bootloader模式下的默認會話模式。

在Bootloader模式下,ECU重啟方式:

1)、無論當前處于何種會話模式,“$11 $01”都會引導(dǎo)ECU重啟;

2)、 在擴展會話模式或編程會話模式下,S3定時器超時會導(dǎo)致ECU重啟;

3)、在編程會話模式下,“$10 $01”會導(dǎo)致ECU重啟。

3.2 BootLoader重編程時序設(shè)計

編程時序分為三個編程步驟:

預(yù)編程步驟:編程前的CAN網(wǎng)絡(luò)準備;

主編程步驟:下載應(yīng)用軟件或應(yīng)用數(shù)據(jù);

后編程步驟:重同步CAN網(wǎng)絡(luò)。

如果在預(yù)編程、主編程和后編程步驟過程中,任何物理尋址的請求及響應(yīng)不滿足要求,則全部時序需再次執(zhí)行。

3.2.1 預(yù)編程步驟

預(yù)編程步驟用來為要下載的ECU做重編程前的CAN網(wǎng)絡(luò)準備。此步驟也包含了提高下載速度的準備。此步驟的請求報文能采用的是物理尋址,或功能尋址。如下圖所示:

a)、診斷會話控制 $10 $03:為了禁止ECU間的正常通信和控制DTC設(shè)置,預(yù)編程需要啟動非默認會話模式。通過使用會話類型為擴展會話模式的診斷會話控制($10)服務(wù)來完成。此請求使用一個單幀請求報文,通過功能尋址發(fā)送給所有的ECU。

b)、例程控制“檢查編程預(yù)條件” $31 $01 $XXXX:通過此例程來檢查ECU編程條件,從而確保系統(tǒng)安全,如果有任何不安全的因素,ECU將拒絕編程。

注意:如果ECU在未收到“檢查編程預(yù)條件”例程($31 $01 $XXXX)的情況下,收到“$10 $02”請求,ECU將拒絕進入Bootloader模式,并且發(fā)送否定響應(yīng)。

c)、控制DTC設(shè)置 $85 $02:診斷儀通過DTC設(shè)置類型設(shè)為“關(guān)閉”的控制DTC設(shè)置服務(wù)請求。此請求使用一個單幀請求報文,通過功能尋址發(fā)送給所有的ECU。

d)、通信控制 $28 $03 $03:診斷儀通過通信控制($28)服務(wù)請求,禁止非診斷報文的發(fā)送和接收。請求中的控制類型參數(shù)置為“disable the transmission and the reception”,通信類型置為“application and network management messages”。此請求使用一個單幀請求報文,通過功能尋址發(fā)送給所有的ECU。

3.2.2 主編程步驟

在預(yù)編程步驟之后,是主編程步驟。主編程時序是單個ECU編程事件的應(yīng)用,因此所有服務(wù)的請求都使用物理尋址。

a)、診斷會話控制 $10 $02:在收到一個尋址方式為物理尋址,子功能為編程會話的診斷會話控制($10)服務(wù)后,ECU啟動Bootloader,并分配編程所需的所有資源。ECU需先發(fā)送肯定響應(yīng),再執(zhí)行跳轉(zhuǎn)到編程模式動作。

b)、安全訪問 $27 $XX/XX:編程事件必須通過安全訪問。安全訪問($27)服務(wù)在排放相關(guān)和安全系統(tǒng)中是強制的。其它系統(tǒng)不要求使用該服務(wù)。下載前,通過安全訪問過程是強制的,確保只有合法的診斷儀能對ECU進行下載操作。

c)、驅(qū)動下載 $34,$36,$37,$31:當ECU的非易失性存儲單元中沒有存儲內(nèi)存驅(qū)動時,將執(zhí)行內(nèi)存驅(qū)動的下載。下載應(yīng)該按照如下時序來進行:請求下載、傳輸數(shù)據(jù)、請求傳輸退出。下載完所有字節(jié)后,用“檢查編程完整性”例程($31 $01 $XX $XX)來檢查所有的字節(jié)都正確傳輸。

d)、寫入數(shù)據(jù) $2E $XXXX:在擦除內(nèi)存例程之前,將“指紋”寫到ECU內(nèi)存中是強制的?!爸讣y”標識了是哪個診斷儀對ECU內(nèi)存做了修改。使用XXXX數(shù)據(jù)標識符而不是引導(dǎo)軟件指紋、應(yīng)用軟件指紋、應(yīng)用數(shù)據(jù)指紋這些數(shù)據(jù)標識符。每個邏輯塊(除了驅(qū)動)下載前,診斷儀將首先寫“指紋”,在下載完邏輯塊后,ECU將識別之前下載的程序是哪個邏輯塊(即邏輯塊序號),并根據(jù)邏輯塊的序號將它存儲。在追蹤指紋信息時,診斷儀將發(fā)報文“$22 $XXXX”,ECU將通過“$62 $XXXX”,返回每一個邏輯塊的指紋信息。

e)、例程控制——“擦除內(nèi)存” $31 $01 $XXXX:為了允許應(yīng)用軟件和數(shù)據(jù)下載,ECU的內(nèi)存將被擦除。此步驟通過例程控制服務(wù)($31)來執(zhí)行擦除內(nèi)存。如果擦除內(nèi)存例程被調(diào)用執(zhí)行,那么應(yīng)用軟件的標志位將被置為無效。

f)、下載過程 $34 $36 $37:應(yīng)用軟件或者數(shù)據(jù)的每一個連續(xù)的數(shù)據(jù)塊(也叫段,可能是一個完整的應(yīng)用軟件或者數(shù)據(jù),也可能是應(yīng)用軟件或者數(shù)據(jù)的一部分)下載到ECU非易失性內(nèi)存中,都是遵循下面的服務(wù)順序完成數(shù)傳輸:請求下載($34)、傳輸數(shù)據(jù)($36)、請求退出傳輸($37)。

注:單個應(yīng)用軟件或數(shù)據(jù)塊可能需要多個數(shù)據(jù)傳輸($36)請求報文來完成傳輸(當數(shù)據(jù)塊長度超出網(wǎng)絡(luò)層緩存大小時,就會出現(xiàn)這種情況)。

g)、例程控制——“檢查編程完整性” $31 $01 $XXXX:此例程用來檢查邏輯塊的完整性。

h)、例程控制——“檢查編程一致性” $31 $01 $XXXX:一旦完成所有的應(yīng)用軟件或數(shù)據(jù)塊/模塊的下載,診斷儀將開始一個例程來觸發(fā)ECU檢查重編程的一致性。

i) 、電控單元復(fù)位 $11 $01:診斷儀使用物理尋址,發(fā)送一個復(fù)位類型為硬復(fù)位的ECU復(fù)位($11)服務(wù)請求報文到CAN網(wǎng)絡(luò)上。

備注:通過ECU復(fù)位服務(wù)請求將使ECU結(jié)束重編程過程,返回到正常的操作模式。內(nèi)存驅(qū)動代碼必須從RAM緩存中完全清除,避免意外激活這些可能會進行非預(yù)期的內(nèi)存擦除或程序操作的代碼。

3.2.3 后編程步驟

a)、診斷會話控制 $10 $01:診斷儀發(fā)送一個會話類型為默認會話的診斷會話控制($10)服務(wù)請求報文到CAN網(wǎng)絡(luò)上。所有的ECU接收到診斷會話控制($10),而進入到默認會話模式。此請求通過功能尋址發(fā)送,請求發(fā)送給所有包含在編程事件中或因此而進入非默認會話模式的ECU。跳轉(zhuǎn)到默認會話模式,表示通信控制($28)服務(wù)和控制DTC設(shè)置($85)服務(wù)也將復(fù)位到默認狀態(tài)。

b)、清除診斷信息 $14 FF FF FF:如果重編程ECU在編程步驟被重啟,當編程ECU運行在默認會話模式時,網(wǎng)絡(luò)上其它的ECU仍然在不能正常通信狀態(tài),此時,一些可能被存儲在編程ECU中的診斷信息就應(yīng)該通過物理尋址的清除診斷信息($14)服務(wù)來清除。

版權(quán)聲明:本文為CSDN博主「摸魚的攻城獅」的原創(chuàng)文章,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

編輯:jq

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

    關(guān)注

    88

    文章

    3544

    瀏覽量

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

    關(guān)注

    14

    文章

    865

    瀏覽量

    54335
  • CAN網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    1

    文章

    44

    瀏覽量

    16865

原文標題:技術(shù)|基于UDS的BootLoader設(shè)計——架構(gòu)設(shè)計及規(guī)范

文章出處:【微信號:e700_org,微信公眾號:汽車工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    軟件架構(gòu)設(shè)計教程

    軟件架構(gòu)設(shè)計教程
    發(fā)表于 09-26 15:27

    【汽車電氣架構(gòu)設(shè)計軟件】

    因工作需要,求整車電氣架構(gòu)設(shè)計軟件——PREEvision(盜版),價格可議,WetChat/***,非誠勿擾
    發(fā)表于 04-18 14:20

    STM32軟件架構(gòu)設(shè)計的意義

    STM32軟件架構(gòu)1、架構(gòu)設(shè)計的意義(1)應(yīng)用代碼邏輯清晰,且避免代碼冗余;(2)代碼通用性,方便軟件高速、有效的移植;(3)各功能獨立,低耦合高內(nèi)聚;2、總體架構(gòu)圖3、結(jié)構(gòu)層說明4、遵循規(guī)則5、優(yōu)劣評估6、STM32實例說明
    發(fā)表于 08-04 07:23

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

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

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

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

    系統(tǒng)架構(gòu)設(shè)計的詳細講解

    上一篇,我們討論了故障度量和安全機制的ASIL等級。本篇我們來聊一聊系統(tǒng)架構(gòu)設(shè)計相關(guān)內(nèi)容。01系統(tǒng)架構(gòu)設(shè)計和TSC當我們開始寫TSC時,會涉及到下圖中一系列的內(nèi)容:當我們完成前三期(鏈接見文末)提到的安全機制規(guī)范后,我們就要開始
    的頭像 發(fā)表于 12-24 14:33 ?1652次閱讀

    SWE.2的軟件架構(gòu)設(shè)

    過程ID:SWE.2 過程名稱:軟件架構(gòu)設(shè)計 過程目的:軟件架構(gòu)設(shè)計過程目的是建立一個架構(gòu)設(shè)計,識別哪些軟件需求應(yīng)該分配給軟件的哪些要素,并根據(jù)已定義的標準評估軟件架構(gòu)設(shè)計。 ? 過程
    的頭像 發(fā)表于 01-11 10:36 ?2704次閱讀

    SYS.3的系統(tǒng)架構(gòu)設(shè)

    系統(tǒng)架構(gòu)設(shè)計 過程ID:SYS.3 過程名稱:系統(tǒng)架構(gòu)設(shè)計 ? 過程目的:系統(tǒng)架構(gòu)設(shè)計過程目的,是建立系統(tǒng)架構(gòu)設(shè)計,并確定將哪些系統(tǒng)需求分配給系統(tǒng)的哪些要素,以及根據(jù)已定義的準則評估系
    的頭像 發(fā)表于 02-13 16:02 ?2590次閱讀

    架構(gòu)與微架構(gòu)設(shè)

    下面將從芯片的架構(gòu)設(shè)計、微架構(gòu)設(shè)計、使用設(shè)計文檔、設(shè)計分區(qū)、時鐘域和時鐘組、架構(gòu)調(diào)整與性能改進、處理器微架構(gòu)設(shè)計策略等角度進行說明,并以視頻H.264編碼器設(shè)計為例。
    的頭像 發(fā)表于 05-08 10:42 ?1127次閱讀
    <b class='flag-5'>架構(gòu)</b>與微<b class='flag-5'>架構(gòu)設(shè)</b>計

    無線收發(fā)系統(tǒng)架構(gòu)簡述

    無線收發(fā)系統(tǒng)架構(gòu)簡述
    的頭像 發(fā)表于 05-09 11:15 ?1098次閱讀
    無線收發(fā)系統(tǒng)<b class='flag-5'>架構(gòu)</b><b class='flag-5'>簡述</b>

    UDS常用診斷服務(wù)

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

    圖解基于UDS的Flash BootLoader

    這張圖和恒潤教程中的BootLoader流程大體是一致的。
    的頭像 發(fā)表于 08-14 10:49 ?1126次閱讀
    圖解基于<b class='flag-5'>UDS</b>的Flash <b class='flag-5'>BootLoader</b>

    基于CAN總線的UDS診斷Bootloader升級MCU工具

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

    SWE.2軟件架構(gòu)設(shè)

    過程ID : SWE.2 過程名稱 : 軟件架構(gòu)設(shè)計 過程目的 : 軟件架構(gòu)設(shè)計過程目的是建立一個架構(gòu)設(shè)計,識別哪些軟件需求應(yīng)該分配給軟件的哪些要素,并根據(jù)已定義的標準評估軟件架構(gòu)設(shè)
    的頭像 發(fā)表于 08-24 09:43 ?869次閱讀

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

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