01
BootLoader概述
1.1 Boot Loader設(shè)計(jì)目的
車載控制器軟件需要滿足兩方面的要求:
1)、功能方面的需求:用戶需要的基本功能實(shí)現(xiàn);
2)、更新及升級(jí)需求:對(duì)于售后的要求,車輛上市后針對(duì)軟件缺陷修復(fù)及后續(xù)功能擴(kuò)展等要求。
刷寫App程序存在兩種方式:
2)、將Application數(shù)據(jù)通過(guò)總線(CAN、LIN、CANFD或以太網(wǎng))按照一定格式傳輸給ECU。
對(duì)于實(shí)車,直接連接燒錄器或仿真器這種方式極不方便且花費(fèi)較大,再者安全性不高。因此,產(chǎn)品很少存在燒錄接口。從經(jīng)濟(jì)使用的角度來(lái)講,普遍采用第二種方式。
1.2 Boot Loader基本功能
Boot Loader又稱為引導(dǎo)加載程序,引導(dǎo)加載程序是系統(tǒng)上電后運(yùn)行的第一段軟件代碼,常被用來(lái)加載系統(tǒng)或者更新系統(tǒng)等。因此,大部分的Boot Loader存在兩種不同的操作模式:
1)啟動(dòng)模式
啟動(dòng)加載(BootLoading)模式也稱為自主模(Autonmous)式,即BootLoader從目標(biāo)機(jī)上某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載至RAM中運(yùn)行,整個(gè)過(guò)程中并沒(méi)有用戶的介入。
2)下載模式
在下載(DownLoading)模式下,目標(biāo)機(jī)上的Boot Loader將通過(guò)串口連接或者網(wǎng)絡(luò)連接等通信手段下載文件,如下載內(nèi)核映像和根文件系統(tǒng)映像等。通常文件會(huì)保存在RAM中,然后將其寫入目標(biāo)地址完后系統(tǒng)的更新等。
02
BootLoader基本需求設(shè)計(jì)
2.1 Boot Loader功能概述
兩個(gè)SWC:
1)、啟動(dòng)管理——控制器的啟動(dòng)管理等
2)、應(yīng)用程序——ECU軟件下載升級(jí)及標(biāo)定數(shù)據(jù)再編程等
四個(gè)服務(wù)模塊:
1)、內(nèi)存管理——軟件更新主要是將Flash中的Application及標(biāo)定數(shù)據(jù)重編程,內(nèi)存擦除與重寫驅(qū)動(dòng)必不可少的模塊;
2)、CAN協(xié)議棧——軟件更新媒介
3)、看門狗模塊——軟件運(yùn)行保護(hù)
4)、安全模塊——軟件數(shù)據(jù)保護(hù),下載數(shù)據(jù)校驗(yàn)等
2.2 ECU啟動(dòng)時(shí)序
Bootloader是所有支持重編程的ECU必須具備的軟件功能,在ECU運(yùn)行過(guò)程中,執(zhí)行的是應(yīng)用軟件和應(yīng)用數(shù)據(jù),僅當(dāng)應(yīng)用軟件或應(yīng)用數(shù)據(jù)無(wú)效時(shí),或者要求對(duì)其進(jìn)行升級(jí)或特殊測(cè)試時(shí),Bootloader軟件才被激活。啟動(dòng)過(guò)程如下圖所示:
2.3 軟件執(zhí)行安全機(jī)制設(shè)計(jì)
2.3.1 應(yīng)用軟件運(yùn)行安全性
應(yīng)用軟件和應(yīng)用數(shù)據(jù)可以同時(shí)編程或者相互獨(dú)立編程,不允許Boot Loader在軟件運(yùn)行時(shí)被非法修改。因此,Bootloader軟件存儲(chǔ)于被保護(hù)的存儲(chǔ)器區(qū)域,即使發(fā)生潛在錯(cuò)誤時(shí),控制器始終保證可重新編程。
基于軟件運(yùn)行安全性考慮,flash diver不會(huì)存在放在flash中,避免正常程序在發(fā)生錯(cuò)誤時(shí)可能的非法修改。在需要執(zhí)行應(yīng)用程序或應(yīng)用數(shù)據(jù)需要時(shí),首先將flash diver下載至ram中,然后執(zhí)行相應(yīng)的更新。
基于以上考慮,將Boot Loader劃分為:
PBL(Primary Boot Loader):用于啟動(dòng)過(guò)程中的狀態(tài)管理及下載軟件等,下載 SBL、更新應(yīng)用軟件及應(yīng)用數(shù)據(jù)
SBL(Secondary Boot Loader):本質(zhì)為Flash Diver(可被用來(lái)修改寫在flash中生產(chǎn)信息校驗(yàn)信息等),下載完成后重新啟動(dòng)將會(huì)被清除
##SBL也可是運(yùn)行在RAM中的另一個(gè)完整Boot Loader,以上將其認(rèn)為flash driver
2.3.2 軟件更新安全機(jī)制設(shè)計(jì)
為確保下載的安全,ECU需設(shè)計(jì)安全機(jī)制,避免以下幾種情況:a. 來(lái)自非法源的下載動(dòng)作;b. 當(dāng)前編程條件不滿足;c. 下載錯(cuò)誤的應(yīng)用軟件或應(yīng)用數(shù)據(jù)到ECU;d. 軟件之間不兼容;
解決措施:
1)、安全訪問(wèn)——ECU通過(guò)SEED&KEY機(jī)制進(jìn)行安全訪問(wèn)服務(wù)限制,保證ECU免遭未授權(quán)的編程動(dòng)作影響。
2)、預(yù)編程條件——ECU確保編程時(shí)處于安全狀態(tài),條件不滿足(如高壓上電或車輛運(yùn)行)時(shí),編程服務(wù)請(qǐng)求將被拒絕。
3)、完整性校驗(yàn)——ECU對(duì)即將下載到存儲(chǔ)器的程序或數(shù)據(jù)進(jìn)行完整性檢查,當(dāng)一個(gè)邏輯模塊下載后,使用CRC32算法驗(yàn)證當(dāng)前邏輯塊的所有數(shù)據(jù)字節(jié)是否被正確傳輸和寫入。通過(guò)“檢查編程完整性”例程控制激活ECU完整性校驗(yàn)。當(dāng)ECU接收到此服務(wù)請(qǐng)求時(shí),Bootloader將計(jì)算下載數(shù)據(jù)字節(jié)的CRC32值,并將計(jì)算結(jié)果與診斷儀請(qǐng)求報(bào)文中發(fā)送的校驗(yàn)值進(jìn)行比較。
4)、一致性檢查——不兼容的軟件不能配合使用,如果配合使用可能會(huì)使功能異?;虍a(chǎn)生致命性錯(cuò)誤。為此,ECU通過(guò)驗(yàn)證軟件兼容性來(lái)檢查編程程序的一致性,包括應(yīng)用軟件與Bootloader軟件、應(yīng)用數(shù)據(jù)與應(yīng)用軟件檢驗(yàn)等。
5)、有效性檢查——ECU內(nèi)部有一個(gè)標(biāo)志位,用于標(biāo)識(shí)應(yīng)用軟件是否有效。如果編程完整性檢查和一致性檢查都正確時(shí),ECU才會(huì)設(shè)置應(yīng)用軟件的標(biāo)志位為有效。只有標(biāo)志位為有效時(shí),應(yīng)用軟件才可以運(yùn)行。
03
BootLoader重編程流程設(shè)計(jì)
3.1 BootLoader重編程會(huì)話跳轉(zhuǎn)設(shè)計(jì)
在應(yīng)用模式下,使用了兩種不同的診斷會(huì)話模式:默認(rèn)會(huì)話模式和擴(kuò)展會(huì)話模式。
在Bootloader模式下,使用了三種不同的診斷會(huì)話模式:默認(rèn)會(huì)話模式,擴(kuò)展會(huì)話模式和編程會(huì)話模式。
如果ECU在正確的條件下收到“$10 $02”指令,ECU將重編程請(qǐng)求標(biāo)志狀態(tài)位設(shè)為有效,并執(zhí)行ECU重啟。
上電/復(fù)位后,ECU首先執(zhí)行Bootloader引導(dǎo)代碼,然后檢查外部編程請(qǐng)求標(biāo)志位:
1)、如果外部編程請(qǐng)求標(biāo)志位為有效,那么即使應(yīng)用程序是有效的,Bootloader也會(huì)繼續(xù)進(jìn)一步執(zhí)行,在此情況下,ECU直接進(jìn)入編程會(huì)話模式。
2)、如果外部重編程請(qǐng)求標(biāo)志位為無(wú)效,則繼續(xù)檢查應(yīng)用軟件的標(biāo)志位狀態(tài):(a)、 如果應(yīng)用軟件是有效的,則啟動(dòng)應(yīng)用模式;(b)、如果應(yīng)用軟件無(wú)效,ECU停留在Bootloader模式下的默認(rèn)會(huì)話模式。
在Bootloader模式下,ECU重啟方式:
1)、無(wú)論當(dāng)前處于何種會(huì)話模式,“$11 $01”都會(huì)引導(dǎo)ECU重啟;
2)、 在擴(kuò)展會(huì)話模式或編程會(huì)話模式下,S3定時(shí)器超時(shí)會(huì)導(dǎo)致ECU重啟;
3)、在編程會(huì)話模式下,“$10 $01”會(huì)導(dǎo)致ECU重啟。
3.2 BootLoader重編程時(shí)序設(shè)計(jì)
編程時(shí)序分為三個(gè)編程步驟:
預(yù)編程步驟:編程前的CAN網(wǎng)絡(luò)準(zhǔn)備;
主編程步驟:下載應(yīng)用軟件或應(yīng)用數(shù)據(jù);
后編程步驟:重同步CAN網(wǎng)絡(luò)。
如果在預(yù)編程、主編程和后編程步驟過(guò)程中,任何物理尋址的請(qǐng)求及響應(yīng)不滿足要求,則全部時(shí)序需再次執(zhí)行。
3.2.1 預(yù)編程步驟
預(yù)編程步驟用來(lái)為要下載的ECU做重編程前的CAN網(wǎng)絡(luò)準(zhǔn)備。此步驟也包含了提高下載速度的準(zhǔn)備。此步驟的請(qǐng)求報(bào)文能采用的是物理尋址,或功能尋址。如下圖所示:
a)、診斷會(huì)話控制 $10 $03:為了禁止ECU間的正常通信和控制DTC設(shè)置,預(yù)編程需要啟動(dòng)非默認(rèn)會(huì)話模式。通過(guò)使用會(huì)話類型為擴(kuò)展會(huì)話模式的診斷會(huì)話控制($10)服務(wù)來(lái)完成。此請(qǐng)求使用一個(gè)單幀請(qǐng)求報(bào)文,通過(guò)功能尋址發(fā)送給所有的ECU。
b)、例程控制“檢查編程預(yù)條件” $31 $01 $XXXX:通過(guò)此例程來(lái)檢查ECU編程條件,從而確保系統(tǒng)安全,如果有任何不安全的因素,ECU將拒絕編程。
注意:如果ECU在未收到“檢查編程預(yù)條件”例程($31 $01 $XXXX)的情況下,收到“$10 $02”請(qǐng)求,ECU將拒絕進(jìn)入Bootloader模式,并且發(fā)送否定響應(yīng)。
c)、控制DTC設(shè)置 $85 $02:診斷儀通過(guò)DTC設(shè)置類型設(shè)為“關(guān)閉”的控制DTC設(shè)置服務(wù)請(qǐng)求。此請(qǐng)求使用一個(gè)單幀請(qǐng)求報(bào)文,通過(guò)功能尋址發(fā)送給所有的ECU。
d)、通信控制 $28 $03 $03:診斷儀通過(guò)通信控制($28)服務(wù)請(qǐng)求,禁止非診斷報(bào)文的發(fā)送和接收。請(qǐng)求中的控制類型參數(shù)置為“disable the transmission and the reception”,通信類型置為“application and network management messages”。此請(qǐng)求使用一個(gè)單幀請(qǐng)求報(bào)文,通過(guò)功能尋址發(fā)送給所有的ECU。
3.2.2 主編程步驟
在預(yù)編程步驟之后,是主編程步驟。主編程時(shí)序是單個(gè)ECU編程事件的應(yīng)用,因此所有服務(wù)的請(qǐng)求都使用物理尋址。
a)、診斷會(huì)話控制 $10 $02:在收到一個(gè)尋址方式為物理尋址,子功能為編程會(huì)話的診斷會(huì)話控制($10)服務(wù)后,ECU啟動(dòng)Bootloader,并分配編程所需的所有資源。ECU需先發(fā)送肯定響應(yīng),再執(zhí)行跳轉(zhuǎn)到編程模式動(dòng)作。
b)、安全訪問(wèn) $27 $XX/XX:編程事件必須通過(guò)安全訪問(wèn)。安全訪問(wèn)($27)服務(wù)在排放相關(guān)和安全系統(tǒng)中是強(qiáng)制的。其它系統(tǒng)不要求使用該服務(wù)。下載前,通過(guò)安全訪問(wèn)過(guò)程是強(qiáng)制的,確保只有合法的診斷儀能對(duì)ECU進(jìn)行下載操作。
c)、驅(qū)動(dòng)下載 $34,$36,$37,$31:當(dāng)ECU的非易失性存儲(chǔ)單元中沒(méi)有存儲(chǔ)內(nèi)存驅(qū)動(dòng)時(shí),將執(zhí)行內(nèi)存驅(qū)動(dòng)的下載。下載應(yīng)該按照如下時(shí)序來(lái)進(jìn)行:請(qǐng)求下載、傳輸數(shù)據(jù)、請(qǐng)求傳輸退出。下載完所有字節(jié)后,用“檢查編程完整性”例程($31 $01 $XX $XX)來(lái)檢查所有的字節(jié)都正確傳輸。
d)、寫入數(shù)據(jù) $2E $XXXX:在擦除內(nèi)存例程之前,將“指紋”寫到ECU內(nèi)存中是強(qiáng)制的?!爸讣y”標(biāo)識(shí)了是哪個(gè)診斷儀對(duì)ECU內(nèi)存做了修改。使用XXXX數(shù)據(jù)標(biāo)識(shí)符而不是引導(dǎo)軟件指紋、應(yīng)用軟件指紋、應(yīng)用數(shù)據(jù)指紋這些數(shù)據(jù)標(biāo)識(shí)符。每個(gè)邏輯塊(除了驅(qū)動(dòng))下載前,診斷儀將首先寫“指紋”,在下載完邏輯塊后,ECU將識(shí)別之前下載的程序是哪個(gè)邏輯塊(即邏輯塊序號(hào)),并根據(jù)邏輯塊的序號(hào)將它存儲(chǔ)。在追蹤指紋信息時(shí),診斷儀將發(fā)報(bào)文“$22 $XXXX”,ECU將通過(guò)“$62 $XXXX”,返回每一個(gè)邏輯塊的指紋信息。
e)、例程控制——“擦除內(nèi)存” $31 $01 $XXXX:為了允許應(yīng)用軟件和數(shù)據(jù)下載,ECU的內(nèi)存將被擦除。此步驟通過(guò)例程控制服務(wù)($31)來(lái)執(zhí)行擦除內(nèi)存。如果擦除內(nèi)存例程被調(diào)用執(zhí)行,那么應(yīng)用軟件的標(biāo)志位將被置為無(wú)效。
f)、下載過(guò)程 $34 $36 $37:應(yīng)用軟件或者數(shù)據(jù)的每一個(gè)連續(xù)的數(shù)據(jù)塊(也叫段,可能是一個(gè)完整的應(yīng)用軟件或者數(shù)據(jù),也可能是應(yīng)用軟件或者數(shù)據(jù)的一部分)下載到ECU非易失性內(nèi)存中,都是遵循下面的服務(wù)順序完成數(shù)傳輸:請(qǐng)求下載($34)、傳輸數(shù)據(jù)($36)、請(qǐng)求退出傳輸($37)。
注:?jiǎn)蝹€(gè)應(yīng)用軟件或數(shù)據(jù)塊可能需要多個(gè)數(shù)據(jù)傳輸($36)請(qǐng)求報(bào)文來(lái)完成傳輸(當(dāng)數(shù)據(jù)塊長(zhǎng)度超出網(wǎng)絡(luò)層緩存大小時(shí),就會(huì)出現(xiàn)這種情況)。
g)、例程控制——“檢查編程完整性” $31 $01 $XXXX:此例程用來(lái)檢查邏輯塊的完整性。
h)、例程控制——“檢查編程一致性” $31 $01 $XXXX:一旦完成所有的應(yīng)用軟件或數(shù)據(jù)塊/模塊的下載,診斷儀將開(kāi)始一個(gè)例程來(lái)觸發(fā)ECU檢查重編程的一致性。
i) 、電控單元復(fù)位 $11 $01:診斷儀使用物理尋址,發(fā)送一個(gè)復(fù)位類型為硬復(fù)位的ECU復(fù)位($11)服務(wù)請(qǐng)求報(bào)文到CAN網(wǎng)絡(luò)上。
備注:通過(guò)ECU復(fù)位服務(wù)請(qǐng)求將使ECU結(jié)束重編程過(guò)程,返回到正常的操作模式。內(nèi)存驅(qū)動(dòng)代碼必須從RAM緩存中完全清除,避免意外激活這些可能會(huì)進(jìn)行非預(yù)期的內(nèi)存擦除或程序操作的代碼。
3.2.3 后編程步驟
a)、診斷會(huì)話控制 $10 $01:診斷儀發(fā)送一個(gè)會(huì)話類型為默認(rèn)會(huì)話的診斷會(huì)話控制($10)服務(wù)請(qǐng)求報(bào)文到CAN網(wǎng)絡(luò)上。所有的ECU接收到診斷會(huì)話控制($10),而進(jìn)入到默認(rèn)會(huì)話模式。此請(qǐng)求通過(guò)功能尋址發(fā)送,請(qǐng)求發(fā)送給所有包含在編程事件中或因此而進(jìn)入非默認(rèn)會(huì)話模式的ECU。跳轉(zhuǎn)到默認(rèn)會(huì)話模式,表示通信控制($28)服務(wù)和控制DTC設(shè)置($85)服務(wù)也將復(fù)位到默認(rèn)狀態(tài)。
b)、清除診斷信息 $14 FF FF FF:如果重編程ECU在編程步驟被重啟,當(dāng)編程ECU運(yùn)行在默認(rèn)會(huì)話模式時(shí),網(wǎng)絡(luò)上其它的ECU仍然在不能正常通信狀態(tài),此時(shí),一些可能被存儲(chǔ)在編程ECU中的診斷信息就應(yīng)該通過(guò)物理尋址的清除診斷信息($14)服務(wù)來(lái)清除。
版權(quán)聲明:本文為CSDN博主「摸魚的攻城獅」的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
編輯:jq
-
編程
+關(guān)注
關(guān)注
88文章
3576瀏覽量
93545 -
ecu
+關(guān)注
關(guān)注
14文章
877瀏覽量
54368 -
CAN網(wǎng)絡(luò)
+關(guān)注
關(guān)注
1文章
44瀏覽量
16893
原文標(biāo)題:技術(shù)|基于UDS的BootLoader設(shè)計(jì)——架構(gòu)設(shè)計(jì)及規(guī)范
文章出處:【微信號(hào):e700_org,微信公眾號(hào):汽車工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論