chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

剖析汽車ECU的bootloader程序

汽車工程師 ? 來源:汽車電子與軟件 ? 作者:freshcoolman ? 2021-09-24 10:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

BootLoad(簡稱Boot)是一種啟動加載程序,或者稱為引導程序,我們在操作系統(tǒng)嵌入式開發(fā)中經(jīng)常用到,因為汽車ECU也是一種嵌入式系統(tǒng),Boot程序主要用于ECU軟件更新,汽車OTA升級,本文主要講述汽車bootloader程序的工作原理和設計方法。

01

bootloader的功能

BootLoader,通常是駐留在ECU非易失性存儲器(NVM,None Valitale Momory)中的一段程序加載代碼,每次ECU復位后,都會運行bootloader。它會檢查是否有來自通信總線的遠程程序加載請求。

如果有,則進入bootloader模式,建立與程序下載端(通常為PC上位機)的總線通信并接收通信總線下載的應用程序、解析其地址和數(shù)據(jù)代碼,運行NVM驅動程序,將其編程到NVM中,并校驗其完整性,從而完成應用程序更新。

如果沒有來自通信總線的遠程程序加載請求,則直接跳轉到應用程序復位入口函數(shù)(復位中斷ISR,也稱作Entry_Point()–使用Processor Expert的CodeWarrior 工程或者Startup()函數(shù)–普通CodeWarrior 工程),運行應用程序。

0880881a-10bd-11ec-8fb8-12bb97331649.png

因此,汽車ECU的bootloader三個主要的作用:

與遠程程序下載端建立可靠的總線通信以獲取要更新應用程序;

解析應用程序編程文件(S19/HEX/BIN)獲得其在NVM中的地址和程序代碼及數(shù)據(jù);

運行NVM驅動將應用程序的代碼和數(shù)據(jù)編程到NVM中并校驗;

下面就圍繞這三個方面展開講述。

02

如何建立可靠的總線通信?

汽車ECU常見的數(shù)據(jù)總線有CAN和LIN,因此通常汽車ECU的bootloader都是通過CAN或者LIN下載數(shù)據(jù)的。當然也可以基于其他總線,比如基于SPI總線或者I2C總線(典型如一些帶有安全監(jiān)測的功能安全ECU,通過主MCU對功能安全監(jiān)測MCU的程序進行升級)以及以太網(wǎng)(基于Enternet通信的中控或者全液晶儀表的ECU以及下一代高速網(wǎng)關和ADAS ECU)。

注意事項:

不同的ECU通信總線不一樣,具體需要用到某種通信總線取決于實際應用;

通信總線由ECU的MCU外設實現(xiàn),所以在bootloader中必須開發(fā)相應的通信總線外設驅動程序,實現(xiàn)基本的數(shù)據(jù)發(fā)送和接收功能;

為了保證通信的可靠性,必須開發(fā)一個基于通信總線完善的通信協(xié)議,應用程序下載端和bootloader之間需要建立請求命令(request command)、確認(acknowledge)、等待(block wait)、錯誤重傳(errorre-send)等機制----bootloader根據(jù)不同的請求命令完成不同的任務并確認操作是否完成(ACK)以及數(shù)據(jù)是否正被確完整的傳輸,若出現(xiàn)數(shù)據(jù)錯誤(通過校驗和或者ECC實現(xiàn)),需要進行自動重傳;

應用程序下載端通過需要在PC上基于VC或者C#、QT、Labview等開發(fā)GUI軟件,實現(xiàn)中要求的總線通信協(xié)議,一般在其底層都是通過調用相應的總線設備,如USB轉CAN/LIN的轉發(fā)器設備的動態(tài)庫(DLL)的API接口來實現(xiàn)數(shù)據(jù)的收發(fā),相應的總線USB轉發(fā)設備都會提供相應的驅動庫(DLL)。因此bootloader開發(fā)者一般還需具備一定的PC上位機軟件開發(fā)能力;

為了實現(xiàn)數(shù)據(jù)的可靠傳輸,一般在總線通信協(xié)議中添加信源編碼,即在發(fā)送是對有效數(shù)據(jù)進行校驗和或者ECC計算并將結果在通信數(shù)據(jù)幀中和有效數(shù)據(jù)一起發(fā)送,bootloader接收端,接收到數(shù)據(jù)幀后對有效數(shù)據(jù)域進行發(fā)送端同樣的校驗和或者ECC計算,得出結果與接收到的校驗和或者ECC計算結果值進行比較從而判斷數(shù)據(jù)的完整性。應用程序編程文件(S19/HEX/BIN)都具有相應的校驗機制,所以可以采取直接傳送程序編程文件行的方式;

否則,用戶需要在上位機軟件中首先解析編程文件,再將其中的地址和數(shù)據(jù)及代碼封裝打包成某種定制的通信協(xié)議,在bootloader中還得對其進行解包,這樣一來,略顯麻煩,但有些主機廠為了知識產(chǎn)權保護,有自己的bootloader協(xié)議,這種情況下,bootloader開發(fā)者就必須按照主機廠的要求來開發(fā);

一些正規(guī)的大主機廠要求其ECU供應商開發(fā)放入ECU bootloader必須基于UDS等總線診斷協(xié)議,在UDS中規(guī)定了相應的CAN ID給bootloader使用,那么就必須在該類ECU中的bootloader工程中加入相應的UDS協(xié)議棧;

3和5的注意事項都是為了滿足Boot程序設計的安全要求,要特別重視。

03

解析編程文件(S19/HEX/BIN)

不同的MCU軟件開發(fā)IDE編譯鏈接生成的編程文件格式可能不同,但S19、HEX和BIN文件之間是可以相互轉化的,所以只需要在bootloader中開一種編程文件的解析程序就可以了,其他的可以使用相應的轉換工具(convert tool)在上位機上進行轉換;MCU的軟件開發(fā)IDE一般都集成不同編程文件之間的轉換工具:比如S32DS的objcopy(Create Flash Image )以及Keil的Motorola S-Record to BINARY File Converter 。

解析編程文件的目的在于獲得應用程序的程序代碼和數(shù)據(jù)及其在NVM中的存儲地址;

為了解析編程文件必須先了解其中的編碼格式和原理,常用的S19、HEX和BIN文件的格式說明請自行查閱。

S19和HEX文件都是可以直接使用文本編輯器(比如記事本,notepad++)打開的,只需要將包含地址和數(shù)據(jù)代碼的S1、S2和S3開始的S19文件行合并即可,可以手動拷貝,也可以編寫window批處理腳本來處理;當然也有專門的可以支持兩個S19文件的合并,網(wǎng)上可以找到很多開源軟件,比如常見的Srecord等;

04

NVM驅動程序開發(fā)

ECU的NVM一般包括:

MCU片內集成的用于存放數(shù)據(jù)的EEPROM或者Data-Flash;

用于存儲程序代碼/數(shù)據(jù)的Code-Flash/Program-Flash;

MPU擴展的片外NORFlash或者NAND-Flash;

NVM驅動程序 的作用包括

對NVM的擦除(erase)、編程(program)和校驗(verify)等基本操作;

對NVM的加密(secure)/解密(unsecure)和加保護(protecTIon)/解保護(unprotecTIon)操作。

注意事項:

MCU片上集成的NVM中EEPROM/D-Flash和C_Flash/P-Flash一般屬于不同的block,所以可以直接在Flash上運行NVM驅動對EEPROM/D-Flash進行擦除和編程操作;

NVM驅動一般都是通過運行一個NVM command序列,在其中通過NVM控制器寄存器給出不同的NVM操作命令代碼、NVM編程數(shù)據(jù)和目標地址的方式完成,典型的NVM command序列有(Freescale的S12(X)系列MCU Flash write command 序列);

由于NVM的工作速度一般較CPU內核頻率和總線頻率低,所以運行NVM驅動前必須對NVM進行初始化,將設置分頻器其工作頻率設置為正常工作所需頻率范圍;

MCU片內的NVM同一個block上不能運行NVM的驅動對其自身進行擦除和編程操作,否則會傳出read while write的總線訪問沖突(每個NVM block只有一條數(shù)據(jù)總線,一個時刻只能進行讀出或者寫入,不支持同時讀出和寫入)。

因此對于僅有一個block Flash的MCU來說,就必須在RAM中調用其NVM驅動,來對其自身進行擦除和編程操作,同時在launch Flash command到等待command完成期間必須關閉CPU全局中斷,禁止外設中斷響應,否則取中斷向量和運行中斷ISR都會訪問Flash。要使能中斷,就必須將中斷向量表偏移到RAM或者NVM block(EEPROM/D-Flash)并將響應的中斷ISR也拷貝到其他RAM或者NVM block上(當然該中斷向量表也必須更新指導新的中斷ISR);

由于以上2的要求,通常需要將bootloader的NVM驅動拷貝到MCU的RAM中運行,其可以將其完成的NVM拷貝到RAM中運行,也可以只拷貝NVM command launch到等待command完成的幾條指令到RAM執(zhí)行即可,因為NVM驅動中其他操作(比如填寫NVM操作命令、寫入編程地址和數(shù)據(jù)等)并不會往占用數(shù)據(jù)總線上往NVM中寫入數(shù)據(jù);

NVM的驅動程序駐留在Flash中,如果出現(xiàn)堆棧溢出等意外程序跑飛意外運行NVM驅動程序則會造成NVM內容意外擦除丟失或者修改的情況。因此需要對關鍵數(shù)據(jù)或代碼(比如bootloader本身)進行保護以防止意外修改,或者更為安全的方法是**不將NVM驅動程序存放在NVM中,而是在bootloader最開始通過上位機將其下載到RAM中運行,bootloader結束后將該區(qū)域RAM清除,**從而避免由于意外運行NVM驅動程序造成的NVM數(shù)據(jù)丟失和修改。

一般MCU廠商都會給出其MCU的NVM驅動庫,用戶可以使用該類庫實現(xiàn)NVM操作,如果是Freescale/NXP的汽車級MCU,還可以使用CodeWarrior IDE集成的Processor Expert生成相應的NVM驅動程序;

02

bootloader開發(fā)的其他要點

1. bootloader與應用程序的關系:

bootloader和應用程序分別是兩個完整的MCU軟件工程,各自都由自己的啟動代碼、main()函數(shù)、鏈接文件、外設驅動程序和中斷向量表;

因此bootloader和應用程序的鏈接文件中,對NVM的地址空間分配必須分開獨立,不能重疊(overlap),但其RAM分配沒有約束,兩者都可以使用整個RAM空間,因為跳轉到應用工程后,將啟動代碼將重新初始化RAM;

bootloader必須使用MCU默認的中斷向量表,因為每次復位后MCU都是從其默認中斷向量表的復位向量取地址執(zhí)行的;應用程序的中斷向量必須進行偏移(通過相應的中斷向量偏移寄存器,如S12(X)系列MCU的IVBR寄存器或者ARM Cortex M系列MCU的SCB-》VTOR寄存器);

而NVM(P-Flash)的擦除都是按照sector進行的,所以為了充分利用NVM(P-Flash)空間,都將bootloader分區(qū)到包含默認中斷向量表的若干NVM(P-Flash)sector(S12(X)系列MCU的NVM最后若干sector, ARM Cortex M系列MCU從0地址開始的若干sector);

注意:

如果應用程序新過程中斷電或者意外復位,則應用程序更新失敗,相應的應用程序完整性校驗通不過,當然得重新下載,為了避免這種情況下應用程序丟失,常常BootLoader需要對應用程序進行雙備份,即使用兩個不同的NVM分區(qū)來保存應用程序,只有新的應用程序更新成功之后,才擦除老的應用程序,否則下次復位之后還是運行老的應用程序

2. bootloader到應用程序的跳轉方法:

開發(fā)使用bootloader后,每次ECU復位之后都將首先運行bootloader,若無遠程應用程序下載請求則直接跳轉到應用程序復位函數(shù)地址,這里面有兩個問題需要考慮:

如何獲得應用程序復位函數(shù)地址:方法有:1)通過鏈接文件固定應用程序的復位啟動函數(shù)地址;2)從應用程序中斷向量表的復位向量地址獲取;推薦方法2):因為其靈活性好,每次應用程序變化后無需關心應用程序復位函數(shù)被編譯到了NVM的具體地址,只需要將應用程序中斷向量表中的復位向量取出運行即可:

典型方法如下(假設S12(X)系列MCU的應用程序中斷向量表基地址寄存器IVBR=0x7F):

typedef void (near tIsrFunc)(void);/ ISR prototype definition */

word *Ptr; /pointer used for ISR vector fecth/

Ptr = (word *)0x7FFE; /*get the ISR vector from the interrupt vector table of APP project */

((tIsrFunc)(*Ptr))(); /covert and run/

跳轉時機:方法有:

1)bootloader更新完應用程序并校驗其完整性OK之后,將用到的外設(比如CAN/LIN通信總線模塊、定時器、GPIO等)寄存器恢復到復位后的默認狀態(tài),然后直接跳轉;bootloader更新完應用程序并校驗其完整性OK之后,等待看門狗定時器超時溢出復位,在bootloader最開始判斷無遠程應用程序下載請求而跳轉;

推薦使用方法2):因為方法1)相對于軟件復位,其跳轉至應用程序復位啟動函數(shù)時MCU的硬件環(huán)境與直接運行應用程序可能存在差異,而方法2)的看門狗復位則屬于硬件復位,其會將絕大部分外設(模擬、時鐘和外設)電路復位,更接近直接運行應用程序的情況。

編輯:jq

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

    關注

    147

    文章

    18787

    瀏覽量

    393005
  • 編程
    +關注

    關注

    90

    文章

    3711

    瀏覽量

    96983
  • ecu
    ecu
    +關注

    關注

    14

    文章

    974

    瀏覽量

    57033
  • NVM
    NVM
    +關注

    關注

    1

    文章

    46

    瀏覽量

    19756

原文標題:技術|詳解汽車ECU的bootloader程序

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    新思科技Silver解鎖FreeRTOS虛擬ECU潛能

    虛擬 ECU(vECU)極大地改變了汽車行業(yè)的軟件開發(fā)與測試方式,通過在虛擬環(huán)境中仿真物理 ECU 的功能,vECU 加速了軟件開發(fā)和測試進程,大幅減少了對物理硬件的依賴。這使得軟件團隊即便在尚無
    的頭像 發(fā)表于 01-22 12:46 ?274次閱讀
    新思科技Silver解鎖FreeRTOS虛擬<b class='flag-5'>ECU</b>潛能

    LAT1171+STM32F745 USART1 Bootloader 失敗原因分析與解決

    使用 STM32F745 進行產(chǎn)品開發(fā)的時候,出現(xiàn)了使用 STM32CubeProgramer 無法通過 USART1 Bootloader 進行程序升級的問題。為了解決客戶的問題,我在 NUCLEO-F746ZG 開發(fā)板上,復現(xiàn)了同樣的現(xiàn)象,本文針對這個現(xiàn)象,分析了該問
    發(fā)表于 01-11 17:33 ?0次下載

    新能源汽車車載ECU出廠故障檢測

    案例背景No.1新能源汽車車載ECU出廠故障檢測,是保障整車安全與性能的核心前置環(huán)節(jié)。其通過模擬整車運行工況,對ECU硬件電路、軟件邏輯及與電池、電機、電控等關鍵系統(tǒng)的通信適配性進行全面校驗,精準
    的頭像 發(fā)表于 01-08 14:18 ?1363次閱讀
    新能源<b class='flag-5'>汽車</b>車載<b class='flag-5'>ECU</b>出廠故障檢測

    新思科技Silver虛擬ECU平臺重塑汽車軟件創(chuàng)新范式

    汽車行業(yè)的軟件定義汽車(SDV)架構中,涵蓋電子控制單元(ECU)、區(qū)域控制單元(ZCU)和中央計算單元(CCU),軟件復雜度與日俱增,導致開發(fā)周期冗長拖沓,延緩了嵌入式設備的部署。為應對這些挑戰(zhàn)
    的頭像 發(fā)表于 12-17 10:21 ?1477次閱讀
    新思科技Silver虛擬<b class='flag-5'>ECU</b>平臺重塑<b class='flag-5'>汽車</b>軟件創(chuàng)新范式

    Bootloader固件升級的步驟

    一、Bootloader 概念及用處 1、BootLoader 是一段引導式程序,就是單片機啟動時候運行的一段小程序,這段程序負責單片機固件
    發(fā)表于 11-19 07:41

    ECU刷寫完全指南:從理論到實踐

    ECU刷寫是現(xiàn)代汽車電子開發(fā)中的核心環(huán)節(jié),基于UDS診斷協(xié)議實現(xiàn)控制器軟件的更新與維護。本文將以USBCANFD-400U接口卡為例,詳細介紹CANFD總線環(huán)境下ECU刷寫的標準流程與實操要點
    的頭像 發(fā)表于 11-12 11:37 ?894次閱讀
    <b class='flag-5'>ECU</b>刷寫完全指南:從理論到實踐

    汽車變速箱 ECU 穩(wěn)壓 40V 680μF 車規(guī)貼片鋁電容 抗振動(2000Hz)

    汽車電子系統(tǒng)中,變速箱控制單元(ECU)作為核心部件之一,其穩(wěn)定性和可靠性直接關系到整車的駕駛性能和安全性。而作為ECU電源濾波和穩(wěn)壓的關鍵元件,車規(guī)級貼片鋁電解電容的選擇尤為重要。本文將深入解析
    的頭像 發(fā)表于 10-24 11:17 ?262次閱讀
    <b class='flag-5'>汽車</b>變速箱 <b class='flag-5'>ECU</b> 穩(wěn)壓 40V 680μF 車規(guī)貼片鋁電容 抗振動(2000Hz)

    BootLoader app程序反復重啟,IAP升級失敗怎么處理?

    keil開發(fā)的BootLoader程序,用RT-Thread Studio開發(fā)的app程序,板子每次上電后,從BootLoader程序跳轉到
    發(fā)表于 09-10 07:36

    使用Bypass工具加速ECU軟件開發(fā)與標定

    旁路(Bypass)是快速原型(RP)技術的一個實時應用方案。正如上面形象又詼諧的動畫所表現(xiàn)的,該方法的實現(xiàn)方式為:將ECU的部分功能,放在連接至ECU的外部原型控制器中執(zhí)行,或直接利用ECU自身可用內存空間進行運算。而
    的頭像 發(fā)表于 09-05 14:58 ?809次閱讀
    使用Bypass工具加速<b class='flag-5'>ECU</b>軟件開發(fā)與標定

    MT6501可編程磁性角度傳感器:提升汽車ECU位置反饋精度的利器

    在當今汽車行業(yè)飛速發(fā)展的時代,汽車的智能化和自動化程度越來越高。汽車電子控制單元(ECU)作為汽車的“大腦”,對
    的頭像 發(fā)表于 07-30 17:40 ?705次閱讀

    用是德示波器3000T X系列的手勢操作簡化汽車ECU復雜信號調試

    隨著汽車電子技術的飛速發(fā)展,現(xiàn)代汽車中電子控制單元(ECU)的數(shù)量和復雜性不斷增加。這些ECU負責管理車輛的各種功能,從發(fā)動機控制到安全系統(tǒng),再到信息娛樂系統(tǒng)。因此,調試這些
    的頭像 發(fā)表于 07-01 18:04 ?556次閱讀
    用是德示波器3000T X系列的手勢操作簡化<b class='flag-5'>汽車</b><b class='flag-5'>ECU</b>復雜信號調試

    方案分享 | ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測試方案

    汽車電子開發(fā)新進展:ARXML 規(guī)則與 ADTF 框架結合,實現(xiàn) ECU 總線通訊高效測試
    的頭像 發(fā)表于 06-25 09:53 ?2952次閱讀
    方案分享 | ARXML 規(guī)則下 <b class='flag-5'>ECU</b> 總線通訊與 ADTF 測試方案

    泰克示波器TBS2072B如何解決ECU故障診斷難題

    在現(xiàn)代汽車電子控制單元(ECU)的故障診斷中,精確的測試工具是工程師與技術人員不可或缺的助手。隨著汽車電子系統(tǒng)的復雜性日益提升,ECU作為車輛的核心控制單元,其故障診斷難度也隨之增加。
    的頭像 發(fā)表于 06-19 15:30 ?626次閱讀
    泰克示波器TBS2072B如何解決<b class='flag-5'>ECU</b>故障診斷難題

    U-Boot 和 Bootloader,99% 的工程師都分不清?

    嵌入式軟件工程師聽說過 u-boot 和 bootloader,但很多工程師依然不知道他們到底是啥。 ? 今天就來簡單講講?u-boot 和 bootloader?的內容以及區(qū)別
    的頭像 發(fā)表于 03-25 20:47 ?1647次閱讀

    自定義RISC V的bootloader-v3

    在生成SoC時,會生成一個預定義bootloader .bin文件,用于指定soc的工程運行的地址,這包括在flash的存儲地址 ,加載到外存中的運行地址及在外存中分配的存儲空間的大小 。下面我們
    的頭像 發(fā)表于 03-10 09:05 ?1634次閱讀
    自定義RISC V的<b class='flag-5'>bootloader</b>-v3