在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 基于S12G CAN總線(xiàn)通信的獨(dú)立NVM驅(qū)動(dòng)安全bootloader設(shè)計(jì) 

      基于S12G CAN總線(xiàn)通信的獨(dú)立NVM驅(qū)動(dòng)安全bootloader設(shè)計(jì) 

      作者:胡恩偉 時(shí)間:2016-07-28 來(lái)源:電子產(chǎn)品世界 收藏
      編者按:本文針對(duì)傳統(tǒng)汽車(chē)ECU CAN總線(xiàn)通信bootloader將NVM驅(qū)動(dòng)放置在MCU片上Flash, 存在程序跑飛進(jìn)入NVM驅(qū)動(dòng)時(shí)造成NVM數(shù)據(jù)丟失,從而出現(xiàn)ECU功能丟失或工作異常的問(wèn)題,提出一種獨(dú)立NVM驅(qū)動(dòng)的安全bootloader設(shè)計(jì),并在NXP的S12G128上實(shí)現(xiàn)。引言  CAN總線(xiàn)因其良好的差分通信抗干擾能力而被廣泛應(yīng)用于汽車(chē)ECU通信。bootloader是MCU上電或復(fù)位之后最先運(yùn)行的一段永久駐留于MCU 片上NVM (Non-Volatile Memory,非易失性存儲(chǔ)器) 中的一

      摘要:本文針對(duì)傳統(tǒng)汽車(chē)ECU 通信bootloader將NVM驅(qū)動(dòng)放置在MCU片上Flash, 存在程序跑飛進(jìn)入NVM驅(qū)動(dòng)時(shí)造成NVM數(shù)據(jù)丟失,從而出現(xiàn)ECU功能丟失或工作異常的問(wèn)題,提出一種設(shè)計(jì),并在NXP的128上實(shí)現(xiàn)。

      本文引用地址:http://www.biyoush.com/article/201607/294705.htm

      引言

        因其良好的差分通信抗干擾能力而被廣泛應(yīng)用于汽車(chē)ECU通信。bootloader是MCU上電或復(fù)位之后最先運(yùn)行的一段永久駐留于MCU 片上NVM (Non-Volatile Memory,非易失性存儲(chǔ)器) 中的一段極小的程序,完成與PC上位機(jī)通信,下載、解析并存儲(chǔ)應(yīng)用程序到ECU的非易失性存儲(chǔ)器,從而完成應(yīng)用程序的在線(xiàn)升級(jí)[1]。以往的bootloader設(shè)計(jì)將NVM的驅(qū)動(dòng)程序放在片上Flash中,當(dāng)程序跑飛進(jìn)入NVM驅(qū)動(dòng)時(shí)就會(huì)造成NVM數(shù)據(jù)丟失,導(dǎo)致ECU功能丟失或工作異常。如果將NVM驅(qū)動(dòng)程序編譯到MCU RAM中,形成S19文件,與應(yīng)用程序一起由下載到RAM中運(yùn)行而不將其儲(chǔ)存在片上,則可以避免此類(lèi)情況發(fā)生。

      1 128片上NVM資源及其獨(dú)立驅(qū)動(dòng)程序開(kāi)發(fā)

        128片上NVM資源包括片上的4KB EEPROM和128KB P-Flash。由于S12內(nèi)核中SP和PC寄存器都是16位寬,因此,其最大線(xiàn)性尋址范圍為64KB。為了高效地訪(fǎng)問(wèn)大于64KB的P-Flash存儲(chǔ)空間,F(xiàn)reescale提出了存儲(chǔ)器分頁(yè)訪(fǎng)問(wèn)機(jī)制,即通過(guò)0x8000~0xBFFF的16KB Flash窗口以存儲(chǔ)器映射的方式對(duì)分頁(yè)的Flash空間進(jìn)行訪(fǎng)問(wèn)[2-3]

      1.1 S12G128片上NVM資源

        S12G128的128KB P-Flash包括了從全局地址0x20000開(kāi)始的8個(gè)連續(xù)16KB Flash頁(yè),其支持1/2/4/8/16KB的區(qū)域 (region) 保護(hù) (Protection) 和 整個(gè)P-Flash的加密 (Secure) 。所謂保護(hù)是指不能被應(yīng)用程序擦除和改寫(xiě),這一功能在bootloader開(kāi)發(fā)中常被用于保護(hù)bootloader程序自身不被應(yīng)用程序修改。加密是針對(duì)BDM調(diào)試接口的,當(dāng)S12G加密之后,外部調(diào)試器能夠執(zhí)行的唯一BDM命令就是整片擦除,要想解密,就得執(zhí)行整片擦除命令將整個(gè)P-Flash上的數(shù)據(jù)清空或者輸入8個(gè)字節(jié)的正確后門(mén)密鑰 (backdoor key,位于局部地址0xFF00~0xFF07,全局地址0x3FF00~0x3FF07)。 從而有效的保護(hù)用戶(hù)的軟件知識(shí)產(chǎn)權(quán)[2]。

        S12G128的片上4KB EEPROM,地址空間為0x400~0x13FF,位于CPU可以直接訪(fǎng)問(wèn)的局部地址[3]中,所有無(wú)需分頁(yè)訪(fǎng)問(wèn)。其包含1024個(gè)4Byte的最小擦除和編程扇區(qū)(sector)并支持靈活的保護(hù)功能。S12G 128 的NVM都支持硬件ECC,能夠自動(dòng)糾正NVM數(shù)據(jù)的單比特錯(cuò)誤和多比特檢錯(cuò)。

      1.2 S12G128 開(kāi)發(fā)

        NXP提供的S12系列MCU的標(biāo)準(zhǔn)軟件驅(qū)動(dòng) (SSD—Standard Software Driver),包含運(yùn)行時(shí)獨(dú)立的源代碼、S19文件,C數(shù)組以及靜態(tài)庫(kù)等形式的NVM驅(qū)動(dòng)[5]。

        本設(shè)計(jì)中使用標(biāo)準(zhǔn)軟件驅(qū)動(dòng)開(kāi)發(fā):首先,根據(jù)實(shí)際MCU型號(hào)配置SSD,make生成C數(shù)組形式的NVM驅(qū)動(dòng),將其整理在一個(gè)C文件中與SSD頭文件一起添加到CodeWarrior工程中編譯,并將各個(gè)NVM驅(qū)動(dòng)函數(shù)地址放在位于地址0x3F80的數(shù)組中作為NVM驅(qū)動(dòng)函數(shù)地址表。因?yàn)樗械腘VM驅(qū)動(dòng)函數(shù)數(shù)組和NVM驅(qū)動(dòng)函數(shù)地址表都由C語(yǔ)言關(guān)鍵詞const修飾,是數(shù)組常量,默認(rèn)放在ROM_VAR段中,修改工程PRM鏈接文件,將ROM_VAR段放置在NVM_RAM段中即可將其編譯到0x3000開(kāi)始的RAM地址,得到S19文件,從中即可分離得到NVM驅(qū)動(dòng)及其函數(shù)地址表的S19格式文件。具體的NVM驅(qū)動(dòng)函數(shù)映射地址表及PRM鏈接文件如圖1所示。

        使用時(shí),先將其加載在對(duì)應(yīng)的RAM地址,然后用函數(shù)指針調(diào)用。

      2 基于CAN總線(xiàn)的bootloader設(shè)計(jì)

        基于CAN總線(xiàn)的bootloader設(shè)計(jì)包括運(yùn)行在PC上的上位機(jī)軟件和運(yùn)行在目標(biāo)MCU中的bootloader軟件兩部分。

      2.1 PC上位機(jī)軟件及通信協(xié)議設(shè)計(jì)

        運(yùn)行在PC上的上位機(jī)軟件主要功能是讀取目標(biāo)MCU的應(yīng)用程序S19文件,并調(diào)用USB轉(zhuǎn)CAN總線(xiàn)適配器(Adapter),將其逐行下載到目標(biāo)MCU,其軟件設(shè)計(jì)軟件設(shè)計(jì)流程圖如圖2所示。

        本設(shè)計(jì)中,采用Visual C++調(diào)用WFC和武漢吉陽(yáng)光電的-GY8507 USB轉(zhuǎn)CAN適配器驅(qū)動(dòng),編寫(xiě)上位機(jī)軟件。

        上位機(jī)下載應(yīng)用程序S19文件的CAN消息是ID為0x64的標(biāo)準(zhǔn)數(shù)據(jù)幀,而bootloader host程序應(yīng)答上位機(jī)的CAN消息幀是ID為0xC8的標(biāo)準(zhǔn)數(shù)據(jù)幀,通信速率設(shè)置為500Kbit/s。因此在S12G初始化時(shí)將MSCAN模塊的接收ID濾波器設(shè)置為只接收ID為0x64的標(biāo)準(zhǔn)幀,以避免總線(xiàn)上其他ECU的干擾。具體的CAN消息命令定義如表1所示。

      2.2 bootloader軟件設(shè)計(jì)

        bootloader軟件設(shè)計(jì)流程如圖3所示。

        MCU復(fù)位之后,進(jìn)行系統(tǒng)初始化,配置系統(tǒng)時(shí)鐘和MSCAN,使能CPU全局中斷,然后等待上位機(jī)boot命令并檢查是否超時(shí):如果在規(guī)定的500ms內(nèi)接收到了上位機(jī)請(qǐng)求進(jìn)入boot的命令,則建立通信接收并解析得到行地址和字對(duì)齊的數(shù)據(jù),接著判斷S19行地址空間,若是Flash地址且是第一次收到Flash數(shù)據(jù),則將除bootloader程序之外的所有片上Flash擦除;若為EEPROM地址且是第一次收到EEPROM數(shù)據(jù),則將全部EEPROM擦除;若是RAM地址,則不可擦除。對(duì)Flash地址的數(shù)據(jù),在編程到Flash之前,還須將解析結(jié)果中的邏輯地址轉(zhuǎn)換為Flash驅(qū)動(dòng)所需的線(xiàn)性連續(xù)物理地址,并將數(shù)據(jù)進(jìn)行4字對(duì)齊,以提高編程效率。依次逐行接收,解析并將結(jié)果燒寫(xiě)到相應(yīng)地址的片上Flash/EEPROM/RAM中,直至整個(gè)應(yīng)用程序S19文件結(jié)束,最后復(fù)位外設(shè)、清除NVM驅(qū)動(dòng)所在的RAM、關(guān)閉CPU全局中斷,結(jié)束bootloader跳轉(zhuǎn)至應(yīng)用程序;如果在規(guī)定的500ms內(nèi)未收到上位機(jī)通過(guò)CAN發(fā)來(lái)的進(jìn)入boot命令,則直接關(guān)閉CPU全局中斷,結(jié)束bootloader跳轉(zhuǎn)至應(yīng)用程序。

      2.3 應(yīng)用程序軟件設(shè)計(jì)

        應(yīng)用程序設(shè)計(jì)時(shí),需要保留bootloader所在的Flash空間并在系統(tǒng)初始化時(shí)設(shè)置IVOR=0xEF,將應(yīng)用程序中斷向量表偏移至0xEF80,使其與MCU復(fù)位后默認(rèn)的中斷向量表分開(kāi),從而執(zhí)行不同的外設(shè)中斷服務(wù)函數(shù)。

        另外,需要將COP看門(mén)狗使能,在應(yīng)用程序主循環(huán)中正常喂狗,而在MSCAN接收中斷中對(duì)接收到的CAN消息ID進(jìn)行判斷,若接收到Boot ID,則不喂狗,讓其溢出復(fù)位,從而進(jìn)入bootloader。典型的應(yīng)用程序軟件設(shè)計(jì)流程圖如圖4所示。

      3 bootloader和應(yīng)用程序內(nèi)存分配及處理器專(zhuān)家配置

        在bootloader工程中使用CodeWarrior 5.1 IDE自帶的內(nèi)核和外設(shè)圖形化配置和自動(dòng)代碼生成工具--處理器專(zhuān)家(Processor Expert)配置外部8MHz晶振作為PLL參考時(shí)鐘,配置PLL倍頻輸出50MHz作為CPU運(yùn)行時(shí)鐘,其二分配得到的25MHz作為總線(xiàn)時(shí)鐘頻率;MSCAN通信速率為500Kbit/s,使能接收中斷。配置0xF000~0xFEFF的3.8KB Flash作為bootloader存儲(chǔ)空間,堆棧大小為256B,保留0x3000到0x3FFF的4KB空間作為NVM驅(qū)動(dòng)代碼的存儲(chǔ)和運(yùn)行空間并將其初始化為0。系統(tǒng)RAM空間為0x2000到0x2FFF。

        在應(yīng)用程序工程中,需要保留bootloader所在的Flash最后4KB空間,其余Flash空間全部可被應(yīng)用程序使用;對(duì)于RAM空間,則全部8KB都可以被用戶(hù)使用。而且必須保證其入口函數(shù)Entry_Point () 與bootloader中定義的應(yīng)用程序入口地址相同 (因?yàn)槭褂锰幚砥鲗?zhuān)家生成的工程中,默認(rèn)從0xC000開(kāi)始放置默認(rèn)中斷服務(wù)函數(shù)Cpu_Interrupt () 和匯編軟件延遲函數(shù)Cpu_Delay100US (), 其分別占2個(gè)字節(jié)和12個(gè)字節(jié),然后才放置MCU復(fù)位中斷服務(wù)函數(shù)_EntryPoint () ,如果在處理器專(zhuān)家的CPU組件中未使能匯編軟件延遲函數(shù),則應(yīng)將bootloader和應(yīng)用程序中的應(yīng)用程序入口地址由0xC00E改為0xC002 。

        bootloader和應(yīng)用程序的內(nèi)存分配如圖5所示。

        使用處理器專(zhuān)家CPU組件的編譯選項(xiàng)能夠非常方便的完成上述內(nèi)存分配并生成prm鏈接文件, bootloader內(nèi)存分配處理器專(zhuān)家配置結(jié)果如圖6所示。

        生成相應(yīng)的鏈接文件為:

        SEGMENTS

        RAM = READ_WRITE 0x2000 TO 0x2FFF;

        ROM_C000 = READ_ONLY 0xC00E TO 0xEFFF;

        NVM_DRIVER_RAM = READ_WRITE 0x3000 TO 0x3FFF FILL 0x00;

        BOOT_ROM = READ_ONLY 0xF000 TO 0xFEFF;

        END

        PLACEMENT

        _PRESTART,

        STARTUP,

        ROM_VAR,

        STRINGS,

        NON_BANKED,

        DEFAULT_ROM,

        COPY INTO BOOT_ROM;

        DEFAULT_RAM INTO RAM, NVM_DRIVER_RAM;

        APP_ROM_ENTRY INTO ROM_C000;

        END

        INIT _EntryPoint

        STACKSIZE 0x0100

      4. 總結(jié)

        本文針對(duì)NXP公司的S12 (X) 系列MCU在汽車(chē)ECU應(yīng)用中bootloader開(kāi)發(fā)的實(shí)際需求,介紹了S12G128的片上NVM資源極其獨(dú)立驅(qū)動(dòng)開(kāi)發(fā),提出并實(shí)現(xiàn)了一種基于CAN總線(xiàn)通信將NVM驅(qū)動(dòng)程序由上位機(jī)下載到RAM中運(yùn)行而非讓其駐留于MCU片上Flash的設(shè)計(jì),有效避免了應(yīng)用程序跑飛運(yùn)行至駐留于片上Flash的NVM驅(qū)動(dòng)代碼所造成的程序/數(shù)據(jù)丟失失效。借助CodeWarrior 5.1 IDE的圖形化外設(shè)配置和自動(dòng)代碼生成工具----處理器專(zhuān)家,便捷的實(shí)現(xiàn)了bootloader和應(yīng)用程序的內(nèi)存分配和片上外設(shè)配置。本設(shè)計(jì)提供完整設(shè)計(jì)工程和使用文檔,在此基礎(chǔ)上,根據(jù)整車(chē)廠(chǎng)的要求修改CAN報(bào)文boot ID和命令,并增加相應(yīng)的UDP或者CCP協(xié)議棧即可快速開(kāi)發(fā)出符合車(chē)廠(chǎng)要求的產(chǎn)品。

      參考文獻(xiàn):

        [1][德]康拉德·萊夫 .BOSCH汽車(chē)電氣與電子, 中文第二版[M].孫澤昌,譯,北京:北京理工大學(xué)出版社,,2014,8.

        [2]孫同景. Freescale 9S12 十六位單片機(jī)原理及嵌入式開(kāi)發(fā)技術(shù)[M].北京:機(jī)械工業(yè)出版社, 2008,7.

        [3]AN3784.Understanding the Memory Scheme in the S12(X) Architecture, Application Note. NXP Semiconductor, http://www.nxp.com. 2009.

        [4]MC9S12G Family Reference Manual, Rev.1.25. NXP Semiconductor, http://www.nxp.com. 2014.

        [5]Standard Software Driver for MC9S12G / MC9S12VR User’s Manual, Rev.3.1. NXP Semiconductor, http://www.nxp.com. 2012.

      本文來(lái)源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第7期第73頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。



      評(píng)論


      相關(guān)推薦

      技術(shù)專(zhuān)區(qū)

      關(guān)閉