當(dāng)前位置:首頁 > 汽車電子 > 汽車電子技術(shù)文庫
[導(dǎo)讀]   隨著半導(dǎo)體技術(shù)的不斷進(jìn)步(按照摩爾定律),MCU內(nèi)部集成的邏輯功能外設(shè)越來越多,存儲器也越來越大。消費(fèi)者對于汽車節(jié)能(經(jīng)濟(jì)和法規(guī)對排放的要求)型、舒適性、互聯(lián)性、安全性(功能安全和信息安全)

  隨著半導(dǎo)體技術(shù)的不斷進(jìn)步(按照摩爾定律),MCU內(nèi)部集成的邏輯功能外設(shè)越來越多,存儲器也越來越大。消費(fèi)者對于汽車節(jié)能(經(jīng)濟(jì)和法規(guī)對排放的要求)型、舒適性、互聯(lián)性、安全性(功能安全和信息安全)的要求越來越高,特別是近年來新能源電動車、車聯(lián)網(wǎng)和自動駕駛技術(shù)的興起,更大大加速了汽車電子技術(shù)的發(fā)展。汽車電子ECU(Electronic Control Unit--電控單元)集成的功能日益復(fù)雜,為了應(yīng)對軟件遠(yuǎn)程(在線)功能升級(增加新的功能)和bug修復(fù)的需求、對bootLoader(啟動加載程序)的需求越來越多。本文詳細(xì)介紹了汽車電子ECU bootloader的一般性工作原理和開發(fā)要點(diǎn),其適用于所有的汽車電子ECU bootloader開發(fā)。

  

  一、bootloader的功能

  BootLoader,顧名思義,就是駐留在ECU非易失性存儲器中的一段程序加載代碼,每次ECU復(fù)位后,都會運(yùn)行bootloader。它會檢查是否有來自通信總線的遠(yuǎn)程程序加載請求,如果有,則進(jìn)入bootloader模式,建立與程序下載端(通常為PC上位機(jī))的總線通信并接收通信總線下載的應(yīng)用程序、解析其地址和數(shù)據(jù)代碼,運(yùn)行NVM(None Valitale Momory--非易失性存儲器)驅(qū)動程序,將其編程到NVM中,并校驗(yàn)其完整性,從而完成應(yīng)用程序更新。如果沒有來自通信總線的遠(yuǎn)程程序加載請求,則直接跳轉(zhuǎn)到應(yīng)用程序復(fù)位入口函數(shù)(復(fù)位中斷ISR,也稱作Entry_Point()--使用Processor Expert的CodeWarrior 工程或者Startup()函數(shù)--普通CodeWarrior 工程),運(yùn)行應(yīng)用程序。

  基于此,汽車ECU的bootloader三大主要概念如下:

  與遠(yuǎn)程程序下載端建立可靠的總線通信以獲取要更新應(yīng)用程序;

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

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

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

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

  TIps:

  a、不同的ECU通信總線不一樣,具體需要用到某種通信總線取決于實(shí)際應(yīng)用;

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

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

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

  e、為了實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸,一般在總線通信協(xié)議中添加信源編碼,即在發(fā)送是對有效數(shù)據(jù)進(jìn)行校驗(yàn)和或者ECC計(jì)算并將結(jié)果在通信數(shù)據(jù)幀中和有效數(shù)據(jù)一起發(fā)送,bootloader接收端,接收到數(shù)據(jù)幀后對有效數(shù)據(jù)域進(jìn)行發(fā)送端同樣的校驗(yàn)和或者ECC計(jì)算,得出結(jié)果與接收到的校驗(yàn)和或者ECC計(jì)算結(jié)果值進(jìn)行比較從而判斷數(shù)據(jù)的完整性。應(yīng)用程序編程文件(S19/HEX/BIN)都具有相應(yīng)的校驗(yàn)和機(jī)制,所以可以采取直接傳送程序編程文件行的方式;否則,用戶需要在上位機(jī)軟件中首先解析編程文件,再將其中的地址和數(shù)據(jù)及代碼封裝打包成某種定制的通信協(xié)議,在bootloader中還得對其進(jìn)行解包,這樣一來,略顯麻煩,但有些主機(jī)廠(Car OEM)為了知識產(chǎn)權(quán)保護(hù),有自己的bootloader協(xié)議,這種情況下,bootloader開發(fā)者就必須按照主機(jī)廠的要求來開發(fā);

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

  

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

  不同的MCU軟件開發(fā)IDE編譯鏈接生成的編程文件格式可能不同,但S19、HEX和BIN文件之間是可以相互轉(zhuǎn)化的,所以只需要在bootloader中開一種編程文件的解析程序就可以了,其他的可以使用相應(yīng)的轉(zhuǎn)換工具(convert tool)在上位機(jī)上進(jìn)行轉(zhuǎn)換;

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

  為了解析編程文件必須先了解其中的編碼格式和原理,常用的S19、HEX和BIN文件的格式說明請參考如下維基百科鏈接:

  S19文件:https://en.wikipedia.org/wiki/SREC_(file_format)

  HEX文件:https://en.wikipedia.org/wiki/Intel_HEX

  BIN文件:https://en.wikipedia.org/wiki/Binary_file

  TIps:

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

  MCU的軟件開發(fā)IDE一般都集成不同編程文件之間的轉(zhuǎn)換工具:比如S32DS的objcopy(Create Flash Image )

  以及Keil的Motorola S-Record to BINARY File Converter http://www.keil.com/download/docs/10.asp

  四、NVM驅(qū)動程序開發(fā)

  ECU的NVM一般包括其MCU片內(nèi)集成的用于存放數(shù)據(jù)的EEPROM或者Data-Flash和用于存儲程序代碼/數(shù)據(jù)的Code-Flash/Program-Flash以及MPU擴(kuò)展的片外NOR Flash或者NAND-Flash;NVM驅(qū)動程序包括對NVM的擦除(erase)、編程(program)和校驗(yàn)(verify)等基本操作,也包括對NVM的加密(secure)/解密(unsecure)和加保護(hù)(protecTIon)/解保護(hù)(unprotecTIon)操作。

  Tips:

  a、MCU片上集成的NVM中EEPROM/D-Flash和C_Flash/P-Flash一般屬于不同的block,所以可以直接在Flash上運(yùn)行NVM驅(qū)動對EEPROM/D-Flash進(jìn)行擦除和編程操作;

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

  

  c、由于NVM的工作速度一般較CPU內(nèi)核頻率和總線頻率低,所以運(yùn)行NVM驅(qū)動前必須對NVM進(jìn)行初始化,將設(shè)置分頻器其工作頻率設(shè)置為正常工作所需頻率范圍;

  d、MCU片內(nèi)的NVM同一個block上不能運(yùn)行NVM的驅(qū)動對其自身進(jìn)行擦除和編程操作,否則會傳出read while write的總線訪問沖突(每個NVM block只有一條數(shù)據(jù)總線,一個時刻只能進(jìn)行讀出或者寫入,不支持同時讀出和寫入)。因此對于僅有一個block Flash的MCU來說,就必須在RAM中調(diào)用其NVM驅(qū)動,來對其自身進(jìn)行擦除和編程操作,同時在launch Flash command到等待command完成期間必須關(guān)閉CPU全局中斷,禁止外設(shè)中斷響應(yīng),否則取中斷向量和運(yùn)行中斷ISR都會訪問Flash。要使能中斷,就必須將中斷向量表偏移到RAM或者NVM block(EEPROM/D-Flash)并將響應(yīng)的中斷ISR也拷貝到其他RAM或者NVM block上(當(dāng)然該中斷向量表也必須更新指導(dǎo)新的中斷ISR);

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

  f、NVM的驅(qū)動程序駐留在Flash中,如果出現(xiàn)堆棧溢出等意外程序跑飛意外運(yùn)行NVM驅(qū)動程序則會造成NVM內(nèi)容意外擦除丟失或者修改的情況。因此需要對關(guān)鍵數(shù)據(jù)或代碼(比如bootloader本身)進(jìn)行保護(hù)以防止意外修改,或者更為安全的方法是不將NVM驅(qū)動程序存放在NVM中,而是在bootloader最開始通過上位機(jī)將其下載到RAM中運(yùn)行,bootloader結(jié)束后將該區(qū)域RAM清除,從而避免由于意外運(yùn)行NVM驅(qū)動程序造成的NVM數(shù)據(jù)丟失和修改。(PS:后續(xù)我會專門寫一篇文章介紹相關(guān)的方法,盡請關(guān)注閱讀)

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

  五、bootloader開發(fā)的其他要點(diǎn)

  a、bootloader與應(yīng)用程序的關(guān)系

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

  

  因此bootloader和應(yīng)用程序的鏈接文件中,對NVM的地址空間分配必須分開獨(dú)立,不能重疊(overlap),但其RAM分配沒有約束,兩者都可以使用整個RAM空間,因?yàn)樘D(zhuǎn)到應(yīng)用工程后,將啟動代碼將重新初始化RAM;

  bootloader必須使用MCU默認(rèn)的中斷向量表,因?yàn)槊看螐?fù)位后MCU都是從其默認(rèn)中斷向量表的復(fù)位向量取地址執(zhí)行的;應(yīng)用程序的中斷向量必須進(jìn)行偏移(通過相應(yīng)的中斷向量偏移寄存器,如S12(X)系列MCU的IVBR寄存器或者ARM Cortex M系列MCU的SCB-》VTOR寄存器);而NVM(P-Flash)的擦除都是按照sector進(jìn)行的,所以為了充分利用NVM(P-Flash)空間,都將bootloader分區(qū)到包含默認(rèn)中斷向量表的若干NVM(P-Flash)sector(S12(X)系列MCU的NVM最后若干sector, ARM Cortex M系列MCU從0地址開始的若干sector);

  Tips:

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

  b、bootloader到應(yīng)用程序的跳轉(zhuǎn)方法

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

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

  典型方法如下(假設(shè)S12(X)系列MCU的應(yīng)用程序中斷向量表基地址寄存器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 */

 ?。ǎ╰IsrFunc)(*Ptr))(); /*covert and run*/

  跳轉(zhuǎn)時機(jī):方法有:1)bootloader更新完應(yīng)用程序并校驗(yàn)其完整性O(shè)K之后,將用到的外設(shè)(比如CAN/LIN通信總線模塊、定時器、GPIO等)寄存器恢復(fù)到復(fù)位后的默認(rèn)狀態(tài),然后直接跳轉(zhuǎn);bootloader更新完應(yīng)用程序并校驗(yàn)其完整性O(shè)K之后,等待看門狗定時器超時溢出復(fù)位,在bootloader最開始判斷無遠(yuǎn)程應(yīng)用程序下載請求而跳轉(zhuǎn);推薦使用方法2):因?yàn)榉椒?)相對于軟件復(fù)位,其跳轉(zhuǎn)至應(yīng)用程序復(fù)位啟動函數(shù)時MCU的硬件環(huán)境與直接運(yùn)行應(yīng)用程序可能存在差異,而方法2)的看門狗復(fù)位則屬于硬件復(fù)位,其會將絕大部分外設(shè)(模擬、時鐘和外設(shè))電路復(fù)位,更接近直接運(yùn)行應(yīng)用程序的情況。

  

  c、開發(fā)bootloader需要掌握的知識和調(diào)試方法技巧

  首先,開發(fā)bootloader需要對ECU所用的MCU的RAM和NVM資源十分清楚,然后對其進(jìn)行分區(qū),保證應(yīng)用程序和bootloader的NVM分配沒有重疊。所以必須了解所用軟件開發(fā)工具IDE的鏈接文件的使用方法和編寫規(guī)則;

  然后,需要判斷中斷向量表偏移是否成功,NVM驅(qū)動拷貝的地址和大小等信息,所以必須掌握所用軟件開發(fā)工具IDE的編譯鏈接結(jié)果中map文件的具體信息;

  此外,掌握如何將NVM函數(shù)重定向(將函數(shù)程序代碼的存儲地址和運(yùn)行時地址分開)到RAM中執(zhí)行的方法也十分有用;

  Tips:

  在開發(fā)應(yīng)用程序時,需要先對其進(jìn)行單獨(dú)調(diào)試以保證其功能正常,這時雖然其外設(shè)中斷向量表已經(jīng)進(jìn)行了偏移,但其復(fù)位向量必須的放置在默認(rèn)中斷向量表中復(fù)位向量所在的地址,否則下載后無法運(yùn)行,進(jìn)行正常調(diào)試,因?yàn)槿绻褢?yīng)用程序的復(fù)位向量放在偏移后的應(yīng)用程序中斷向量表中,則默認(rèn)的復(fù)位向量內(nèi)容為0xFFFF(Flash擦除后的狀態(tài)),CPU內(nèi)核就會到0xFFFF的地址取指運(yùn)行,顯然不是真實(shí)的工程啟動函數(shù),所以無法運(yùn)行,其結(jié)果跟一個新MCU未寫入任何程序時上電運(yùn)行的情況一樣,會不斷的出現(xiàn)非法地址復(fù)位;而在應(yīng)用程序開發(fā)完成后,再將其偏移到應(yīng)用程序中斷向量中,以避免與bootloader工程的Flash地址沖突;

  最后,掌握利用調(diào)試器的Hotsync或者attach方法加載elf文件中的調(diào)試信息對bootloader和應(yīng)用程序進(jìn)行無縫調(diào)試也是非常實(shí)用的,可以大大提高bootloader的調(diào)試效率;

  d、量產(chǎn)時bootloader和應(yīng)用程序的下載方法

  推薦將bootloader和應(yīng)用程序編譯鏈接生成的編程文件進(jìn)行合并,一次性使用量產(chǎn)工具(如Cyclone編程器)下載以提高生產(chǎn)效率。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉