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