之前Boot是(shì)♣₩無法再次更新的(de),也(yě)就(jiù)是(shì)說(shuō)出廠(chǎng₹Ω )後,Boot的(de)軟件(jiàn)版本就(jiù)是(shì)固定的(de),≥≤™ε除非是(shì)拆件(jiàn)。不(bù)過現(xiàn)在越來(lái)越多(duō)α ↔的(de)主機(jī)廠(chǎng)要(yào)求Boot也(yě)要(yào)支持¥♦₹刷寫,即使發生(shēng)潛在錯(cuò)誤時(shí),Boot也(yě)可(kě)以更新修複βα☆≠。另外(wài)現(xiàn)在越來(lái)越多(duō)的(de)EC→÷U實施AB區(qū)的(de)刷寫方案。下(xià)面主要(yào)從(cóng)Boot啓動流程、ECU刷寫流程∑$∞↑、升級測試、Boot自(zì)更新方案三方面來(lái)∏÷δ梳理(lǐ)。
01. Boot的(de)啓動流程
ECU上(shàng)電(diàn)後,首先執行(α→₩xíng)Boot。Boot首先完成一(yī)些(xiē)基本的(∏§≈de)初始化(huà),例如(rú)CAN驅動,IO模塊,初始化(huà)完成後,開(k♣ āi)始檢查刷新請(qǐng)求标志(zhì)位是(shì)否為(α∞™♠wèi)有(yǒu)效,如(rú)果刷新請(q÷↕ǐng)求标志(zhì)位有(yǒu)效,則等待刷寫指令。如(rú)果刷新請(qǐng)求标志(zhì)位無效,則檢查應用(yòng)軟件(jiàn)的(de)狀态,如(r♣>ú)果應用(yòng)軟件(jiàn)是(shì)有(yǒu)效的(de),則應用(♣±♣εyòng)軟件(jiàn)代碼将被執行(xíng),如(rú)果應用(yò±'ng)軟件(jiàn)是(shì)無效的(de),則繼續執行(xíng)Bootloader代碼。當ECU運行(xíng)在應用(yòng)軟件(₹¶jiàn),當收到(dào)進入編程會(huì)話(huàΩ♣)指令,ECU将外(wài)部刷新請(qǐng)求标志(zhì)位設置為(wè↕λ≈i)有(yǒu)效,并執行(xíng)ECU重啓,如≤α©(rú)下(xià)圖所示。重啓後則按照(zhào©₩♦)之前上(shàng)述的(de)流程檢查。
▲圖 Bootloader啓動時(shí)序[來(l™> ái)源網絡,侵删]
02. 刷寫流程
刷新時(shí)序分(fēn)為(wèi$§)三個(gè)編程步驟:
&₩nbsp; - 預刷新步驟:刷新前的(de)CAN網絡準備;
- 主刷新步驟:下(xià)載↔β♥應用(yòng)軟件(jiàn)或應用(yòng)數(shù)據;↕'
- 後刷新步驟:重同步CAN網絡。
1#. 預刷新步驟
預刷新步驟如(rú)下(xià)所示。
1、喚醒ECU,喚醒的(±×©de)方法和(hé)策略由汽車(chē)制(zhì)造商制(zhì)↓π±λ定;
2♦♦β、為(wèi)了(le)關閉DTC存儲和(hé&↔)運行(xíng)0x28服務關閉相(xiàng)關的(de)通(tōng)信,需運行(x"π÷íng)0x10服務跳(tiào)轉至擴展會(huì)話(h$∞uà);
3、進入擴展會(huì)話(huà)後,汽車∞↓∏(chē)制(zhì)造商可(kě)以進一(yī)步進行(xíng)特定數(shù)據鏈路(lù)∞♥→♦的(de)初始化(huà);
4、運行(xí™ng)0x31服務對(duì)刷寫條件(jiàn)進行(x♦×íng)檢查,例如(rú)低(dī)壓電(diàn)是(shì)否在正常範圍←✔∏內(nèi)等。除了(le)條件(jiàn)檢↓↑¶查之外(wài),還(hái)會(huì)有(yǒu)一(yī)些(xiē)安全Ω&機(jī)制(zhì),保證刷寫安全,避免以下(xià)幾種情況:
&&★∞nbsp;a. 來(lái)自(zì)非法源的(de)下(xià)載動作♦™✔≈(zuò); &n$®bsp;
↕"≠→ b. 當前刷新條件(jiσ☆↓←àn)不(bù)滿足;
∏↕♥c.下(xià)載錯(cuò)誤的(de)應用(yòng)軟件(jiàn₹ )或應用(yòng)數(shù)據到(dào)EC♦≈¶U; <§✘;
&nbs↓☆₩βp;d.軟件(jiàn)之間(jiān)不(bù)兼容;措施主要(yào)包括以下(xià)幾種:
₹α; 安全訪問(wèn):ECU通(tōng)過診斷0x27服務,SEED&KEY機(jī)制(zhì±€∑)進行(xíng)安全訪問(wèn)服務限制(zhì),保證ECU免遭未授權的(de)編程動作β≠÷≠(zuò)影(yǐng)響。 &n↕£→bsp;
"β☆刷新預條件(jiàn):ECU确保刷新時(shí)處于安全狀态,條件(jiàn)不(bù)滿足(如שδ•(rú)高(gāo)壓上(shàng)電(diàn)π₹、低(dī)壓異常或車(chē)速不(bù)為(wèi)零)時(shí)™α∏♦,刷新服務請(qǐng)求将被拒絕。
&nb±sp; 完整性校(xiào)驗:ECU對(duì)即将下(xià)載到(dào)flash的(de)程序或數(shù)據進行(xí®₩☆ng)完整性檢查,當一(yī)個(gè)邏輯模塊下β>(xià)載後,使用(yòng)CRC32算(suàn)法驗證當前邏輯δγ÷π塊的(de)所有(yǒu)數(shù)據字節是(shì)否被正确傳輸和(hé)寫入。
$↑ 通(tōng)過“ ☆檢查編程完整性”例程控制(zhì)激活ECU完整性校(xiào)驗。當ECU接收到(dào)↑®€此服務請(qǐng)求時(shí),Bootloader将計(jì)算(suàn)下©÷(xià)載數(shù)據字節的(de)CRC32值,并将計(jì)算ε™(suàn)結果與診斷儀請(qǐng)求報(bào)文(wén)中發送的(≈¶×de)校(xiào)驗值進行(xíng)比較。
♥'一(yī)緻性檢查:不(bù)兼容的(de)軟件(jiàn)不(bù)能(©✘∏✔néng)配合使用(yòng),如(rú)果配合使用(yòng)可(↑∏kě)能(néng)會(huì)使功能(néng)異常或産生(shēng)緻λ€×↓命性錯(cuò)誤。為(wèi)此,ECU通(tōng)過驗證軟件(jiàn)≥♠兼容性來(lái)檢查刷新程序的(de)一(♥←Ωεyī)緻性,包括應用(yòng)軟件(jiàn)與Bootloader軟件(jiàn)、應用(y&↑òng)數(shù)據
©€&∑ ≠♦; £™≤ ; 與應用(yòng)軟件(jiàn)檢驗等。
5、為(wèi)了(le)防止刷寫過程≥♦¶中出現(xiàn)異常誤觸發DTC存儲,運行(xíngγ)0x85服務關閉DTC的(de)存儲;
6、該步驟提供給汽車(chē→♣)制(zhì)造商一(yī)個(gè)接口,可(kě)以通(tōn♦ ®g)過0x31服務啓動或關閉ECU的(de)故障安全響應(failsafe ₩∞ reaction);
7、為(wèi)了(le)提高(★λ≠↓gāo)刷寫速度,降低(dī)刷寫程序時(shí)總線負載率,通(≠☆≈γtōng)過運行(xíng)0x28服務關閉無關報(bào)文(wén),比如(rú)'✘•應用(yòng)報(bào)文(wén)和(hé)網絡管理(lǐ)報(bào)文 ✔<←(wén);
8、在關閉部分(fē₩∑©$n)通(tōng)信之後,通(tōng)過0∑x22服務讀(dú)取被刷ECU的(de)狀态(應用(yòng)軟件(≈ jiàn)和(hé)數(shù)據)、軟件(jiàn)指紋信息等; §
↕ <9、為(wèi)了(le)減少(shǎo)刷寫的(de)時(shí)間(jiān), Ω可(kě)以通(tōng)過0x87服務提高(gāo)CAN總線的(βα$de)波特率。
2#. 主刷新步驟
在預刷新步驟之後,是(shì)主刷新步驟。₩主刷新時(shí)序是(shì)單個(gè)ECU刷新事(shì)件(jià÷≠₹n)的(de)應用(yòng),因此所有(yǒu)服務的(de)請(qǐε☆ αng)求都(dōu)使用(yòng)物(w♦↑↕¶ù)理(lǐ)尋址。
其中:
1、πφ運行(xíng)0x10服務進入programmingSession;
2、運行(xíng)0x27服務進入特定的(d©§↕&e)安全等級;
3、運行(xíng)0x2E服務将指紋信息∞ β寫入ECU;
4、運行(xíng)0x£34、0x36、0x37服務将永久存儲區(qū)寫入默認值;
5、運行(xíng)0x31服務檢查步驟4是♦α↔(shì)否成功,另外(wài)一(yī)種方法是(shì)通(tōng)過0x3§↕±×7的(de)響應确定是(shì)否成功;
6、運行↓∞γ(xíng)0x31服務對(duì)特定的(de)Flash進行(xíng)擦除;
7、分(fēn)别運行(xíng)0x∑α™♥34、0x36、0x37服務将Flash driver下(xià)載至內(÷×nèi)存中;
8、運行(xíng)0x31服務檢查Flash dr∑σ→<iver下(xià)載是(shì)否成功;
9、分(fēn)别運行(xíng)0x34、0x ₹36、0x37服務将軟件(jiàn)和(hé)數($≠shù)據下(xià)載至ECU的(de)flash中;
10、運行(xíng'¥β)0x31服務檢查步驟9是(shì)否下(xià)載成≠>"功;
11 ≈±、運行(xíng)0x31服務驗證程序是(shì)否能(néng)正常運行(xíng)✔↕∞,例如(rú)checksum、标志(zhì)位等;
12、在下→←∏(xià)載完軟件(jiàn)和(hé)數↑↕↕(shù)據後,汽車(chē)制(zhì)造産商需要(yào)一(yī)些(xiē₹£•∞)特定的(de)操作(zuò),比如(rú)寫入VIN碼等。
3#. 後刷新步驟
該步驟主要(yào)通(tōng)過0x11服務對(duì)ECU進行(xíng)複位或者通(tφ&ōng)過0x10服務切換至默認會(huì)話(huà),如(rú)圖3所示α©,如(rú)果在預編程中中調整了(le)波特率,須通(tōng)過特定的± φ☆(de)操作(zuò)将波特率調整至正常值。通(tōng)常操作(zuò)是(shì)運行©↑₩(xíng)0x11服務使ECU複位,回到(dào)正常狀态。
03. 刷寫測試用(yòng)例
刷寫功能(néng)開(kāi)發完之後,通(tō®'←ng)常都(dōu)是(shì)要(yào)¥♦↔'按照(zhào)測試用(yòng)例進行(xíng)測試的(de),那(nà)一(yī)般都♣¶✘(dōu)要(yào)做(zuò)哪些(xiē)測試呢(ne),才能(néng)證明(míng)π÷✔刷寫功能(néng)是(shì)OK的(de)呢(ne)?主要(yào)分(fēn)為(wèi)4α'★部分(fēn)測試。首先是(shì)模拟診斷儀正常刷寫,測試用(yòng)例主要(yà≠≈o)包括下(xià)圖所示,圖中測試用(yòng)例還(hái)考慮了(π∏&♠le)标定數(shù)據的(de)刷寫。
▲圖 正常刷寫用(yòng)例
然後是(shì)錯(cuò)誤注入測試,其前提是 ελ≠(shì)錯(cuò)誤刷寫不(bù)損壞系統Boot,當重新上(shàng)電<'(diàn)後,DUT可(kě)以正常更新應用(yòng)程序。用(yòng)例如(rú'♣♦£)下(xià)所示。
▲圖 故障注入測試用(yòng)例
再之後是☆±₩(shì)刷寫完整性測試,測試用(yòng)例如(rú)下(xià)所示。" £
▲圖 完整性測試用(yòng)例
最後就(jiù)是(shì)刷寫流程以及預條件(ji'φ→<àn)測試,主要(yào)測試3E服務,前置條件(jiàn),刷寫失敗等,測試用(☆← yòng)例如(rú)下(xià)圖所示。
04. Boot自(zì)更新
Boot自(zì)更新☆♠₽的(de)需求現(xiàn)在也(yě)是(shì)越來(lái)越多(duō),主要(y₽±ào)為(wèi)了(le)修複Boot軟件(jiàn)中存在的(dβ™☆εe)Bug。以下(xià)有(yǒu)幾種Boot自(♥↑σzì)更新的(de)方案。
1#. Supplier Boot(SB) + Customer&≈♠nbsp;Boot(CB)
通(tōng)常情況下(xià),供應商都(dōu)有××☆(yǒu)自(zì)己的(de)平台軟件(jiàn),包括≥★↔Boot和(hé)Appl。而各主機(jī)廠(chǎng)都(dōu)有(∏≈•δyǒu)自(zì)己不(bù)同的(de)軟件(jiàn)升級¥≥✔ 規範,為(wèi)了(le)适配主機(jī)廠(chǎπ•¶≈ng)的(de)需求,通(tōng)常的(de)做(zuò)法是(shì)×≠☆加一(yī)層Customer Boot來(lái)實♥<♠現(xiàn)客戶的(de)需求。那(nà)軟件(jiàn)的(d± €↕e)運行(xíng)順序就(jiù)是(shì)SB-> ♥δ ;CB->Appl,如(rú)圖1所示。這(zhè)種做(zuò)法可(kě)以簡單、∏₽"γ快(kuài)速的(de)滿足CB也(yě)可(kě™®™)以更新。
▲圖 SB+CB的(de)升級方式[來(lái)™♠源網絡,侵删]
γ± 不(bù)過這(zhè)種方式,通(tōng)常情況©↑✔下(xià)通(tōng)過SB更新CB是(shì)通(tōng)過供應商>☆ 自(zì)己定義的(de)升級流程,并且通(tōng)過自(zì)己的(de)上(sλ↑✘hàng)位機(jī)來(lái)實現(xiàn)升級。也(yě)就(δεjiù)意味著(zhe)這(zhè)種方式隻适應項目開(kā€α×i)發階段,因為(wèi)供應商的(de)升 σ★級流程無法接入到(dào)整車(chē)的(de)OTA流程。這(zhè)種方式的(de)優點就(jiù)是(shì)簡單,能(nén±∞'g)很(hěn)快(kuài)地(dì)适配客戶的(de)✔↑ 需求,而且即使面向不(bù)同的(de)客戶♠ ,隻需要(yào)簡單的(de)更改CB就(jiù)可(kě)以滿足需求,← ±适應性比較好(hǎo)。但(dàn)是(shì)₽£缺點就(jiù)是(shì)會(huì)浪費(fèi)Flash空(kōngσ↓¥λ)間(jiān)。
2#. 将Boot先放(fàng)到(dào)RA< M中運行(xíng),然後更新Boot的(de)Fl¥'σ ash區(qū)域
這(zhè)種方式隻需要(yào)一(yī)份Bo™βot,其具體(tǐ)方案是(shì),在Boot β←Ω的(de)鏈接文(wén)件(jiàn)中,将程序和(hé)數(shù)據映射到(dào)特性的(γα™de)RAM空(kōng)間(jiān),然後↑ ↔'在控制(zhì)器(qì)上(shàng)電>✔¶(diàn)時(shí),首先将Boot的(de)代碼和(hé)數(shù)據搬運↕™到(dào)RAM中,程序運行(xíng)在RAM中,當收到(dào) ₩₹更新Boot的(de)需求時(shí)(這(zhè)裡(✘εlǐ)需要(yào)上(shàng)位機(↑ jī)在發送更新指令的(de)時(shí)候,區(≥'λqū)别是(shì)更新Boot還(hái)是(shì)App,比如(∑≥↕rú)通(tōng)過在0x31服務寫入不(bù)同的(de)标志(zhì)位進行(xí'Ω♦ng)區(qū)分(fēn)),通(tōn<≠g)過RAM中的(de)程序以及上(shàng)位機(jī)¶€€下(xià)載的(de)Flash Driver,将Boot的(de)Flash區(qū)☆Ω 域進行(xíng)更新。
▲圖 方案二
這(zhè)種方式的(de)優點就(jiù)是(✔•shì)節省Flash空(kōng)間(jiān),而且如(rú)果客戶想把Boot自(zì)更←'Ωα新的(de)功能(néng)保留到(dào)量産之後,也(yě)是(shì)可(k↑¶>ě)以的(de),因此控制(zhì)器(qì)的(de)升級是(shì)完全遵循主機( ←β☆jī)廠(chǎng)的(de)要(yào)求的(de)。不(bù)過這(zhè)種方式有(yǒu)個(gè)缺點,就(jiù)是(sh ☆←ì)在更新過程中,不(bù)能(néng)斷電(diàn),一(yī)旦斷☆電(diàn),控制(zhì)器(qì)就(jiù)會(huì)λ®變成闆磚,需要(yào)換件(jiàn)。另外(wài)程序運行(xíng)在RAM中,對(™✔duì)踩內(nèi)存這(zhè)種行(xíng)為÷→ε (wèi)更加敏感。不(bù)過在整車(chē)上(shàng),出現(xiàn)意外(wài)斷電(diàn) &的(de)情況應該很(hěn)少(shǎo)。首先升級之前會(huì)檢查低(dī)壓蓄$ 電(diàn)池的(de)電(diàn)壓水(shuǐ)平,甚至對(duì)新能(néng)源車(chē)來(lái)說(β♥♦≈shuō),可(kě)以啓動DCDC,來(lái)保證12V的(de÷↑ )穩定供應。
3#. 兩個(gè)CB+minBoot
這(zhè)種方案下(xià),有(y♥÷ǒu)兩個(gè)CB和(hé)一(yī)個(gè)miniBoot,miniBoot的(★ $de)作(zuò)用(yòng)很(hěn)簡單,就(jiù)是 β≈¶(shì)根據引導區(qū)的(de)标志(zhì)位來δ'<(lái)決定切換到(dào)哪個(gè)Boot。
▲圖 2個(gè)CB+miniBoot方案
這(zhè)種方案的(de)優勢就(jiù)是(ε☆✘←shì)可(kě)以保證刷新過程中斷電(dδ↓>iàn)不(bù)會(huì)導緻控制(zhì)器(qì)變成闆磚δ¥,而且也(yě)可(kě)以在SOP之後繼續使用(yòng)。缺點也(yě)很(hěn)明♠×β (míng)顯,空(kōng)間(jiān)占用(yòng)率比較大(dà),Ω↓♠¥軟件(jiàn)複雜(zá),需要(yào)三 <'™個(gè)Boot。
轉自(zì)汽車(chē)ECU開(kāi)發