《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于CAN的數(shù)據(jù)無損代碼更新方法設(shè)計(jì)與應(yīng)用
基于CAN的數(shù)據(jù)無損代碼更新方法設(shè)計(jì)與應(yīng)用
2016年電子技術(shù)應(yīng)用第1期
李 會(huì),王宜懷,王 磊
蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州215000
摘要: 為了提高車載設(shè)備在復(fù)雜工作環(huán)境下固件升級(jí)的穩(wěn)定性及可靠性,深入分析并研究bootloader機(jī)制,以汽車無刷直流電機(jī)控制器為載體,提出了一種基于CAN總線通信方式的數(shù)據(jù)無損代碼更新方法。將上位機(jī)解析后的用戶應(yīng)用程序以鏈表隊(duì)列的方式存儲(chǔ)并根據(jù)數(shù)據(jù)無損的BLC通信協(xié)議通過CAN總線發(fā)送給控制器,控制器結(jié)合數(shù)據(jù)無損的代碼備份和Flash加密機(jī)制實(shí)現(xiàn)用戶代碼的更新和錯(cuò)誤回退等功能。實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)方法具有很強(qiáng)的容錯(cuò)能力,可實(shí)現(xiàn)20 Hz以下的數(shù)據(jù)無損代碼更新,并為其他復(fù)雜工作環(huán)境下的產(chǎn)品提供了一種固件升級(jí)的新思路。
中圖分類號(hào): TP393
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.01.010
中文引用格式: 李會(huì),王宜懷,王磊. 基于CAN的數(shù)據(jù)無損代碼更新方法設(shè)計(jì)與應(yīng)用[J].電子技術(shù)應(yīng)用,2016,42(1):40-43.
英文引用格式: Li Hui,Wang Yihuai,Wang Lei. The design and application of CAN-based code updation with data lossless[J].Application of Electronic Technique,2016,42(1):40-43.
The design and application of CAN-based code updation with data lossless
Li Hui,Wang Yihuai,Wang Lei
School of Computer Science and Technology,Soochow University,Suzhou 215000,China
Abstract: In order to improve the stability and reliability of the vehicle device while firmware upgrading in a complex working environment, a data lossless code updating scheme through CAN bus communication is proposed, based on in-depth analysis and research of the bootloader mechanisms and took automotive brushless DC motor controller as the carrier. This scheme sends the user application, which is parsed by the host machine and stored in the queue list, to the controller through CAN bus using BLC lossless data communication protocol. The controller combines a data lossless code backup with Flash encryption mechanisms to realize code updating and bug rollback. Experimental results show that this scheme has a high fault-tolerant capability, could achieve code updation without data loss at below 20 Hz. Thus, this scheme may provides a new idea for other products’ firmware updation in complex working environment.
Key words : CAN Bus;bootloader technology;data lossless;code updation

0 引言

    針對(duì)汽車電子在復(fù)雜工作環(huán)境下更新固件過程繁瑣、穩(wěn)定性不高、數(shù)據(jù)易丟失、實(shí)時(shí)性欠佳等情況[1],以電磁環(huán)境較復(fù)雜的無刷直流電機(jī)控制器為例,深入剖析Bootloader機(jī)制[2-4],使用自定義的BLC通信協(xié)議,基于面向汽車電子的CAN總線通信方式[5],結(jié)合用戶程序運(yùn)行區(qū)與備份區(qū)交替使用的方式,設(shè)計(jì)了數(shù)據(jù)無損代碼更新方法,實(shí)現(xiàn)了數(shù)據(jù)穩(wěn)定傳輸、快速下載更新等功能。同時(shí)還對(duì)Bootloader代碼區(qū)進(jìn)行保護(hù),并采用MCU加密與后門密鑰驗(yàn)證機(jī)制防止外界對(duì)用戶應(yīng)用程序區(qū)的意外修改,從而增強(qiáng)系統(tǒng)的穩(wěn)定性和可靠性。

1 系統(tǒng)介紹

1.1 CAN節(jié)點(diǎn)硬件構(gòu)成

    CAN模塊用來進(jìn)行數(shù)據(jù)通信,是CAN Bootloader系統(tǒng)的核心模塊之一。KEA128微控制器[6]有一路CAN通道與CAN收發(fā)器MC33901[7]相連,其中,MC33901是面向汽車電子應(yīng)用的高速CAN收發(fā)器,可提供物理接口。CAN節(jié)點(diǎn)硬件組成如圖1所示。

qrs4-t1.gif

    KEA128芯片的MSCAN模塊的時(shí)鐘源為總線時(shí)鐘,大小為24 MHz,波特率為1 000 Kb/s。并采用32位接收過濾器過濾目標(biāo)ID,PC端軟件可以根據(jù)此目標(biāo)ID通過USB-CAN卡將數(shù)據(jù)正確地發(fā)送給目標(biāo)CAN節(jié)點(diǎn)——無刷直流電機(jī)控制器KEA128芯片。本文設(shè)置控制器的ID為0x64。

    為防止數(shù)據(jù)在導(dǎo)線終端被反射導(dǎo)致數(shù)據(jù)丟失,每個(gè)CAN總線需要兩個(gè)終端電阻,分別在主干線的兩個(gè)端點(diǎn),一般為120 Ω,由于USB-CAN卡中已內(nèi)置120 Ω電阻,此處不需要外接。

1.2 系統(tǒng)構(gòu)成

    為了向KEA128微控制器直接編程,本文提出了一種基于汽車CAN總線的數(shù)據(jù)無損的用戶程序備份加密與數(shù)據(jù)無損的BLC通信協(xié)議設(shè)計(jì)方法,實(shí)現(xiàn)了對(duì)無刷直流電機(jī)控制器快捷、穩(wěn)定的代碼更新功能。本文搭建的系統(tǒng)包括無刷直流電機(jī)控制器內(nèi)置的Bootloader、用戶應(yīng)用程序以及PC機(jī)端上位機(jī)軟件。在硬件連接上,采用廣成科技研發(fā)的USB-CAN卡實(shí)現(xiàn)PC機(jī)端與控制器KEA128之間的CAN通信。圖2為各個(gè)硬件之間的數(shù)據(jù)傳輸示意圖。

qrs4-t2.gif

    PC機(jī)端上位機(jī)軟件采用C#語言編程實(shí)現(xiàn),通過對(duì)用戶程序的機(jī)器碼文件逐行遍歷并進(jìn)行解析,去除無效數(shù)據(jù)(例如前綴等),將有效數(shù)據(jù)組成符合CAN總線協(xié)議的數(shù)據(jù)幀發(fā)送給無刷直流電機(jī)控制器內(nèi)置的Bootloader,Bootloader將數(shù)據(jù)幀解析并放在指定的用戶代碼區(qū),等待PC指針跳轉(zhuǎn)執(zhí)行。PC機(jī)與控制器之間通過數(shù)據(jù)無損的BLC通信協(xié)議進(jìn)行數(shù)據(jù)傳輸。

    本設(shè)計(jì)方法在鏈接文件中對(duì)Bootloader和用戶應(yīng)用程序的內(nèi)存進(jìn)行劃分,共劃分出了2個(gè)用戶應(yīng)用程序區(qū),兩者根據(jù)實(shí)際情況分別作為代碼運(yùn)行區(qū)和備份區(qū)而存在,實(shí)現(xiàn)了數(shù)據(jù)無損的用戶程序備份機(jī)制。

    此外,為了防止Bootloader代碼區(qū)和用戶程序區(qū)被意外修改,本設(shè)計(jì)方法設(shè)置了保護(hù)Flash配置域,將整個(gè)Bootloader代碼區(qū)進(jìn)行保護(hù),同時(shí)還采用MCU加密機(jī)制將用戶程序區(qū)加密,只允許用戶通過Bootloader進(jìn)行后臺(tái)密鑰驗(yàn)證的方式進(jìn)行固件更新。

2 上位機(jī)端通信軟件設(shè)計(jì)

2.1 上位機(jī)端與控制芯片端通信幀格式定義

    上位機(jī)通信軟件可逐行遍歷.HEX格式的MCU機(jī)器碼文件。對(duì)于每一條HEX記錄,通信軟件解析出有效數(shù)據(jù)并進(jìn)行組幀,幀格式符合CAN總線協(xié)議的標(biāo)準(zhǔn)數(shù)據(jù)幀。

    由于CAN協(xié)議標(biāo)準(zhǔn)數(shù)據(jù)幀的數(shù)據(jù)段最大長度為8 B,所以一條HEX記錄可能需要幾個(gè)數(shù)據(jù)幀才能發(fā)送完畢。對(duì)于超過8 B的數(shù)據(jù),在仲裁段添加1 B的協(xié)議信息,以表示該條記錄的幀數(shù)和待發(fā)送幀的序號(hào),其高4位表示幀數(shù),低4位表示幀的序號(hào)。具體通信幀格式如表1所示。幀類型值為0x00~0x07,分別代表發(fā)送的幀為命令幀、應(yīng)答幀、地址幀、代碼幀、校驗(yàn)幀、更新幀和結(jié)束幀。只有代碼幀中的幀數(shù)和幀序號(hào)有效,其他幀的幀數(shù)和幀序號(hào)的內(nèi)容無效且均為0xFF。

qrs4-b1.gif

2.2 數(shù)據(jù)幀鏈表隊(duì)列生成方法

    為降低代碼更新的復(fù)雜性,并提高Bootloader對(duì)HEX文件有效數(shù)據(jù)重組的可靠性,上位機(jī)軟件設(shè)計(jì)并實(shí)現(xiàn)一種能夠生成更新代碼管理鏈表隊(duì)列,用于存儲(chǔ)待發(fā)送的數(shù)據(jù)幀。上位機(jī)軟件首先完成解析HEX文件,并將數(shù)據(jù)進(jìn)行組幀,快速建立一個(gè)數(shù)據(jù)幀管理鏈表隊(duì)列,如圖3所示。

qrs4-t3.gif

    上位機(jī)軟件通過CAN總線向無刷直流電機(jī)控制器發(fā)送數(shù)據(jù)幀,直到一條記錄發(fā)送完畢。在控制芯片端將接收的數(shù)據(jù)幀進(jìn)行解析,解析出待存的數(shù)據(jù)和存放Flash的地址。在一條記錄接收完畢后,將此記錄寫入用戶Flash相應(yīng)的地址中,從而簡化Bootloader的邏輯。

3 無刷直流電機(jī)控制器Bootloader設(shè)計(jì)

3.1 鏈接文件中的內(nèi)存設(shè)計(jì)

    無刷直流電機(jī)控制器采用的KEA128微控制器的RAM大小為16 KB,F(xiàn)lash大小為128 KB,在intflash.ld文件中對(duì)Bootloader和用戶應(yīng)用程序的存儲(chǔ)空間進(jìn)行劃分。

    圖4為KEA128無刷直流電機(jī)控制器內(nèi)存劃分示意圖。最左邊為KEA128微控制器的存儲(chǔ)映射表,其中Flash區(qū)又劃分為Bootloader代碼區(qū)、1號(hào)用戶代碼區(qū)和2號(hào)用戶代碼區(qū)。Bootloader代碼區(qū)包括中斷向量表和Bootloader代碼。同樣的,1號(hào)用戶代碼區(qū)和2號(hào)用戶代碼區(qū)包括中斷向量表和用戶代碼。本文利用內(nèi)存中劃分的2個(gè)用戶代碼區(qū)設(shè)計(jì)了一套良好的用戶代碼備份機(jī)制。該機(jī)制輪流采用兩個(gè)用戶代碼區(qū)分別用來備份當(dāng)前運(yùn)行的用戶代碼和準(zhǔn)備更新的用戶代碼。配置信息段用于標(biāo)識(shí)當(dāng)前運(yùn)行的用戶程序處于哪個(gè)用戶代碼區(qū)。假設(shè)當(dāng)前運(yùn)行的用戶程序處于1號(hào)用戶代碼區(qū),當(dāng)用戶準(zhǔn)備更新代碼時(shí),Bootloader自動(dòng)讀取配置信息段,并將待更新的用戶代碼放在2號(hào)用戶代碼區(qū)。此時(shí)1號(hào)用戶代碼區(qū)作為備份存在,2號(hào)用戶代碼區(qū)作為運(yùn)行區(qū)存在。當(dāng)下一次更新代碼時(shí),2號(hào)用戶代碼區(qū)將自動(dòng)作為備份存在,1號(hào)用戶代碼區(qū)數(shù)據(jù)被擦除并存儲(chǔ)待更新的用戶代碼。該機(jī)制減少了Bootloader對(duì)Flash區(qū)的操作,縮短了代碼更新時(shí)間,同時(shí)也保證當(dāng)更新失敗,系統(tǒng)還可以盡快恢復(fù)到之前的功能。

qrs4-t4.gif

3.2 中斷向量表重映射

    中斷向量表是存放中斷服務(wù)程序入口地址或跳轉(zhuǎn)到中斷服務(wù)程序入口地址的一段存儲(chǔ)區(qū)域。由于程序執(zhí)行的第一條指令地址是以中斷向量的形式給出,因此重映射中斷向量表是設(shè)計(jì)Bootloader的第一步。圖4對(duì)控制器的內(nèi)存進(jìn)行了劃分,默認(rèn)情況下,Bootloader的中斷向量表處于0x0000_0000~0x0000_000C地址。KEA128微控制器上電啟動(dòng)后,將運(yùn)行Bootloader代碼并檢測(cè)是否需要進(jìn)行代碼更新操作。若檢測(cè)到代碼更新命令,Bootloader將接收新的應(yīng)用程序代碼寫入相應(yīng)的用戶代碼區(qū),禁止中斷;然后初始化用戶程序區(qū)堆棧指針,將中斷向量表重新定位到用戶應(yīng)用程序區(qū)中的中斷向量表所在位置,并將此地址值賦給中斷向量表起始地址寄存器SCB->VTOR;最后PC指針跳轉(zhuǎn)到相應(yīng)用戶代碼區(qū)的入口地址處。整個(gè)執(zhí)行流程如圖5所示。

qrs4-t5.gif

3.3 Bootloader代碼區(qū)保護(hù)與MCU加密機(jī)制設(shè)計(jì)

    為了防止用戶應(yīng)用程序?qū)ootloader代碼區(qū)的意外修改,通過保護(hù)Flash配置域?qū)⒄麄€(gè)Bootloader代碼區(qū)進(jìn)行保護(hù)。在Bootloader代碼區(qū)中,F(xiàn)lash配置域地址位于0x00000400~0x00000410。Flash保護(hù)分為低地址域和高地址域,而Bootloader代碼區(qū)中的Flash配置域位于低地址保護(hù)域內(nèi)。配置FPLS[1:0]=11,就可以將整個(gè)16 KB大小的Bootloader代碼區(qū)保護(hù)起來。

    同時(shí),為了保護(hù)無刷直流電機(jī)控制器能夠正常運(yùn)行,應(yīng)禁止用戶通過寫入器對(duì)MCU進(jìn)行二次寫入,只允許用戶通過控制器內(nèi)置Bootloader來更新程序。通過設(shè)置KEA128后門秘鑰(BackdoorKey)對(duì)KEA128整個(gè)芯片進(jìn)行加密。而Bootloader會(huì)內(nèi)置密鑰,可以完成對(duì)用戶代碼區(qū)的下載及更新。

    Bootloader借助內(nèi)置的后門密鑰與存儲(chǔ)在Flash配置域的8 B后門密鑰的內(nèi)容進(jìn)行比較并匹配,從而獲得對(duì)KEA128的訪問權(quán)限并臨時(shí)解鎖芯片。qrs4-t6.gif

4 數(shù)據(jù)無損的BLC通信協(xié)議

    BLC通信協(xié)議是為了保證上位機(jī)下發(fā)的.HEX文件的有效數(shù)據(jù)可被無刷電機(jī)控制器無損地接收和可靠處理。主要通過握手機(jī)制來實(shí)現(xiàn),具體的通訊鏈路機(jī)制如圖6所示。

    首先,上位機(jī)軟件取得HEX有效數(shù)據(jù)后,循環(huán)向控制器發(fā)送命令幀請(qǐng)求開始發(fā)送數(shù)據(jù),直到控制器向上位機(jī)反饋“同意接收”的應(yīng)答幀時(shí)才停止下發(fā)請(qǐng)求命令幀;上位機(jī)在收到應(yīng)答幀后,通過CAN總線將數(shù)據(jù)幀發(fā)送給下位機(jī),在發(fā)送完HEX數(shù)據(jù)后,上位機(jī)將發(fā)送結(jié)束幀通知控制器HEX數(shù)據(jù)已發(fā)送完畢,無刷電機(jī)控制器將回發(fā)應(yīng)答幀通知上位機(jī)數(shù)據(jù)“接收成功”,到此上位機(jī)可以停止HEX數(shù)據(jù)的傳輸。之后控制器通過執(zhí)行Flash寫操作將接收到的HEX數(shù)據(jù)寫到相應(yīng)用戶代碼區(qū)的指定地址,完成寫入后再次向上位機(jī)發(fā)送應(yīng)答幀命令表示已“完成HEX數(shù)據(jù)的寫入”,上位機(jī)收到后將下發(fā)結(jié)束幀請(qǐng)求結(jié)束此次傳輸過程,最后控制器將回發(fā)應(yīng)答幀“關(guān)閉此次通信過程”。

    此外,本文還在BLC協(xié)議中設(shè)計(jì)了超時(shí)重傳機(jī)制,BLC協(xié)議的發(fā)送方在0.5 s內(nèi)沒有收到確認(rèn)就要重傳已發(fā)送的數(shù)據(jù)。在整個(gè)傳輸過程中,凡是已經(jīng)發(fā)送過的數(shù)據(jù),在未收到確認(rèn)之前都必須暫時(shí)保留,以便超時(shí)重傳時(shí)使用。如果發(fā)送方一連重傳3次仍無響應(yīng),發(fā)送方就認(rèn)為接收方出了故障,關(guān)閉整個(gè)連接。

5 測(cè)試結(jié)果分析

    對(duì)本文設(shè)計(jì)的數(shù)據(jù)無損的代碼更新方法進(jìn)行了時(shí)間開銷的測(cè)試實(shí)驗(yàn)。在控制器端指定引腳PTI2為高電平,當(dāng)Bootloader開始時(shí)將其拉低,結(jié)束時(shí)再次將其改為高電平,用示波器觀察PTI2引腳低電平持續(xù)的時(shí)間即為所需要的時(shí)間。以16 KB的HEX文件為例。在一天不同的時(shí)間段測(cè)試的數(shù)據(jù)如表2所示。每個(gè)數(shù)據(jù)均為當(dāng)前時(shí)間測(cè)試的10次數(shù)據(jù)的平均值。

qrs4-b2.gif

    同時(shí),也對(duì)系統(tǒng)的可靠性進(jìn)行了測(cè)試,部分測(cè)試結(jié)果如表3所示。

qrs4-b3.gif

    綜上所述,所設(shè)計(jì)的數(shù)據(jù)無損代碼更新方法運(yùn)行穩(wěn)定,時(shí)間開銷短、通信可靠且能夠有效改善代碼更新過程中下載失敗的問題。

6 結(jié)論

    本文設(shè)計(jì)的數(shù)據(jù)無損代碼更新方法提供了高可靠性的代碼更新機(jī)制,極大地方便了研發(fā)人員對(duì)設(shè)備的測(cè)試及產(chǎn)品升級(jí)。目前,此系統(tǒng)已成功應(yīng)用于蘇州華祥信息科技有限公司的無刷直流電機(jī)控制系統(tǒng)中,經(jīng)實(shí)際生產(chǎn)測(cè)試表明,本系統(tǒng)穩(wěn)定可靠,可成功實(shí)現(xiàn)20 Hz以下數(shù)據(jù)無損的代碼更新。同時(shí),本設(shè)計(jì)方法也為圖2中其他CAN節(jié)點(diǎn)的代碼更新提供了一種新的思路。

參考文獻(xiàn)

[1] 蔣建春,王正樹.基于軟件觸發(fā)的在應(yīng)用編程在線升級(jí)技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2012,32(3):121-123.

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

[3] 陳曦,鄭貴林.基于自編程功能的MCU Bootloader設(shè)計(jì)[J].電子設(shè)計(jì)工程,2010(18):65-68.

[4] 劉矗,羅峰.基于飛思卡爾微控制器的CAN Bootloader的實(shí)現(xiàn)與應(yīng)用[J].蘇州大學(xué)學(xué)報(bào):工學(xué)版,2010,30(2):57-61.

[5] 司寶豐,孟鵬花.基于CAN總線的Bootloader設(shè)計(jì)[J].儀表技術(shù),2010(3):30-33.

[6] Freescale.KEA128 Sub-Family Reference Manual Rev 2[DB/OL].2014.http://www.freescale.com.

[7] Freescale.MC33901:High Speed CAN Transceiver Rev 1[DB/OL].2013.http://www.freescale.com.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 成Av免费大片黄在线观看| 波多野结衣电车痴汉| 国产白领丝袜办公室在线视频| 一区二区三区四区无限乱码| 日韩精品无码一区二区三区AV | 亚洲欧美成人一区二区在线电影| 色天天天综合色天天碰| 国产真实迷j在线播放| chinese乱子伦xxxx视频播放 | 动漫人物差差差动漫网站| 黄网址在线观看| 国产精品视频免费一区二区| 一本大道香蕉大无线视频| 日本精品啪啪一区二区三区| 亚洲国产精品一区二区九九| 百合多种道具坐到哭hh| 国产乱人伦偷精精品视频| 亚洲欧美日韩国产vr在线观| 在线观看噜噜噜私人影院| 三级精品视频在线播放| 日韩aaa电影| 亚洲人交性视频| 浪荡女天天不停挨cao日常视频| 四虎8848精品永久在线观看| 黄色a三级免费看| 国产精品区免费视频| 99爱在线精品免费观看| 性猛交xxxxx按摩欧美| 久久久无码精品亚洲日韩蜜桃| 欧洲高清一区二区三区试看| 亚洲精品www| 看大片全色黄大色黄| 四虎影视紧急入口地址大全| 麻豆精品传媒一二三区在线视频| 国产精品成熟老女人视频| 99国产成+人+综合+亚洲欧美| 少妇大胆瓣开下部自慰| 中文字幕视频免费| 日本边添边摸边做边爱边视频| 亚洲av综合色区无码专区桃色 | 热久久这里是精品6免费观看|