• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于S32R274的Bootloader開發(fā)與實(shí)現(xiàn)

      2021-07-28 23:17:12王宇譚硯磊鄒雄飛胡哲昊
      現(xiàn)代信息科技 2021年2期

      王宇 譚硯磊 鄒雄飛 胡哲昊

      摘? 要:針對(duì)汽車ECU的Bootloader開發(fā)問題,使用恩智浦(NXP)S32DS IDE工具進(jìn)行相關(guān)的開發(fā)與實(shí)現(xiàn)。作為汽車電子程序中需要運(yùn)行的第一段代碼,Bootloader的開發(fā)問題是該行業(yè)開發(fā)人員所面臨的首要問題。恩智浦所提供的S32DS IDE工具,具有圖形化的配置界面。通過該IDE工具,并基于恩智浦的S32R274芯片來詳細(xì)說明關(guān)于此芯片的Bootloader開發(fā)與配置過程。并設(shè)計(jì)了一個(gè)簡(jiǎn)單的實(shí)驗(yàn),以驗(yàn)證Bootloader是否成功跳轉(zhuǎn)到應(yīng)用程序中,用以說明整個(gè)基于此芯片的Bootloader的開發(fā)與配置。

      關(guān)鍵詞:汽車ECU;Bootloader;S32R274;NXP;S32DS IDE

      中圖分類號(hào):TP311.11? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2021)02-0041-04

      Abstract:Aiming at the problem of Bootloader development of automotive ECU,NXP(NXP)S32DS IDE tool is used to develop and implement it. As the first code to run in automotive electronic program,the development of Bootloader is the most important problem for developers in this industry. S32DS IDE tool provided by NXP has a graphical configuration interface. Through this IDE tool,and based on S32R274 chip of NXP,the development and configuration process of Bootloader about this chip are explained in detail. And a simple experiment is designed to verify whether the Bootloader can jump to the application successfully,which is used to explain the development and configuration of the whole Bootloader based on this chip.

      Keywords:automotive ECU;Bootloader;S32R274;NXP;S32DS IDE

      0? 引? 言

      Bootloader是微處理器ECU非易失性存儲(chǔ)器中的一段程序加載代碼,每次ECU復(fù)位后都會(huì)運(yùn)行Bootloader[1,2]。它會(huì)檢查是否有來自通信總線的遠(yuǎn)程加載請(qǐng)求,如果有則進(jìn)入Bootloader模式,建立與程序下載端的應(yīng)用程序,解析其地址和數(shù)據(jù)代碼,運(yùn)行NVM(None ValitaleMomory——非易失性存儲(chǔ)器)驅(qū)動(dòng)程序,將其編程到NVM中,并校驗(yàn)其完整性,從而完成應(yīng)用程序更新。如果沒有來自通信總線的遠(yuǎn)程程序加載請(qǐng)求,則直接跳轉(zhuǎn)到應(yīng)用程序復(fù)位入口函數(shù),運(yùn)行應(yīng)用程序[3-5]。

      恩智浦針對(duì)自己研制的芯片開發(fā)了相對(duì)應(yīng)的IDE工具,通過IDE工具可以初步實(shí)現(xiàn)對(duì)Bootloader的圖形化配置,大大縮短了芯片開發(fā)周期,提高開發(fā)人員的工作效率。本文基于IDE工具和S32R274芯片來說明一個(gè)完整的Bootloader配置過程。

      1? 總體配置方案

      為保證Bootloader正常運(yùn)行,還要保證Bootloader能夠正常啟動(dòng)和加載應(yīng)用程序,就需要將Bootloader程序和應(yīng)用程序放在不同的內(nèi)存分區(qū)。

      恩智浦S32R274芯片分為三個(gè)內(nèi)核,其中Z4核屬于啟動(dòng)核,Bootloader程序也主要在此啟動(dòng)內(nèi)核中運(yùn)行;外兩個(gè)內(nèi)核Z7_1/2核屬于DSP核,主要用于應(yīng)用程序的運(yùn)行。在此芯片中,程序總是“從啟動(dòng)配置半字”(RCHW)開始運(yùn)行,RCHW須放置在芯片的boot location塊中,占用最開始的8個(gè)字節(jié)地址,MCU啟動(dòng)時(shí),從boot location 0開始依次查找合法的RCHW,開始MCU的啟動(dòng)。此芯片存儲(chǔ)器包含F(xiàn)lash和SRAM兩個(gè)部分,這兩部分存儲(chǔ)器都具有寫時(shí)讀分區(qū)(Read-While-Write Partition,RWW),一個(gè)寫時(shí)讀分區(qū)的資源,在一個(gè)時(shí)刻只能被總線上的一個(gè)master訪問。所以,在分配多核CPU的存儲(chǔ)器資源時(shí)盡量不要跨寫時(shí)讀分區(qū),以避免因訪問沖突或延遲所帶來的系統(tǒng)存儲(chǔ)器訪問效率低下。

      1.1? 存儲(chǔ)器分配

      在芯片中為內(nèi)存塊做了區(qū)分,確保不同的內(nèi)存塊運(yùn)行時(shí)不會(huì)相互影響。需要將Bootloader程序和應(yīng)用程序放置在不同的內(nèi)存塊中,便于應(yīng)用程序從正確的地址進(jìn)行啟動(dòng)和加載。

      下文為S32R274芯片存儲(chǔ)器分配:

      (1)1個(gè)16 kB的UTest NVM Block,用于配置MCU加解密信息和存儲(chǔ)芯片出場(chǎng)配置信息。

      (2)4個(gè)16 kB的Data Flash Block,用于軟件模擬EEPROM、存儲(chǔ)數(shù)據(jù)以及存儲(chǔ)用戶代碼。

      (3)由2個(gè)16 kB CSE2 Flash Block、2個(gè)16 kB Flash Block0/1(boot location 0/1)、6個(gè)64 kB Flash Block2/3/4/5/6/7

      (含boot location 2/3)組成的Boot Flash Block,以及由6個(gè)256 kB Flash Block8/9/10/11/12/13(含boot location 4/5/6/7)組成的Code Flash Block,總計(jì)2MB的Flash存儲(chǔ)器。

      SRAM由4個(gè)128 kB大小的分區(qū)和4個(gè)256 kB大小的分區(qū)組成,共計(jì)1.5MB。三個(gè)CPU內(nèi)核分別被分配了64 kB大小的專有空間資源(D-MEM SRAM),總共192 kB的D- MEM SRAM[6]。

      D-MEM SRAM為各內(nèi)核中的專有資源可以保證多核間的運(yùn)行不會(huì)相互干擾,還可以實(shí)現(xiàn)一些多核間的非同步操作。

      1.2? S32RS IDE中新工程的Bootloader配置過程

      用戶可以在S32DSIDE中簡(jiǎn)化Bootloader的配置過程(該IDE提供了圖形化的配置界面),通過配置向?qū)?chuàng)建一個(gè)空的Bootloader工程,然后還可以根據(jù)程序?qū)Y源的使用情況在此基礎(chǔ)上再對(duì)內(nèi)存塊進(jìn)行重新劃分。

      Bootloader內(nèi)存空間配置中,默認(rèn)芯片的三個(gè)CPU內(nèi)核均分Flash和SRAM地址空間。

      創(chuàng)建完成多核應(yīng)用工程,在S32DS IDE的應(yīng)用工程瀏覽窗口中,可以看到分別為S32R274的每一個(gè)CPU內(nèi)核創(chuàng)建了一個(gè)應(yīng)用工程。

      其中,Z4_0為boot內(nèi)核,其啟動(dòng)函數(shù)startup在其連接文件中指定到地址0x10000000。

      MEMORY? //關(guān)鍵詞MEMORY標(biāo)識(shí)系統(tǒng)存儲(chǔ)器分區(qū)

      {

      ……

      m_text :org = 0x1000000,len = 512K //主要代碼區(qū),起始地址0x10000000

      ……

      }

      SECTIONS

      {

      ……

      .startup : ALIGN(0x400) //啟動(dòng)段,使用關(guān)鍵詞ALING進(jìn)行1K字節(jié)對(duì)齊

      {

      __start = . ;

      *(.startup)

      } >m_text

      ……

      }

      每一個(gè)核心都對(duì)應(yīng)一個(gè)鏈接文件,在進(jìn)行不同核心的啟動(dòng)配置的時(shí)候,每個(gè)核心的啟動(dòng)位置須位于不同的boot location,用于確保程序之間的運(yùn)行不會(huì)相互干擾。

      以上代碼段所在的鏈接文件指定了啟動(dòng)段,Z4核工程中的flashrchw.c文件要指定合法的啟動(dòng)配置半字和復(fù)位向量到鏈接文件指定的啟動(dòng)段中,用戶還可以在此處修改Z4核應(yīng)用工程的鏈接文件,將其放到其他的boot location。

      externvoid_start(void);

      #define ENTRY_POINT? _start //啟動(dòng)函數(shù)

      ……

      const uint32_t __attribute__ ((section(".cpu0_reset_vector"))) RCHW2 = (uint32_t)ENTRY_POINT;//指定到啟動(dòng)配置半字段中

      另外兩個(gè)非啟動(dòng)核—Z7_1/2核的啟動(dòng)地址,由Z4內(nèi)核應(yīng)用工程main.c中的hw_init()函數(shù)通過初始化MC_ME.CADDR2.R和MC_ME.CADDR3.R兩個(gè)硬件寄存器配置[7]。

      defined(START_FROM_FLASH)

      MC_ME.CADDR2.R = 0x1080000 | 0x1;//初始化MC_ME.CADDR2.R寄存器

      defined(START_FROM_FLASH)

      MC_ME.CADDR3.R = 0x1100000 | 0x1;//初始化MC_ME.CADDR3.R寄存器

      上文給出了一個(gè)完整的Bootloader配置過程,通過該配置可以創(chuàng)建一個(gè)完整的空Bootloader工程。

      2? 軟件設(shè)計(jì)

      由IDE創(chuàng)建好Bootloader工程后,用戶還可以對(duì)代碼進(jìn)行修改,可以自定義數(shù)據(jù)段和代碼段。為保證自定義數(shù)據(jù)段和代碼段可以正常初始化,需要對(duì)啟動(dòng)文件中的啟動(dòng)函數(shù)進(jìn)行修改,用戶可以在啟動(dòng)函數(shù)的.customize_data_section段和.bootloader_section段中添加自定義數(shù)據(jù)和代碼。啟動(dòng)函數(shù)程序流程圖如圖1所示。

      S32DS IDE調(diào)試編譯工程可以生成對(duì)應(yīng)的S19文件,S19文件以ASCII的形式存儲(chǔ)數(shù)據(jù),可以直接寫入到MCU的Flash中。以S19文件中的幾行數(shù)據(jù)為例,對(duì)文件格式進(jìn)行說明,例如:

      “S0290000533332523237345F426F6F746C6F616465725F4170704578616D706C65315F5A342E7372656380;

      S315010000807C2103A67C2FF1207C2903A67C3043A684;

      S70501000000F9”

      S0,S格式文件的第一行數(shù)據(jù),表示文件名(含路徑)。

      S3,地址為4個(gè)字節(jié)的一行數(shù)據(jù),此類型的數(shù)據(jù)包含了程序內(nèi)容。

      S7,S格式文件的最后一行數(shù)據(jù),表示程序的開始執(zhí)行地址,此行表示程序的結(jié)束。

      一個(gè)S19文件由一行S0類型的數(shù)據(jù)和、一行S7類型的數(shù)據(jù)以及若干S3類型的數(shù)據(jù)組成,S3類型的數(shù)據(jù)存儲(chǔ)了文件的主要內(nèi)容,以上述S3類型數(shù)據(jù)為例:

      “S3”表示一條S3類型的數(shù)據(jù)。

      “15”表示該條數(shù)據(jù)記錄有0x15個(gè)字節(jié)(包括4字節(jié)地址、16字節(jié)數(shù)據(jù)、1字節(jié)校驗(yàn)和)。

      “01000080”表示該條數(shù)據(jù)的目標(biāo)地址。

      “7C2103A67C2FF1207C2903A67C3043A6”表示該條數(shù)據(jù)的數(shù)據(jù)內(nèi)容。

      “84”表示這條數(shù)據(jù)的校驗(yàn)和。

      3? Bootloader通信過程說明

      用戶調(diào)試板有兩個(gè)CAN通信接口CAN 0和CAN 2,CAN 0接口用于接收上位機(jī)傳輸過來的S文件,主要用于與上位機(jī)的通信。CAN 2接口用于原始數(shù)據(jù)的傳出,采集到的雷達(dá)回波信號(hào)通過CAN 2接口傳輸?shù)綌?shù)據(jù)采集的上位機(jī)軟件中,進(jìn)行后續(xù)的數(shù)據(jù)分析和處理。

      下文給出了上位機(jī)與用戶調(diào)試板之間的詳細(xì)通信過程,將S文件寫入到用戶調(diào)試板MCU當(dāng)中,以CAN通信的方式寫入S文件:

      (1)上位機(jī)發(fā)送ID=100,data=0xFF,持續(xù)發(fā)送該報(bào)文直至收到從機(jī)的響應(yīng)ID=200,Data=0xC2。從機(jī)收到報(bào)文后通過MC_ME的模式轉(zhuǎn)換產(chǎn)生復(fù)位,初始化完成,等待1ms的時(shí)間看是否有上位機(jī)的指定報(bào)文。

      (2)從機(jī)再次收到報(bào)文,此時(shí)從機(jī)發(fā)送ID=200,Data=0xC2(Busy),其作用在于通知上位機(jī),從機(jī)已經(jīng)進(jìn)入Bootloader模式,正在擦除Flash。

      (3)從機(jī)發(fā)送ID=200,Data=0xC3,表示Flash擦除完成,進(jìn)入準(zhǔn)備狀態(tài)。

      (4)上位機(jī)發(fā)送ID=100,Data=0xFE,表示一行S19數(shù)據(jù)發(fā)送完成。從機(jī)發(fā)送ID=200,Data=0xC3,表示接收到的一行數(shù)據(jù)已經(jīng)被寫入Flash。

      (5)上位機(jī)發(fā)送ID=100,Data=0xFD,表示整個(gè)S19文件發(fā)送完成。

      (6)從機(jī)發(fā)送ID=200,Data=0xC1,表示所有數(shù)據(jù)寫入完成,即將退出Bootloader,進(jìn)入應(yīng)用程序。

      4? 方案驗(yàn)證

      為驗(yàn)證是否成功通過bootloader程序跳轉(zhuǎn)到應(yīng)用程序中,筆者在此芯片的Z7_1核主程序中編寫了一段簡(jiǎn)單的測(cè)試代碼。測(cè)試代碼為:

      while(1)

      {

      ……

      //測(cè)試代碼

      uint8_tarrData[64]={1,1,1,1,1,1,1,1};

      mcal_mcanSend(0x1FF, The_Standard_Frame, 8, arrData);

      ……

      }

      此代碼是通過CAN通道發(fā)射一串CAN信號(hào)到上位機(jī)的CAN信號(hào)輸出窗口,將此段程序放到APP程序中,用來驗(yàn)證是否成功跳轉(zhuǎn)到APP程序當(dāng)中,如圖2所示。

      圖2顯示結(jié)果表明,本方案可以得到預(yù)期的輸出結(jié)果,表明可以通過Bootloader程序成功啟動(dòng)應(yīng)用程序。

      5? 結(jié)? 論

      本文詳細(xì)介紹了采用S32DS IDE工具對(duì)恩智浦S32R274芯片的Bootloader的開發(fā)與配置過程,并驗(yàn)證了其是否可以成功啟動(dòng)應(yīng)用程序,結(jié)果表明,Bootloader程序可以成功啟動(dòng)應(yīng)用程序。

      此IDE工具將Bootloader的開發(fā)過程圖形化,使得開發(fā)人員可在開發(fā)過程中熟悉整個(gè)硬件結(jié)構(gòu),能夠加快開發(fā)進(jìn)程,降低開發(fā)人員初期開發(fā)的時(shí)間成本。特別是通過本文的講解能夠讓基于恩智浦芯片開發(fā)的初學(xué)者對(duì)啟動(dòng)加載程序有一個(gè)基本的了解,使得初學(xué)者能夠盡快上手。

      本文提到的驗(yàn)證Bootloader是否成功啟動(dòng)應(yīng)用程序的方法雖然很簡(jiǎn)單,但是對(duì)驗(yàn)證Bootloader是否成功運(yùn)行和啟動(dòng)應(yīng)用程序具有現(xiàn)實(shí)意義。當(dāng)然驗(yàn)證方法并不局限于此,本文也僅僅是提出了一種驗(yàn)證思路。此外,基于S32R274芯片的完整的Bootloader開發(fā)過程對(duì)汽車電子相關(guān)開發(fā)人員也具有一定的參考和借鑒意義。

      參考文獻(xiàn):

      [1] 汪慶武,郇鉦,黎澤清,等.基于SPI接口DSP程序引導(dǎo)加載方法設(shè)計(jì)與實(shí)現(xiàn) [J].儀表技術(shù),2016(5):6-8+18.

      [2] 詹克旭.基于UDS協(xié)議的汽車ECU升級(jí)方案 [J].計(jì)算機(jī)應(yīng)用與軟件,2019,36(1):191-196+203.

      [3] 劉坤,韓朝智.淺析基于ARM嵌入式開發(fā)的BootLoader設(shè)計(jì)及其實(shí)現(xiàn) [J].電子技術(shù)與軟件工程,2016(2):203-204.

      [4] 張宇,張勤儉,沈海闊,等.基于TMS320DM642的Flash頭文件燒寫法的DSP二級(jí)BootLoader開發(fā) [J].機(jī)電工程,2014,31(3):400-403+408.

      [5] 王琦,黃悅鵬,邢正陽,等.基于CAN總線的Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2015,34(18):14-16.

      [6] NXP Semiconductors.S32R274/S32R264 SeriesData Sheet [EB/OL].(2019-08-18).https://www.nxp.com.cn/docs/en/data-sheet/S32R274DS.pdf.

      [7] NXP Semiconductors.S32R274/S32R264 Series ReferenceManual [EB/OL].(2020-06-26).https://www.nxp.com/webapp/sps/download/preDownload.jsp?render=true.

      作者簡(jiǎn)介:王宇(1975—)男,漢族,四川成都人,副教授,碩士生導(dǎo)師,博士,研究方向:數(shù)字信號(hào)處理、圖像處理;譚硯磊(1996—)男,漢族,山東濰坊人,碩士研究生在讀,研究方向:嵌入式開發(fā)、雷達(dá)算法;鄒雄飛(1979—)男,漢族,四川成都人,講師,博士,研究方向:微波電路、無線通信、電磁場(chǎng)與波;胡哲昊(1997—)男,漢族,浙江金華人,碩士研究生在讀,研究方向:圖像處理。

      丽江市| 临潭县| 天峻县| 宁波市| 武强县| 兴仁县| 商南县| 磐安县| 安达市| 拉孜县| 乃东县| 晋城| 松江区| 广灵县| 伊金霍洛旗| 明水县| 惠州市| 汉寿县| 临澧县| 崇礼县| 纳雍县| 新兴县| 邵阳市| 北票市| 龙山县| 芦山县| 迭部县| 开江县| 横峰县| 珲春市| 驻马店市| 山西省| 泸水县| 雅安市| 聂拉木县| 成都市| 襄汾县| 巴楚县| 平谷区| 新津县| 襄城县|