本文采用德州儀器(TI)公司的TMS320F28069系列DSP芯片,闡述了基于CAN診斷通信的bootloader的原理,設(shè)計(jì)與實(shí)現(xiàn)。采用遠(yuǎn)程下發(fā)的方法,將電機(jī)控制器程序通過(guò)車(chē)載信息終端下發(fā)至電機(jī)控制器ECU中,可實(shí)現(xiàn)電機(jī)控制器ECU控制策略與控制參數(shù)的實(shí)時(shí)更新,提高產(chǎn)品開(kāi)發(fā)效率,提升用戶體驗(yàn)。
【關(guān)鍵詞】bootloader ECU更新
1 前言
當(dāng)前更新軟件程序的主要方式是通過(guò)本地電腦,SD卡,USB,或者串行總線更新,這樣的更新方式效率較低,而且對(duì)于整車(chē)廠來(lái)說(shuō)成本較高,采用通過(guò)服務(wù)器的遠(yuǎn)程下發(fā),然后由車(chē)載終端模塊實(shí)現(xiàn)為各個(gè)ECU的轉(zhuǎn)發(fā)更新。整個(gè)遠(yuǎn)程更新系統(tǒng)比較龐大也比較復(fù)雜,涉及的環(huán)節(jié)比較多,容易受到電磁干擾或者軟件故障的影響,因此Bootloader的穩(wěn)定性是整個(gè)更新過(guò)程中首要的因素。
本文采用基于CAN的通信方式完成了電機(jī)控制器的程序更新,采用基于ISO15765的國(guó)際通用CAN診斷協(xié)議完成數(shù)據(jù)傳輸,設(shè)計(jì)并實(shí)現(xiàn)了基于TMS320F28069系列DSP電機(jī)控制器的輕量化bootloader,并通過(guò)結(jié)合車(chē)載信息終端可實(shí)現(xiàn)控制參數(shù)的遠(yuǎn)程標(biāo)定與控制算法的實(shí)時(shí)更新。
2 總體方案設(shè)計(jì)
2.1 系統(tǒng)框圖
本系統(tǒng)組成主要由儀表,車(chē)輛信息服務(wù)器,車(chē)載信息終端和電機(jī)控制系統(tǒng)四部分組成,如圖1所示。儀表主要是顯示部分,負(fù)責(zé)車(chē)機(jī)與駕駛員的信息交互,通過(guò)儀表將程序下載過(guò)程中的下載進(jìn)度或當(dāng)前條件是否滿足程序下載的提示顯示,引導(dǎo)用戶進(jìn)行升級(jí)操作。車(chē)輛信息服務(wù)器主要由可聯(lián)網(wǎng)的通訊計(jì)算機(jī)和4G移動(dòng)通訊基站組成,主要實(shí)現(xiàn)車(chē)載模塊數(shù)據(jù)參數(shù)的存儲(chǔ)、上傳、下發(fā)。車(chē)載信息終端主要由4G通訊模塊,主控模塊,存儲(chǔ)模塊三部分構(gòu)成,主要實(shí)現(xiàn)通過(guò)車(chē)載CAN總線采集車(chē)內(nèi)各個(gè)ECU數(shù)據(jù)參數(shù),并將采集的數(shù)據(jù)上傳到服務(wù)器中,方便服務(wù)器下發(fā),或者將待更新ECU程序從服務(wù)器端下載,并將下載的程序燒寫(xiě)到各個(gè)ECU模塊。電機(jī)控制系統(tǒng)主要由電機(jī)控制器ECU和電機(jī)組成,實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)動(dòng)的控制。
2.2 Bootloader工作原理
Bootloader又叫引導(dǎo)加載程序,是嵌入式系統(tǒng)上電復(fù)位首先加載的一部分程序,用于實(shí)現(xiàn)嵌入式系統(tǒng)應(yīng)用程序或外設(shè)驅(qū)動(dòng)的加載或應(yīng)用程序的下載。Bootloader通??梢苑譃閮煞N模式:加載模式與下載模式。嵌入式系統(tǒng)上電后,bootloader會(huì)進(jìn)入CAN通信循環(huán)檢測(cè),通常會(huì)設(shè)置一部分等待時(shí)間,等待編程儀器(通常稱作上位機(jī))發(fā)來(lái)的編程指令,在等待時(shí)間中如果接收到上位機(jī)發(fā)來(lái)的指令,ECU嘗試與上位機(jī)通過(guò)握手操作建立連接,建立連接以后,ECU向上位機(jī)發(fā)送下載確認(rèn)請(qǐng)求,并開(kāi)始等待上位機(jī)下發(fā)數(shù)據(jù)幀。上位機(jī)接收到ECU的下載確認(rèn)請(qǐng)求后,開(kāi)始執(zhí)行解析應(yīng)用程序代碼,一頁(yè)數(shù)據(jù)一頁(yè)數(shù)據(jù)的進(jìn)入CAN發(fā)送循環(huán),為了讓ECU接收到完整的數(shù)據(jù),上位機(jī)將頁(yè)首地址及頁(yè)數(shù)據(jù)循環(huán)發(fā)送至ECU。為了保證數(shù)據(jù)的準(zhǔn)確性, ECU只有接收到一頁(yè)完整的數(shù)據(jù)并完成數(shù)據(jù)校驗(yàn)后,才會(huì)將所接收數(shù)據(jù)以頁(yè)的形式燒寫(xiě)進(jìn)FLASH存儲(chǔ)區(qū),再向上位機(jī)發(fā)送下載確認(rèn)請(qǐng)求,讓上位機(jī)繼續(xù)發(fā)送下一頁(yè)數(shù)據(jù)。直到上位機(jī)收到ECU的解析完成確認(rèn)請(qǐng)求后,向ECU發(fā)送下載結(jié)束指令,ECU接收到上位機(jī)發(fā)送的下載結(jié)束的指令后,將下載到FLASH的應(yīng)用程序拷貝到ECU的RAM中,開(kāi)始加載應(yīng)用程序,完成嵌入式系統(tǒng)更新;當(dāng)超出等待時(shí)間或上位機(jī)發(fā)生加載指令后,bootloader進(jìn)入加載模式,將FLASH中的應(yīng)用程序拷貝到RAM中,加載應(yīng)用程序并退出。
3 具體方案設(shè)計(jì)
3.1 硬件部分
硬件部分主要實(shí)現(xiàn)框圖如圖2所示,其中電源部分主要完成電機(jī)控制器輸入電源到電機(jī)控制器的電平轉(zhuǎn)換,CAN通訊部分的設(shè)計(jì)主要需考慮整車(chē)的阻抗匹配,電機(jī)控制器部分的設(shè)計(jì)主要需考慮整車(chē)的EMC性能。
3.2 軟件部分
本方案軟件采用三層軟件架構(gòu),實(shí)現(xiàn)框圖如圖3所示,其中物理層為設(shè)備之間的數(shù)據(jù)通信提供傳輸媒體,為數(shù)據(jù)傳輸提供可靠的環(huán)境。傳輸層作為物理層和應(yīng)用層之間的媒介,在數(shù)據(jù)傳輸?shù)倪^(guò)程中,實(shí)現(xiàn)數(shù)據(jù)的傳輸,解包,解析,差錯(cuò)控制,打包等工作,將數(shù)據(jù)從應(yīng)用層傳到物理層。應(yīng)用層根據(jù)診斷協(xié)議中具體診斷服務(wù)的服務(wù)標(biāo)識(shí)符及后面所攜帶的參數(shù)格式及內(nèi)容,為根據(jù)解析出的服務(wù)做出相應(yīng)的處理策略。
3.2.1 啟動(dòng)方式選擇
TMS320F28069支持兩種工作模式,分別是emulator模式和standalone模式,其中emulator模式是芯片的仿真模式,該模式下可以支持使用TI對(duì)應(yīng)的X100DS仿真器對(duì)芯片進(jìn)行實(shí)時(shí)仿真。Standalone模式是系統(tǒng)脫離仿真器后的工作模式,由于電機(jī)控制系統(tǒng)需要脫離仿真器工作,因此需要使用standalone模式。同時(shí)每個(gè)模式都支持4種啟動(dòng)方式,分別是RAM啟動(dòng),SCI啟動(dòng),USB啟動(dòng)和獲得模式(根據(jù)獲得KEY)。本設(shè)計(jì)使用獲得模式啟動(dòng),并且使用內(nèi)部Flash啟動(dòng)方式,這種方式采用芯片自帶的內(nèi)部Flash存儲(chǔ)器,無(wú)需外掛存儲(chǔ)器,設(shè)計(jì)簡(jiǎn)單并可有效節(jié)約成本。
3.2.2 存儲(chǔ)器分配
根據(jù)TMS320F28069的存儲(chǔ)器映射,將本系統(tǒng)的存儲(chǔ)器分配如圖4所示,其中內(nèi)部FLASH的A段地址,其余部分由應(yīng)用程序占用。由于上電過(guò)程中當(dāng)采用Flash啟動(dòng)方式芯片自帶的BROM會(huì)讀取0x3F7FF6地址的內(nèi)容,因此需要在該地址中加入一個(gè)跳轉(zhuǎn)到主函數(shù)的指令。
由于bootloader在運(yùn)行擦除/寫(xiě)入Flash時(shí)暫時(shí)無(wú)法讀取內(nèi)部flash指令,每個(gè)因此需要將對(duì)應(yīng)的Flash擦除/寫(xiě)入的代碼存放到一部分RAM中,所以圖2中一部分RAM空間會(huì)被臨時(shí)占用用于放置Flash擦除/寫(xiě)入的代碼。
3.2.3 軟件流程
(1)Bootloader編碼流程。Bootloader在不同的芯片中,程序代碼有所不同,是因?yàn)锽ootloaser啟動(dòng)過(guò)程中與硬件的關(guān)聯(lián)性比較大,因此將Bootloader的程序分為兩個(gè)部分,使平臺(tái)性的功能方便移植。其中第一部分程序與主要由芯片的硬件決定,可移植性相對(duì)比較差,這部分程序主要由匯編語(yǔ)言完成,主要實(shí)現(xiàn)的功能是:設(shè)置中斷向量表、關(guān)閉看門(mén)狗、設(shè)置堆棧、初始化系統(tǒng)時(shí)鐘、內(nèi)存初始化等。第一部分完成初始化并且設(shè)置好相應(yīng)的環(huán)境,就跳轉(zhuǎn)到第二部分的入口,在第二部分,主要由C語(yǔ)言編寫(xiě),主要實(shí)現(xiàn)通用性和平臺(tái)性的功能,這樣的代碼也具有較好的可讀性與可移植性。第二部分主要實(shí)現(xiàn)的功能包括:MMU初始化、中斷初始化、串口初始化、網(wǎng)卡初始化、LCD初始化等。這部分代號(hào)主要是初始化本階段所需要使用的硬件設(shè)備,檢測(cè)系統(tǒng)內(nèi)存映射,將操作系統(tǒng)內(nèi)核映像文件和根文件的系統(tǒng)映像從FLASH加載到RAM空間,為內(nèi)核設(shè)置啟動(dòng)參數(shù),跳轉(zhuǎn)到操作系統(tǒng)入口地址處執(zhí)行。如圖5所示。
(2)系統(tǒng)軟件流程。軟件系統(tǒng)的執(zhí)行流程如圖6所示,當(dāng)系統(tǒng)上電后,系統(tǒng)首先判斷是否有編程請(qǐng)求,如沒(méi)有編程請(qǐng)求,則等待200ms,期間如果發(fā)生了編程請(qǐng)求,則進(jìn)入編程狀態(tài),根據(jù)收到對(duì)應(yīng)的診斷服務(wù),對(duì)相應(yīng)的存儲(chǔ)空間進(jìn)行擦除/寫(xiě)入,當(dāng)完成擦除/寫(xiě)入后,bootloader會(huì)重新掃描用戶入口是否有效,如有效則進(jìn)入用戶程序,否則系統(tǒng)會(huì)重新啟動(dòng)等待上位機(jī)的編程命令。
4 總結(jié)與展望
本文闡述了基于TMS320F28069的電機(jī)控制器bootloader的設(shè)計(jì)與實(shí)現(xiàn)方法。通過(guò)實(shí)驗(yàn)可知,通過(guò)遠(yuǎn)程服務(wù)器將診斷數(shù)據(jù)下發(fā)的方式可以實(shí)現(xiàn)電機(jī)控制器ECU控制策略的實(shí)時(shí)診斷與更新,極大的方便了主機(jī)廠對(duì)于模塊的更新,整個(gè)過(guò)程使用方便、快捷,無(wú)需專(zhuān)業(yè)人員參與,節(jié)約了人力與物力成本,提升用戶體驗(yàn)。
參考文獻(xiàn)
[1]Q/BYDQ-A1906.4366電子控制單元(ECU) CAN燒寫(xiě)技術(shù)條件,2014.
[2]ISO 15765-2:2011道路車(chē)輛 控制器局域網(wǎng)絡(luò)(CAN)診斷 第2部分:網(wǎng)絡(luò)層服務(wù).
[3]王琦,黃悅鵬,邢正陽(yáng)等.基于CAN總線的Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2015,34(18):14-16.
[4]張華濤,鐘佩思,李哲等,基于S3C6410的嵌入式數(shù)控系統(tǒng)Bootloader的設(shè)計(jì)[J].制造技術(shù)與機(jī)床,2015.
作者簡(jiǎn)介
吳麗華(1983-),男,江西省鷹潭市人。大學(xué)本科學(xué)歷。主任規(guī)劃工程師。研究方向?yàn)殡娮有畔ⅰ?/p>
作者單位
比亞迪汽車(chē)工業(yè)有限公司 廣東省深圳市 518118