亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        王宇 譚硯磊 鄒雄飛 胡哲昊

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

        關鍵詞:汽車ECU;Bootloader;S32R274;NXP;S32DS IDE

        中圖分類號:TP311.11? ? ? 文獻標識碼:A 文章編號: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非易失性存儲器中的一段程序加載代碼,每次ECU復位后都會運行Bootloader[1,2]。它會檢查是否有來自通信總線的遠程加載請求,如果有則進入Bootloader模式,建立與程序下載端的應用程序,解析其地址和數(shù)據(jù)代碼,運行NVM(None ValitaleMomory——非易失性存儲器)驅(qū)動程序,將其編程到NVM中,并校驗其完整性,從而完成應用程序更新。如果沒有來自通信總線的遠程程序加載請求,則直接跳轉(zhuǎn)到應用程序復位入口函數(shù),運行應用程序[3-5]。

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

        1? 總體配置方案

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

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

        1.1? 存儲器分配

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

        下文為S32R274芯片存儲器分配:

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

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

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

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

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

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

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

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

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

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

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

        MEMORY? //關鍵詞MEMORY標識系統(tǒng)存儲器分區(qū)

        {

        ……

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

        ……

        }

        SECTIONS

        {

        ……

        .startup : ALIGN(0x400) //啟動段,使用關鍵詞ALING進行1K字節(jié)對齊

        {

        __start = . ;

        *(.startup)

        } >m_text

        ……

        }

        每一個核心都對應一個鏈接文件,在進行不同核心的啟動配置的時候,每個核心的啟動位置須位于不同的boot location,用于確保程序之間的運行不會相互干擾。

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

        externvoid_start(void);

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

        ……

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

        另外兩個非啟動核—Z7_1/2核的啟動地址,由Z4內(nèi)核應用工程main.c中的hw_init()函數(shù)通過初始化MC_ME.CADDR2.R和MC_ME.CADDR3.R兩個硬件寄存器配置[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寄存器

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

        2? 軟件設計

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

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

        “S0290000533332523237345F426F6F746C6F616465725F4170704578616D706C65315F5A342E7372656380;

        S315010000807C2103A67C2FF1207C2903A67C3043A684;

        S70501000000F9”

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

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

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

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

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

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

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

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

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

        3? Bootloader通信過程說明

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

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

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

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

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

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

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

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

        4? 方案驗證

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

        while(1)

        {

        ……

        //測試代碼

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

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

        ……

        }

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

        圖2顯示結果表明,本方案可以得到預期的輸出結果,表明可以通過Bootloader程序成功啟動應用程序。

        5? 結? 論

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

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

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

        參考文獻:

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

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

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

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

        [5] 王琦,黃悅鵬,邢正陽,等.基于CAN總線的Bootloader設計與實現(xiàn)[J].微型機與應用,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.

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

        国产精品久久久久9999赢消| 日本不卡一区二区三区在线观看| 久久99热精品免费观看欧美| 国产成人夜色在线视频观看| 一区二区三区国产内射| 女人被爽到高潮视频免费国产| 激情综合色综合久久综合| 亚洲国产精品尤物yw在线观看| 欧洲亚洲视频免费| 91久久精品一二三区色| 曰批免费视频播放免费| 精品国产av一区二区三区| 久久综合噜噜激激的五月天| 国语精品一区二区三区| 无码av在线a∨天堂毛片| 国产精品不卡免费版在线观看| 久久午夜av一区二区| 高潮抽搐潮喷毛片在线播放| 伊人久久无码中文字幕| 中文字幕av无码一区二区三区电影 | 五月天中文字幕mv在线| 在线观看国产精品日韩av | 亚洲另类激情专区小说婷婷久| 黑丝美女被内射在线观看| 99久久精品国产91| 亚洲国产成人久久三区| 久久香蕉国产精品一区二区三| 99久久精品一区二区三区蜜臀| 热热久久超碰精品中文字幕| 最新国产不卡在线视频| 国产精品_国产精品_k频道w| 国产综合精品久久亚洲| 亚洲av大片在线免费观看| 亚洲av色香蕉一区二区三区 | 亚洲国产成人久久综合三区| 精品一级一片内射播放| 私人毛片免费高清影视院| 久久精品中文字幕极品| 日本国产精品高清在线| 久久精品国产99国产精偷| 精品亚洲aⅴ在线观看|