国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種用于汽車電控單元CAN Bootloader的設(shè)計(jì)與實(shí)現(xiàn)

2016-11-10 07:38:29陳彤黃立梅
汽車實(shí)用技術(shù) 2016年9期
關(guān)鍵詞:下位電控上位

陳彤,黃立梅

(陜西法士特汽車傳動(dòng)工程研究院,陜西 西安 710119)

汽車電子

一種用于汽車電控單元CAN Bootloader的設(shè)計(jì)與實(shí)現(xiàn)

陳彤,黃立梅

(陜西法士特汽車傳動(dòng)工程研究院,陜西 西安 710119)

∶傳統(tǒng)汽車電控單元對程序的燒寫一般采用BDM調(diào)試接口實(shí)現(xiàn),該方法不僅影響電控單元應(yīng)用程序的開發(fā)效率,而且會(huì)給汽車電控單元后期的升級維護(hù)帶來不便。使用嵌入式啟動(dòng)引導(dǎo)程序(即Bootloader),能夠較好的解決上述問題。本文設(shè)計(jì)并實(shí)現(xiàn)了一種應(yīng)用于汽車電控單元的基于CAN通信的 Bootloader。通過實(shí)際應(yīng)用和測試,結(jié)果表明該Bootloader能夠正確引導(dǎo)程序運(yùn)行,準(zhǔn)確、方便地為控制器下載應(yīng)用程序。

∶汽車電控單元;Bootloader;CAN總線;Labview

10.16638/j.cnki.1671-7988.2016.09.055

CLC NO.: U463.61Document Code: AArticle ID: 1671-7988 (2016)09-156-05

1、技術(shù)背景

在汽車電控單元的開發(fā)過程中需要頻繁地進(jìn)行程序燒寫工作,傳統(tǒng)的燒寫方式一般是利用芯片專用下載器通過BDM調(diào)試接口下載程序,該方式的下載速度較慢,而且在汽車電控單元的后期維護(hù)中,如果需要升級應(yīng)用程序,就需要從整車上將電控單元拆卸下來,為電控單元的維護(hù)和調(diào)試帶來極大的不便。對于已經(jīng)投入使用的汽車電控單元來說,急需一種方便快捷的程序升級方法,從而提高維護(hù)人員的工作效率。Bootloader作為應(yīng)用程序運(yùn)行之前的一段程序,主要完成應(yīng)用程序的啟動(dòng)引導(dǎo)和更新,而CAN總線通信在汽車電子領(lǐng)域的廣泛應(yīng)用,使得Bootloader可以直接通過CAN總線進(jìn)行程序升級。本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于CAN總線的Bootloader,通過自定義的數(shù)據(jù)傳輸協(xié)議與上位機(jī)進(jìn)行通信并完成程序下載。

2、Bootloader簡介

Bootloader是微處理器芯片上電后最先運(yùn)行的一段代碼,它會(huì)首先對硬件設(shè)備進(jìn)行初始化,包括看門狗、時(shí)鐘、串口、CAN接口等,同時(shí)會(huì)為相關(guān)的寄存器賦值,設(shè)置內(nèi)核啟動(dòng)參數(shù)。初始化完成后,則進(jìn)入循環(huán)等待上位機(jī)命令,并根據(jù)命令實(shí)現(xiàn)相應(yīng)功能。

由于嵌入式系統(tǒng)的資源非常有限,特別是存儲(chǔ)空間,因此,用于汽車電控單元的Bootloader不需要集成太多其他的功能,而是實(shí)現(xiàn)兩個(gè)最基本的功能:啟動(dòng)引導(dǎo)功能和程序下載功能。對于CAN Bootloader來說,當(dāng)系統(tǒng)上電完成一系列初始化工作后,Bootloader進(jìn)入CAN通信循環(huán)等待接收命令,當(dāng)接收到啟動(dòng)命令時(shí),它直接將電控單元FLASH中的應(yīng)用程序代碼加載到系統(tǒng)內(nèi)存RAM中,并跳轉(zhuǎn)到應(yīng)用程序入口開始運(yùn)行;當(dāng)Bootloader接收到下載命令時(shí),它會(huì)通過CAN總線從上位機(jī)下載應(yīng)用程序代碼并燒寫到FLASH中存儲(chǔ)起來。如果在CAN通信循環(huán)中等待命令超時(shí),則直接進(jìn)入啟動(dòng)引導(dǎo)模式運(yùn)行應(yīng)用程序。不同的處理器芯片,其實(shí)現(xiàn)Bootloader的方式不同,但基本思路一致。

本文使用英飛凌系列芯片作為汽車電控單元的MCU,屬于典型的汽車級微控制器,滿足Bootloader通過CAN總線更新程序的要求。

3、CAN Bootloader總體設(shè)計(jì)

3.1Bootloader程序下載方案

通過CAN總線實(shí)現(xiàn)程序下載,是CAN Bootloader相對于汽車電控單元傳統(tǒng)程序下載方式的主要優(yōu)勢,本文所使用英飛凌系列芯片對FLASH存儲(chǔ)區(qū)的操作一般以頁為單位,基于這一特性,并結(jié)合CAN總線通信要求,確定了CAN Bootloader的程序下載方案如下:

1)汽車電控單元上電啟動(dòng)Bootloader并進(jìn)入CAN通信循環(huán)等待上位機(jī)命令,若在等待延時(shí)期間收到來自上位機(jī)的程序下載命令,則開始與上位機(jī)進(jìn)行握手操作,握手成功后,向上位機(jī)發(fā)送下載確認(rèn)請求并開始等待上位機(jī)的數(shù)據(jù)幀。

2)上位機(jī)接收到下載確認(rèn)請求后,開始解析應(yīng)用程序代碼,并以128字節(jié)為單位將目標(biāo)代碼分頁,每解析完一頁數(shù)據(jù),上位機(jī)進(jìn)入CAN發(fā)送循環(huán),將頁首地址及頁數(shù)據(jù)循環(huán)發(fā)送至下位機(jī)。

3)下位機(jī)只有接收到一頁完整的數(shù)據(jù)并完成數(shù)據(jù)校驗(yàn)后,才會(huì)將所接收數(shù)據(jù)以頁的形式燒寫進(jìn)FLASH存儲(chǔ)區(qū),并向上位機(jī)發(fā)送下載確認(rèn)請求提示其繼續(xù)發(fā)送下一頁數(shù)據(jù)。

4)上位機(jī)將應(yīng)用程序代碼解析完畢,并收到下位機(jī)的確認(rèn)請求后,向下位機(jī)發(fā)送出下載結(jié)束命令,通知其復(fù)位重啟。

3.2自定義CAN通信協(xié)議及數(shù)據(jù)校驗(yàn)

本文在CAN通信過程中,全部使用擴(kuò)展ID。為方便測試,自定義了上位機(jī)與下位機(jī)的通信ID,具體定義如表1所示。

表1 CAN通信ID定義

數(shù)據(jù)傳輸過程中的校驗(yàn)則通過累加運(yùn)算實(shí)現(xiàn),上位機(jī)解析代碼是,將每頁解析出的128字節(jié)的數(shù)據(jù)進(jìn)行累加,并取運(yùn)算結(jié)果的低四字節(jié)作為數(shù)據(jù)校驗(yàn)碼發(fā)送給下位機(jī),下位機(jī)在接收數(shù)據(jù)的過程中對接收到的數(shù)據(jù)按字節(jié)進(jìn)行累加,并將計(jì)算結(jié)果的低四字節(jié)與接收到的數(shù)據(jù)校驗(yàn)碼進(jìn)行比較,從而判斷程序下載過程中的數(shù)據(jù)傳輸是否可靠。

4、CAN Bootloader的下位機(jī)實(shí)現(xiàn)

4.1Bootloader存儲(chǔ)區(qū)空間劃分

由于嵌入式芯片工作模式的限制,上電后,芯片一般都會(huì)在FLASH存儲(chǔ)區(qū)首地址處尋找程序代碼并執(zhí)行。因此,我們不得不將應(yīng)用程序按照約定放在芯片F(xiàn)LASH的首位地址處,如果要在Flash中安排了兩個(gè)應(yīng)用程序,則無法啟用第二個(gè)程序。

Bootloader啟動(dòng)引導(dǎo)功能的目的就是為了在其完成自身本職工作后,將硬件的管理權(quán)釋放,并且將MCU的各種資源移交給應(yīng)用程序,并為應(yīng)用程序的運(yùn)行提供必要的支持。

因此,使用Bootloader的嵌入式系統(tǒng),會(huì)在FLASH的起始段為Bootloader專門開辟一個(gè)較小的存儲(chǔ)空間,Bootloader代碼作為芯片上電后需要最先運(yùn)行的程序,其中斷向量表首地址會(huì)與FLASH存儲(chǔ)區(qū)首地址一致,而應(yīng)用程序作為被引導(dǎo)的代碼,需要配置在剩余空間內(nèi)。本文所使用英飛凌系列芯片的FLASH存儲(chǔ)空間分配如表2所示。

表2 存儲(chǔ)空間分配表

4.2Bootloader存儲(chǔ)區(qū)讀寫、擦除功能實(shí)現(xiàn)

對存儲(chǔ)區(qū)的讀取、寫入、擦除功能,是實(shí)現(xiàn)Bootloader程序下載功能的基礎(chǔ)。本文所使用英飛凌系列芯片的內(nèi)核中有一個(gè)特殊單元IMB,由該單元管理著MCU對Flash存儲(chǔ)區(qū)的擦除和讀寫工作。IMB在MCU中預(yù)先定義好了一些列的控制命令,如表3所示。

表3 IMB控制命令表

Bootloader程序想要實(shí)現(xiàn)對FLASH存儲(chǔ)區(qū)的讀寫、擦除等操作,必須嚴(yán)格按照IMB預(yù)先定義的控制命令和命令序列來進(jìn)行。每條控制命令反映到代碼上,就是對特性地址的寄存器賦予特定的值,例如Reset to Read命令的實(shí)現(xiàn)就是對F0寄存器賦值A(chǔ)A。

4.3下位機(jī)Bootloader流程

下位機(jī)CAN Bootloader程序的整體流程圖如圖1所示。

圖1 下位機(jī)Bootloader整體流程圖

下位機(jī)Bootloader對CAN消息的收發(fā)全部都在CAN中斷中完成,當(dāng)程序運(yùn)行至CAN消息接收循環(huán)后,一旦從總線上收到CAN消息,就立即觸發(fā)CAN中斷并進(jìn)入中斷服務(wù)程序。中斷服務(wù)程序判斷接收ID是否為0x18FF1111,并判斷內(nèi)容是否為程序下載命令,若是,則開始與上位機(jī)握手并準(zhǔn)備下載應(yīng)用程序。

握手成功后,中斷服務(wù)程序會(huì)判斷接收ID是否為0x18FF5555,并對接收到的幀進(jìn)行數(shù)據(jù)校驗(yàn)。當(dāng)一頁的數(shù)據(jù)幀全部接收完成后,則擦除FLASH中相應(yīng)的頁空間并寫入一頁數(shù)據(jù)。通過CAN總線將全部目標(biāo)文件下載到芯片F(xiàn)LASH后,Bootloader會(huì)讓芯片上電復(fù)位,以加載運(yùn)行新的應(yīng)用程序。

5、Bootloader上位機(jī)通信界面設(shè)計(jì)與實(shí)現(xiàn)

5.1設(shè)計(jì)要求

上位機(jī)通信界面主要用于配合下位機(jī)Bootloader讀取并下載升級程序代碼,對于本文所使用英飛凌系列芯片來說,就是HEX文件。通過英飛凌的集成開發(fā)環(huán)境對應(yīng)用程序進(jìn)行編譯鏈接后,就能夠生成下載所需的HEX文件。由于Labview在圖形化界面編程方面較為簡便,且在CAN通信上有相應(yīng)的庫函數(shù)作支持,所以本文使用Labview軟件設(shè)計(jì)Bootloader的上位機(jī)通信界面。

上位機(jī)通信界面具體要求如下:

1)可以根據(jù)實(shí)際需要設(shè)置波特率、發(fā)送幀類型、發(fā)送ID號(hào)等。

2)可以打開并初始化所選的CAN通道;能夠通過文件路徑打開應(yīng)用程序HEX代碼文件,并將HEX文件解析并轉(zhuǎn)換為Bootloader可識(shí)別的數(shù)據(jù)格式,循環(huán)發(fā)送給下位機(jī)。

3)接收和發(fā)送的CAN數(shù)據(jù)幀及相關(guān)信息能夠顯示在通信界面上,下位機(jī)與上位機(jī)之間的通信狀態(tài)也能夠以指示燈的形式體現(xiàn)出來。

5.2HEX文件解析模塊設(shè)計(jì)

HEX文件可以通過集成開發(fā)環(huán)境直接生成,它以行為單位,每一行具有固定的格式,如表4所示。

表4 HEX格式定義

數(shù)據(jù)記錄類型的具體定義如表5所示。

表5 HEX文件數(shù)據(jù)記錄類型定義

因此,HEX文件解析模塊需要以行為單位對文件進(jìn)行讀取,并將讀取到的字符串轉(zhuǎn)換為16進(jìn)制數(shù)據(jù),根據(jù)不同的數(shù)據(jù)記錄類型進(jìn)行相應(yīng)的處理,最終將每頁數(shù)據(jù)及其頁首地址解析出來,具體流程如圖2所示。

圖2 HEX文件解析流程圖

其中,對于實(shí)際數(shù)據(jù)類型的數(shù)據(jù)記錄行的處理較為繁瑣,主要是因?yàn)樯傻腍EX文件其每行的地址偏移量并不一定與128字節(jié)的頁地址匹配,頁首地址有可能出現(xiàn)在兩行地址偏移量之間,因此當(dāng)判斷出某行數(shù)據(jù)記錄中包含頁首地址是,需要根據(jù)相鄰兩行數(shù)據(jù)記錄的地址偏移量計(jì)算出頁首地址,并對該行數(shù)據(jù)進(jìn)行分割,將其添加到不同的頁數(shù)組中。

5.3CAN通信收發(fā)模塊設(shè)計(jì)

利用Labview庫函數(shù),可以較便捷地實(shí)現(xiàn)上位機(jī)通信界面與下位機(jī)間的CAN通信。當(dāng)上位機(jī)通信界面根據(jù)所設(shè)置的通道參數(shù)與下位機(jī)建立CAN通信連接后,軟件會(huì)進(jìn)入兩個(gè)并列的循環(huán):CAN接收循環(huán)和CAN發(fā)送循環(huán),兩個(gè)循環(huán)并發(fā)運(yùn)行,從而實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的實(shí)時(shí)通信。CAN接收循環(huán)流程圖如圖3所示。

圖3 上位機(jī)CAN接收循環(huán)流程圖

CAN接收循環(huán)在收到下位機(jī)的下載確認(rèn)信息后會(huì)通過局部變量的方式通知CAN發(fā)送循環(huán)開始發(fā)送下一頁數(shù)據(jù)。CAN發(fā)送循環(huán)流程圖如圖4所示。

CAN發(fā)送循環(huán)一開始會(huì)直接向下位機(jī)發(fā)送程序下載命令,在和下位機(jī)成功握手后,進(jìn)入真正的數(shù)據(jù)發(fā)送循環(huán),以頁為單位不斷向下位機(jī)發(fā)送數(shù)據(jù)幀,直到目標(biāo)HEX文件全部解析并被下位機(jī)下載完成。

圖4 上位機(jī)CAN發(fā)送循環(huán)流程圖

5.4運(yùn)行界面

通過Labview軟件開發(fā)出來的上位機(jī)通信界面如圖5所示。

圖5 上位機(jī)運(yùn)行界面

設(shè)置好CAN通道號(hào)、波特率、ID類型、發(fā)送ID號(hào)等參數(shù),并在文件路徑下選擇目標(biāo)HEX文件,點(diǎn)擊get on bus讓上位機(jī)與下位機(jī)建立通信連接,通過CAN總線不斷向下位機(jī)發(fā)送程序下載命令,并等待來自下位機(jī)的消息,同時(shí)可以在顯示框中觀察到上位機(jī)接收到的CAN數(shù)據(jù)。如果上位機(jī)與下位機(jī)握手成功,則逐頁發(fā)送解析好的數(shù)據(jù),發(fā)完后自動(dòng)停止,也可以手動(dòng)通過get on bus強(qiáng)制通信中斷。如果通信過程中出現(xiàn)錯(cuò)誤,則會(huì)在錯(cuò)誤對話框中顯示出錯(cuò)誤信息。

6、測試方法

通過上位機(jī)通信界面程序可以對下位機(jī)內(nèi)的Bootloader進(jìn)行功能測試,具體測試方法如下:

1)準(zhǔn)備安裝有上位機(jī)通信界面的電腦一臺(tái),已刷寫號(hào)Bootloader的汽車電控單元一塊,兩者通過CAN總線建立通信,并在上位機(jī)監(jiān)測CAN通信內(nèi)容。

2)下位機(jī)電控單元上電的同時(shí),上位機(jī)啟動(dòng)通信界面并登上CAN總線向下位機(jī)發(fā)送握手請求。

3)上位機(jī)與下位機(jī)建立連接后,將預(yù)先編寫好的能夠發(fā)出特定報(bào)文的簡單例程添加的通信界面上。

4)開始向下位機(jī)下載例程,下載成功后,下位機(jī)重新上電并等待延時(shí),啟動(dòng)引導(dǎo)例程運(yùn)行。

5)在上位機(jī)監(jiān)測CAN總線報(bào)文,判斷下載到下位機(jī)的例程是否正確。

6)重啟下位機(jī)電控單元,并下載一個(gè)與之前不同的例程。

7)例程下載完成后,下位機(jī)重新上電,在上位機(jī)監(jiān)測CAN總線報(bào)文,判斷下載到下位機(jī)的例程是否已被更換。

8)若上述工作全部成功,則證明Bootloader功能正常。

7、結(jié)論

將本文所設(shè)計(jì)的CAN Bootloader編譯鏈接生成HEX文件并下載至汽車電控單元中,打開上位機(jī)通信界面選擇應(yīng)用程序HEX文件進(jìn)行測試。經(jīng)測試,目標(biāo)文件能夠順利地下載到下位機(jī)FLASH中,重新上電后也能夠通過Bootloader自動(dòng)加載運(yùn)行。

一個(gè)設(shè)計(jì)良好的Bootloader能夠加快汽車電控單元應(yīng)用程序的開發(fā),更能夠?yàn)楹笃诘木S護(hù)和升級工作提供便捷。本文設(shè)計(jì)并實(shí)現(xiàn)了一種用于汽車電控單元的CAN Bootloader,根據(jù)自定義的通信協(xié)議,通過CAN總線實(shí)現(xiàn)應(yīng)用程序從上位機(jī)到汽車電控單元的下載。經(jīng)過測試,該Bootloader能夠正確、可靠地幫助芯片下載應(yīng)用程序,穩(wěn)定地擦寫FLASH存儲(chǔ)區(qū),快速、準(zhǔn)確地實(shí)現(xiàn)對汽車電控單元的軟件更新。

[1] 王亞剛.嵌入式Bootloader機(jī)制的分析和移植[J].計(jì)算機(jī)工程,2010,36(6):267-269.

[2] 游侃民.嵌入式系統(tǒng)網(wǎng)絡(luò)化BOOTLOADER的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.

[3] 羅峰,孫澤昌.汽車CAN總線原理.設(shè)計(jì)與應(yīng)用 [M].北京:電子工業(yè)出版社.2010: 242-265.

[3] 鄒東升,佘龍華. 一種基于CAN總線的程序調(diào)試技術(shù)研究 [J].計(jì)算機(jī)技術(shù)與應(yīng)用, 2008,26(5):116-117.

[4] 羅勝耘,路安江. 串行Flash啟動(dòng)Bootloader的設(shè)計(jì)與實(shí)現(xiàn) [J].化工自動(dòng)化及儀表, 2010,37(8):90-93.

The Design and Implementation of a CAN Bootloader in Automotive ECU

Chen Tong, Huang Limei
(Shaanxi Fast Gear Co., Ltd, Shaanxi Xi'an 710119)

The traditional automotive ECU usually uses BDM debug interface for programming, This method influences the efficiency of developing the ECU, and also makes it difficult for update and maintenance. Using the bootloader for ECU will solve these problems. This paper, presents the design and implementation of a bootloader for automotive ECU, which based on CAN communication. This bootloader is proved that it can boot correctly and program the ECU quickly, through the test and practical application.

ECU; Bootloader; CAN; Labview

∶U463.61

∶A

∶1671-7988 (2016)09-156-05

陳彤(1988-),男,工程師,就職于陜西法士特汽車傳動(dòng)工程研究院,從事汽車電器。

猜你喜歡
下位電控上位
上海電控所: 三心同繪創(chuàng)新景 電控電抗競爭輝
發(fā)射機(jī)房監(jiān)控系統(tǒng)之下位機(jī)
特斯拉 風(fēng)云之老阿姨上位
車迷(2018年12期)2018-07-26 00:42:22
“三扶”齊上位 決戰(zhàn)必打贏
基于ZigBee和VC上位機(jī)的教室智能監(jiān)測管理系統(tǒng)
景洪電廠監(jiān)控系統(tǒng)下位機(jī)數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
圍觀黨“下位”,吐槽帝“登基”
以新思路促推現(xiàn)代農(nóng)業(yè)上位
CAN總線并發(fā)通信時(shí)下位機(jī)應(yīng)用軟件設(shè)計(jì)
電控發(fā)動(dòng)機(jī)點(diǎn)火控制系統(tǒng)的原理與診斷
彭州市| 资溪县| 太原市| 保定市| 宣威市| 金坛市| 富宁县| 屏边| 神农架林区| 安徽省| 格尔木市| 汪清县| 丹巴县| 壤塘县| 屯门区| 双鸭山市| 随州市| 北流市| 从化市| 孝昌县| 石楼县| 平泉县| 南投县| 民乐县| 新乐市| 石嘴山市| 札达县| 平舆县| 沁水县| 巴塘县| 邯郸市| 禹城市| 三河市| 南部县| 教育| 镇江市| 奉新县| 犍为县| 黔江区| 汶上县| 黄梅县|