李睿,張小明
(西安法士特汽車傳動(dòng)工程研究院,陜西 西安 710119)
英飛凌車用XC2000系列微控制器Bootloader設(shè)計(jì)
李睿*,張小明
(西安法士特汽車傳動(dòng)工程研究院,陜西 西安 710119)
文章介紹了關(guān)于英飛凌XC2000系列芯片上Bootloader設(shè)計(jì)的一種方式。介紹了總體架構(gòu),硬件結(jié)構(gòu),并詳細(xì)闡述了系統(tǒng)軟件的設(shè)計(jì)和實(shí)現(xiàn)。該Bootloader以XC2000為基礎(chǔ)平臺(tái),具有較好的移植性,理論上是用于英飛凌XC2000全系列產(chǎn)品。能夠?qū)崿F(xiàn)程序切換,加密解密,CAN網(wǎng)絡(luò)程序燒寫(xiě),軟件版本控制等多方面功能。從軟件層面提升產(chǎn)品生命周期,達(dá)到設(shè)計(jì)預(yù)期要求。
英飛凌;XC2000;Bootloader;加密
CLC NO.:U462.2 Document Code: A Article ID: 1671-7988 (2016)07-144-03
隨著汽車電子行業(yè)的飛速發(fā)展,商用車控制系統(tǒng)近兩年內(nèi)正以幾何形式增長(zhǎng)。嵌入式在商用車領(lǐng)域內(nèi)得到了長(zhǎng)足的發(fā)展。隨著需求井噴式的增長(zhǎng)與變化,汽車電子中控制系統(tǒng)愈發(fā)復(fù)雜,產(chǎn)品維護(hù),版本控制,后期追蹤變得越發(fā)困難。歐美在汽車電子領(lǐng)域中很早就引入了Bootloader這一設(shè)計(jì)理念,很好的解決了產(chǎn)品實(shí)際中遇到的問(wèn)題。
在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行??梢猿跏蓟布O(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。嵌入式系統(tǒng)是一個(gè)資源十分緊缺的特殊系統(tǒng),它不同于我們傳統(tǒng)PC計(jì)算機(jī)。所以在緊張的資源中要實(shí)現(xiàn)對(duì)應(yīng)用程序的啟動(dòng)管理,程序更新,版本控制,程序加密等諸多功能。
英飛凌的XC2000系列微控制器芯片是為汽車電子專門(mén)設(shè)計(jì)的,具有較高的運(yùn)行速率,強(qiáng)大的外圍設(shè)備,強(qiáng)大的穩(wěn)定性。本文就選取XC2000的芯片,討論其上電后的運(yùn)行機(jī)制,Bootloader實(shí)現(xiàn)方案,F(xiàn)lash操作方法,以及如何利用芯片自身的加密機(jī)制保護(hù)應(yīng)用程序的知識(shí)產(chǎn)權(quán)。
英飛凌的XC2000系列芯片采用典型的馮諾依曼結(jié)構(gòu),即采用存儲(chǔ)程序方式,指令和數(shù)據(jù)不加區(qū)別混合存儲(chǔ)在同一個(gè)存儲(chǔ)器中,(數(shù)據(jù)和程序在內(nèi)存中是沒(méi)有區(qū)別的,它們都是內(nèi)存中的數(shù)據(jù),當(dāng)IP指針指向哪 CPU就加載那段內(nèi)存中的數(shù)據(jù),如果是不正確的指令格式,CPU就會(huì)發(fā)生錯(cuò)誤中斷。該系列芯片的地址分配如下表:
表1 英飛凌XC2000系列芯片的地址空間
我們可以看出按照官方給出的地址分布,我們能夠利用的實(shí)際存儲(chǔ)區(qū)域只有Flash0與Flash1(上圖紅色圈定區(qū)域),系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0xC00000處開(kāi)始執(zhí)行。從空間上講已經(jīng)能夠滿足一般程序存儲(chǔ)(一般嵌入式系統(tǒng)軟件在幾KB到幾十KB之間)。但是由于嵌入式芯片的工作模式使得我們不得不將該程序按照約定存儲(chǔ)在0xC00000的首位地址處。上電后即按照程序邏輯運(yùn)行,我們即使在Flash中安排了兩個(gè)應(yīng)用程序也無(wú)法啟用第二個(gè)程序。所以需要我們將能夠管理應(yīng)用程序啟動(dòng)的BootLoader處安排在0xC00000地址處,上電后首先運(yùn)行Bootloader,由它接管微處理器的運(yùn)行。
1.1 程序跳轉(zhuǎn)
程序跳轉(zhuǎn)的目的就是為了在第一個(gè)專有程序完成自身本職工作后,可以將硬件的管理權(quán)釋放,并且將各個(gè)MCU中的資源移交給第二個(gè)程序,并且為第二個(gè)程序運(yùn)行提供支持。
圖2 緩速器模塊
如上圖所示,我們MCU中的Flash資源布局時(shí)將整個(gè)Flash劃分為了三個(gè)區(qū)域。(注:我們這里將Flash從邏輯層面上連成一個(gè)整體,實(shí)際上Flash的地址是不連續(xù)的)。我們?cè)?xC00000處安放的是Bootloader,其必須完成對(duì)APP的調(diào)用,使得APP在Bootloader生命周期結(jié)束的時(shí)候能夠啟用,并且對(duì)于MCU的硬件資源能夠正確使用。
程序跳轉(zhuǎn)本身在程序上沒(méi)有難度,關(guān)鍵技術(shù)難點(diǎn)在于必須從邏輯上將MCU存儲(chǔ)資源有效的分區(qū)管理。由于英飛凌XC2000系列芯片的自身運(yùn)行機(jī)制要求,cstart()函數(shù)以及其后的中斷向量表需有序的排列在0xCX0000的起始段位置處,這樣APP或者Bootloader才能按照約定正常運(yùn)行。
1.2 存儲(chǔ)區(qū)相關(guān)操作
英飛凌XC2000系列的MCU中都不含有帶有EEPROM的芯片,所以不論Bootloader的程序更新還是參數(shù)標(biāo)定的存儲(chǔ)都需要對(duì)Flash進(jìn)行操作。
Flash這類存儲(chǔ)單元本身具有一定特殊特性。Flash進(jìn)行寫(xiě)操作的時(shí)是以頁(yè)為單位,一次進(jìn)行一個(gè)整頁(yè)操作,不論擦除還是寫(xiě)入操作都是如此,以英飛凌的XC2000系列芯片為例的話,一頁(yè)的大小為128字節(jié)(64字)。
英飛凌內(nèi)核中有一個(gè)獨(dú)有特殊單元IMB,由該單元管理了XC2000系列的MCU的Flash擦除,燒寫(xiě)工作甚至加密,解密工作。前面提到對(duì)于英飛凌XC2000來(lái)說(shuō),每一次對(duì)Flash的操作最小單元為一頁(yè)。所以實(shí)際上的對(duì)Flash操作都是先對(duì)IMB進(jìn)行操作,完成正確的操作命令字后,再由IMB對(duì)指定Flash進(jìn)行操作??刂谱直砣缦拢?/p>
1.3 存儲(chǔ)區(qū)加密解密
首先,芯片加密屬于MCU的最核心操作,芯片廠商從伊始的原理設(shè)計(jì)上就做了諸多防護(hù),以防操作變得過(guò)于簡(jiǎn)單。如果過(guò)于簡(jiǎn)單,加密解密的設(shè)計(jì)意義就會(huì)流于形式,起不到真正防護(hù)作用。所以從機(jī)理上講,加密解密就是對(duì)MCU進(jìn)行核心操作。
下圖揭示了英飛凌XC2000的IMB運(yùn)行機(jī)制。其通過(guò)物理層映射到核心寄存器中,再由IMB Core進(jìn)行運(yùn)行,但是物理層卻不能由IMB Core以外的任何方式修改,從根本上起到了防護(hù)作用。我們可以看到,英飛凌XC2000系列芯片在設(shè)計(jì)之初就采用三級(jí)映射的邏輯關(guān)系,我們實(shí)際可操作的層位物理層,即兩個(gè)Security Page。之后由中間層和上層逐層進(jìn)行管理。
圖3
下圖就是展示了XC2000系列芯片的物理層核心區(qū)域的信息排布。其中包含了密碼,保護(hù)使能寄存器,上鎖確認(rèn)代碼,BMI啟動(dòng)方式等多種重要參數(shù)。對(duì)其的修改才是加密解密的核心工作,且不能有絲毫錯(cuò)誤。圖示左側(cè)下標(biāo)為該區(qū)域真實(shí)絕對(duì)地址,但由于IMB運(yùn)行機(jī)制的影響,是不能直接對(duì)地址操作的,仍然需要遵循存儲(chǔ)區(qū)的操作字序列方能成功操作對(duì)應(yīng)區(qū)域。
圖4
值得注意的一點(diǎn),在對(duì)Security Page進(jìn)行操作時(shí),必須首先清除Security Page 1中的Lock Code,然后完成Security Page 0中的Password、PROCON、BMI設(shè)置,最后回填Security Page 1的Lock Code。這樣才能使得操作生效,并且在最后一步回填Lock Code時(shí),加密保護(hù)是即刻生效的,不需要重新上電。
整個(gè)Bootloader包含兩個(gè)階段:
2.1 基本的硬件初始化
這是Boot Loader一開(kāi)始就執(zhí)行的操作,其目的是為第二階段的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。目前我公司設(shè)計(jì)的Bootloader通常包括以下步驟(以執(zhí)行的先后順序):
(1)屏蔽所有的中斷。為中斷提供服務(wù)通常是OS設(shè)備驅(qū)動(dòng)程序的責(zé)任,因此在BootLoader的執(zhí)行全過(guò)程中可以不必響應(yīng)任何中斷。中斷屏蔽可以通過(guò)寫(xiě)CPU的中斷屏蔽寄存器或狀態(tài)寄存器來(lái)完成。
(2)設(shè)置CPU的速度和時(shí)鐘頻率。
(3)RAM初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫(kù)控制寄存器等。
(4)CAN模塊初始化。由于車輛使用的標(biāo)準(zhǔn)網(wǎng)絡(luò)為CAN網(wǎng)絡(luò),所以與其他Bootloader不同的是需要初始化CAN相關(guān)功能。
2.2 啟動(dòng)Bootloader程序,進(jìn)入等待服務(wù)循環(huán)
當(dāng)Bootloader完成硬件資源的相關(guān)配置與初始化,就需要系統(tǒng)啟動(dòng)相關(guān)服務(wù),進(jìn)入等候狀態(tài)。根據(jù)總線數(shù)據(jù)請(qǐng)求切換相關(guān)工作模式,啟動(dòng)相關(guān)服務(wù)功能,或者在無(wú)請(qǐng)求服務(wù)時(shí)切換到APP程序運(yùn)行。如果Bootloader判斷條件滿足可以切換到APP運(yùn)行,那么在切換完成的時(shí)刻,Bootloader生命周期已經(jīng)結(jié)束。
本文就英飛凌車用微控制器XC2000系列芯片的運(yùn)行原理及其Bootloader的設(shè)計(jì)思路做以分析。探討了關(guān)于程序跳轉(zhuǎn),存儲(chǔ)區(qū)讀寫(xiě)操作,存儲(chǔ)區(qū)加密解密三個(gè)核心技術(shù)的難點(diǎn)與解決思路。Bootloader的實(shí)際應(yīng)用能夠很好的在開(kāi)發(fā)、產(chǎn)品量產(chǎn)、終端維護(hù)等多個(gè)方面提供有力幫助,能夠有效的減少各個(gè)環(huán)節(jié)的人力物力,并且豐富的擴(kuò)展功能使得產(chǎn)品追蹤,產(chǎn)品信息查詢成為可能。Bootloader僅是一個(gè)基礎(chǔ)工具,如何豐富該工具,使其能夠發(fā)揮更大的功效值得深入研究與學(xué)習(xí)。
[1] 程夕明.汽車嵌入式微控制器原理及應(yīng)用—英飛凌XC2000家族MCU [M].電子工業(yè)出版社,2013.9.
[2] 王伏,張忠能,杭勇等.基于CAN總線的電控單元程序,引導(dǎo)加載功能開(kāi)發(fā)[J].微型電腦應(yīng)用,2011,27(9):30-32.DOI:10.3969/j.issn. 1007-757X.2011.09.010.
[3] 黃娟娟,夏超英,柳同生等.基于英飛凌XC2268N的整車控制系統(tǒng)CAN通信設(shè)計(jì)[J].儀表技術(shù)與傳感器,2014,(5):60-62,72.DOI:10. 3969/j.issn.1002-1841.2014.05.020.
The Automotive Microcontroller of Infineon Bootloader Design
Li Rui, Zhang Xiaoming
( Xi 'an special automobile transmission engineering research institute, Shaanxi Xi 'an 710119 )
This paper introduces about a kind of bootloader design based on Infineon XC2000 series chip. This paper introduces the overall architecture, hardware structure, and expounds the design and implementation of the system software in detail. The Bootloader is based on XC2000 platform, so it has a good portability. It is suit for all series products of Infineon XC2000 in theory. The Bootloader contains the various functions of system initialization, the application of switching, flash encryption or decryption, programming through the CAN network, software version control and so on. The bootloader improve the product life by software and meet the design demands.
Infineon; XC2000; Bootloader; Encryption
U462.2
A
1671-7988(2016)07-144-03
李睿,通訊作者,就職于西安法士特汽車傳動(dòng)工程研究院。
10.16638/j.cnki.1671-7988.2016.07.045