摘 要:針對(duì)目前控制器局域網(wǎng)(Controller Area Network, CAN)總線技術(shù)通信速度較慢、帶寬有限以及可擴(kuò)展性差等弊端,利用車(chē)載以太網(wǎng)技術(shù)實(shí)現(xiàn)車(chē)內(nèi)控制器與車(chē)聯(lián)網(wǎng)控制單元T-Box的局域網(wǎng)通信,以實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和收集。在嵌入式平臺(tái)STM32F429VIT6移植FreeRTOS操作系統(tǒng)和LwIP網(wǎng)絡(luò)協(xié)議棧,通過(guò)OTA技術(shù)完成系統(tǒng)軟件的遠(yuǎn)程升級(jí)。測(cè)試結(jié)果表明:系統(tǒng)能夠?yàn)橛脩魧?shí)時(shí)提供汽車(chē)電池各項(xiàng)數(shù)據(jù),系統(tǒng)響應(yīng)指令的時(shí)間約為6 ms,且具有局域網(wǎng)內(nèi)的OTA升級(jí)功能,實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。
關(guān)鍵詞:車(chē)載以太網(wǎng);STM32;FreeRTOS;LwIP;OTA;局域網(wǎng)
中圖分類(lèi)號(hào):TP29 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2024)04-00-05
DOI:10.16667/j.issn.2095-1302.2024.04.013
0 引 言
汽車(chē)的電子控制單元(Electronic Control Unit, ECU)在讀取車(chē)內(nèi)傳感器數(shù)據(jù)后,通常采用CAN總線和車(chē)聯(lián)網(wǎng)控制單元(Telematics-Box, T-Box)進(jìn)行局域網(wǎng)通信,但如今消費(fèi)者愈發(fā)重視汽車(chē)駕駛的安全可靠以及車(chē)內(nèi)的娛樂(lè)化需求,汽車(chē)廠商不斷擴(kuò)展汽車(chē)內(nèi)部集成的傳感器,導(dǎo)致CAN總線與T-Box通信的帶寬不足以匹配目前車(chē)內(nèi)傳感器數(shù)量[1],因而推動(dòng)了以太網(wǎng)技術(shù)介入汽車(chē)內(nèi)部網(wǎng)絡(luò)的進(jìn)程,車(chē)載以太網(wǎng)技術(shù)應(yīng)運(yùn)而生[2]。目前智能網(wǎng)聯(lián)汽車(chē)的數(shù)據(jù)傳輸方式如圖1所示。
以太網(wǎng)自1973年提出后,憑借其簡(jiǎn)單和易擴(kuò)展性幾乎取代了所有計(jì)算機(jī)局域網(wǎng)技術(shù),并逐步運(yùn)用在汽車(chē)環(huán)境中。使用車(chē)載以太網(wǎng)有助于在車(chē)內(nèi)集成實(shí)時(shí)控制功能和非實(shí)時(shí)娛樂(lè)功能[3]。連接外部攝像頭或傳感器的ECU不但需要大帶寬傳輸視頻流等數(shù)據(jù),而且其對(duì)延時(shí)要求嚴(yán)格,需要ECU有較好的實(shí)時(shí)性;負(fù)責(zé)安全功能的ECU,如:防抱死系統(tǒng)ABS、電動(dòng)助力轉(zhuǎn)向系統(tǒng)EPS,不僅要保證數(shù)據(jù)的延時(shí)與可靠性,而且要避免系統(tǒng)誤操作造成駕駛事故;汽車(chē)的固件維護(hù)功能,如:OTA,需要保證更新速度合理并保障數(shù)據(jù)傳輸安全性,防止外部通信干擾更新過(guò)程。
本文在上述背景下,將文獻(xiàn)[4]搭建的嵌入式硬件平臺(tái)視為車(chē)載控制器,研究設(shè)計(jì)了圖1中的局域網(wǎng)通信部分,將汽車(chē)電池的電壓和溫度參數(shù)借助車(chē)載以太網(wǎng)技術(shù)交付給T-Box收集和存儲(chǔ);T-Box下發(fā)命令指定控制器改變工作模式;控制器借助OTA技術(shù)完成系統(tǒng)軟件無(wú)線升級(jí)。
1 車(chē)載以太網(wǎng)通信軟件設(shè)計(jì)
車(chē)載以太網(wǎng)通信系統(tǒng)的硬件結(jié)構(gòu)如圖2所示。
MCU采用STM32F429芯片,并通過(guò)RMII接口與TJA1100連接。TJA1100通過(guò)MDI接口與網(wǎng)口連接,通過(guò)車(chē)載以太網(wǎng)轉(zhuǎn)換器實(shí)現(xiàn)控制器與T-Box的通信。本文重點(diǎn)介紹系統(tǒng)的軟件部分,硬件平臺(tái)的詳細(xì)設(shè)計(jì)請(qǐng)參考文獻(xiàn)[4]。
1.1 通信軟件的需求分析
從參數(shù)發(fā)送和數(shù)據(jù)接收2個(gè)方面分析通信軟件定量與定性需求,匯總見(jiàn)表1所列。發(fā)送的參數(shù)要保證精度高,即傳感器誤差范圍?。豢刂破鹘邮罩噶詈笠WC實(shí)時(shí)性響應(yīng);通信軟件應(yīng)易于維護(hù)和管理,以便快速檢測(cè)和修復(fù)程序中的
問(wèn)題。
傳感器誤差范圍是硬件指標(biāo),通過(guò)查閱溫敏電阻XH-T106的RT表,在15~75 ℃范圍內(nèi),XH-T106的誤差為(0.62±0.29)℃,滿足需求。
1.2 通信軟件的整體結(jié)構(gòu)
本文的車(chē)載終端以太網(wǎng)通信系統(tǒng)可分為硬件層和軟件層,軟件層可進(jìn)一步細(xì)分為驅(qū)動(dòng)層、操作系統(tǒng)層以及應(yīng)用
層[5]。軟件的分層架構(gòu)如圖3所示。
1.3 驅(qū)動(dòng)層軟件設(shè)計(jì)
驅(qū)動(dòng)層包括以太網(wǎng)驅(qū)動(dòng)模塊、時(shí)鐘模塊、串口模塊、ADC模塊和I/O模塊。
以太網(wǎng)驅(qū)動(dòng)模塊的初始化涉及硬件和軟件配置。硬件配置包括通過(guò)上拉或下拉電阻,配置TJA1100為從模式、自主工作模式以及采用外接25 MHz晶振的RMII電路連接STM32。軟件配置涉及在Reset引腳高電平條件下,通過(guò)TXEN引腳的上升沿觸發(fā)TJA1100的工作模式切換。最后配置引腳為以太網(wǎng)功能,設(shè)置I/O模式為推挽復(fù)用,并配置以太網(wǎng)工作模式為100 Mb/s帶寬傳輸、全雙工通信和中斷接收。
時(shí)鐘模塊設(shè)置分配器M系數(shù)為25,倍頻器N為360,分頻器P為2,可得系統(tǒng)時(shí)鐘頻率為180 MHz。
ADC模塊在軟件中設(shè)置ADC時(shí)鐘頻率為22.5 MHz,轉(zhuǎn)換頻率為1.5 MHz,配置對(duì)應(yīng)有復(fù)用成ADC功能的I/O引腳模式為模擬輸入模式。
串口模塊在軟件中設(shè)置串口波特率為115 200 b/s,并定義數(shù)據(jù)格式和收發(fā)模式,最后初始化串口的收發(fā)引腳TX
與RX。
1.4 操作系統(tǒng)層軟件移植
1.4.1 FreeRTOS移植
為滿足本系統(tǒng)發(fā)送數(shù)據(jù)以及接收指令的實(shí)時(shí)性要求,本文引入了支持多任務(wù)調(diào)度的嵌入式實(shí)時(shí)操作系統(tǒng)作為控制器軟件層的關(guān)鍵組成部分[6]。官網(wǎng)獲取FreeRTOS的V9.0.0版本源碼包后,只需修改FreeRTOSConfig.h和stm32f4xx_it.c即可。前者是實(shí)現(xiàn)FreeRTOS功能可裁剪的關(guān)鍵,按照開(kāi)發(fā)者的意愿自行剪裁操作系統(tǒng);最后刪除后者中重復(fù)定義的SysTick、PendSV、SVC中斷函數(shù)即可完成移植。其他文件夾include、portable中RVDS、MemMang以及主路徑下的若干.c文件對(duì)大多數(shù)編譯器均適用,保留即可。
1.4.2 LwIP移植
LwIP的架構(gòu)設(shè)計(jì)采用了模塊化思想,將協(xié)議棧分解成多個(gè)獨(dú)立模塊,各模塊之間采用API函數(shù)作為接口進(jìn)行交
互[7]。在官網(wǎng)獲取LwIP的V2.1.0版本源碼包后,移植過(guò)程只需著重修改cc.h、sys_arch.h、sys_arch.c和lwipopts.h這
4個(gè)文件。
(1)修改cc.h中的臨界區(qū)代碼保護(hù)區(qū)域,主要是將保護(hù)與釋放的宏定義修改成定義FreeRTOS中進(jìn)出臨界區(qū)的函數(shù);
(2)修改sys_arch.h和sys_arch.c中信號(hào)量、互斥量和消息郵箱的定義[7]以及信號(hào)量等變量的處理函數(shù);
(3)修改LwIP中有關(guān)定時(shí)和獲取事件的函數(shù),分別用于LwIP的延時(shí)以及為L(zhǎng)wIP提供和FreeRTOS一致的時(shí)鐘;
(4)依據(jù)工程需要,在opt.h定義的基礎(chǔ)上修改lwipopts.h。
1.5 應(yīng)用層軟件設(shè)計(jì)
應(yīng)用層包括3個(gè)模塊6項(xiàng)任務(wù)。
1.5.1 采樣任務(wù)模塊
采樣任務(wù)模塊包括采樣車(chē)載電池的電壓和溫度這2個(gè)任務(wù)。只需將ADC測(cè)量得到的電壓轉(zhuǎn)換成電池的電壓/溫度參數(shù),最后借助FreeRTOS的消息隊(duì)列資源將參數(shù)入列供其他任務(wù)讀取即可。
1.5.2 UDP任務(wù)模塊
UDP任務(wù)模塊包括UDP接收、發(fā)送以及網(wǎng)絡(luò)連接檢測(cè)3項(xiàng)任務(wù)。
(1)UDP接收與發(fā)送任務(wù)
接收和發(fā)送任務(wù)的詳細(xì)流程如圖4所示。UDP接收任務(wù)在創(chuàng)建并初始化Socket編程接口后,連接T-Box的IP地址和端口號(hào),即可通過(guò)recv()函數(shù)接收T-Box下發(fā)的指令,并對(duì)收到的指令進(jìn)行臨界區(qū)保護(hù);UDP發(fā)送任務(wù)則依次獲取接收任務(wù)傳入的Socket數(shù)據(jù)和電池參數(shù),并按順序?qū)㈦姵財(cái)?shù)據(jù)發(fā)送給T-Box進(jìn)行收集和存儲(chǔ)。
(2)UDP網(wǎng)絡(luò)連接檢測(cè)任務(wù)
UDP連接檢測(cè)任務(wù)需要事先和T-Box約定好,即當(dāng)T-Box接收到特定字符串后,需要向?qū)?yīng)IP地址的端口號(hào)返回一個(gè)ACK,具體模板如圖5所示。
圖6展示了UDP網(wǎng)絡(luò)連接檢測(cè)任務(wù)流程。為避免參數(shù)混淆,連接檢測(cè)任務(wù)使用與發(fā)送接收任務(wù)不同的端口號(hào)。根據(jù)車(chē)內(nèi)局域網(wǎng)和大帶寬傳輸?shù)木W(wǎng)絡(luò)環(huán)境,如果50 ms內(nèi)接收到正確的ACK響應(yīng),則判斷當(dāng)前網(wǎng)絡(luò)正常;否則視為網(wǎng)絡(luò)已斷開(kāi)。
1.5.3 DHCP獲取IP地址任務(wù)
獲取控制器IP地址任務(wù)為啟動(dòng)DHCP服務(wù)[8],通過(guò)DHCP服務(wù)器獲取IP地址、子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān),并將獲取的信息保存至lwipdev結(jié)構(gòu)體。任務(wù)流程如圖7所示。
2 系統(tǒng)OTA升級(jí)軟件設(shè)計(jì)
OTA(Over The Air, OTA)是一種通過(guò)無(wú)線網(wǎng)絡(luò)進(jìn)行車(chē)輛軟件更新的技術(shù),可以遠(yuǎn)程升級(jí)汽車(chē)的軟件和固件,提升功能和安全性。本文設(shè)計(jì)的OTA升級(jí)模塊包括Bootloader啟動(dòng)程序和APP功能程序,其中Bootloader通過(guò)UDP協(xié)議接收并存儲(chǔ)待更新的APP功能程序,然后將其燒錄到FLASH芯片的指定地址,實(shí)現(xiàn)功能程序的版本更新。這種遠(yuǎn)程更新技術(shù)提高了用戶體驗(yàn),加快了軟件新功能的推出,改善了車(chē)輛性能并解決了安全問(wèn)題。
2.1 FLASH芯片介紹
STM32F4系列芯片內(nèi)部的FLASH存儲(chǔ)器分為4個(gè)存儲(chǔ)區(qū)域,即主存儲(chǔ)器、系統(tǒng)存儲(chǔ)區(qū)、單次可編程(One-time Programmable, OTP)區(qū)域和選項(xiàng)字節(jié)。主存儲(chǔ)區(qū)是用戶最常使用的區(qū),用于存儲(chǔ)代碼、常量以及初始化值不為0的全局變量,此區(qū)的結(jié)構(gòu)為雙塊架構(gòu),總體容量為2 MB[9]。主存儲(chǔ)區(qū)的起始地址為0x08000000,當(dāng)單片機(jī)的Boot0和Boot1引腳均為低電平時(shí),則從起始地址運(yùn)行代碼。
2.2 Bootloader軟件設(shè)計(jì)
要將代碼寫(xiě)入FLASH的各個(gè)扇區(qū),需要了解FLASH寫(xiě)操作的原理和流程[9],而后規(guī)劃FLASH存儲(chǔ)Bootloader引導(dǎo)程序和APP程序的空間,空間劃分如圖8所示。本文選擇將FLASH分為2段分別存儲(chǔ)Bootloader程序和APP程序,留給APP程序較大的擴(kuò)展區(qū)域,以供后續(xù)APP程序的功能延拓[10]。
本文的Bootloader程序借助UDP協(xié)議接收待更新的APP程序源碼、燒錄程序至FLASH芯片以及執(zhí)行程序跳轉(zhuǎn)。將Bootloader程序分成空閑態(tài)、跳轉(zhuǎn)態(tài)以及升級(jí)接收態(tài)3種狀態(tài)予以分析,如圖9所示[10]。
Bootloader程序流程如圖10所示。由于APP程序并非從FLASH起始地址存儲(chǔ),而是偏移了64 KB,因此APP程序的中斷向量表同樣須偏移以供程序查詢(xún)中斷服務(wù)程序位置,即APP程序從main函數(shù)起始處重設(shè)中斷向量表
地址。
3 實(shí)驗(yàn)測(cè)試
圖11是本次實(shí)驗(yàn)的實(shí)驗(yàn)平臺(tái)實(shí)物,包括通信硬件平臺(tái)、路由器、可調(diào)電源等設(shè)備,其中T-Box采用PC端的網(wǎng)絡(luò)調(diào)試助手替代。
3.1 通信部分驗(yàn)證
手動(dòng)設(shè)定取代T-Box的網(wǎng)絡(luò)調(diào)試助手端IP地址192.168.1.11,端口號(hào)8089;通信硬件平臺(tái)分配的IP地址192.168.1.30,通信應(yīng)用端口號(hào)8089,檢測(cè)連接應(yīng)用端口號(hào)8090。通信網(wǎng)關(guān)為192.168.1.1,子網(wǎng)掩碼255.255.255.0。
通信軟件將監(jiān)測(cè)的汽車(chē)電池的各參數(shù)按順序發(fā)送給網(wǎng)絡(luò)調(diào)試助手。由圖12可知,汽車(chē)電池的電壓/溫度參數(shù)均可測(cè)量,網(wǎng)絡(luò)調(diào)試助手能接收通信軟件發(fā)送的參數(shù)內(nèi)容。
本文設(shè)定了若干服務(wù)器下發(fā)給控制器的指令。在網(wǎng)絡(luò)調(diào)試助手的消息發(fā)送欄發(fā)送對(duì)應(yīng)指令后,通信平臺(tái)會(huì)在短時(shí)間內(nèi)及時(shí)響應(yīng)并做出調(diào)整。圖13即指令發(fā)送后,單片機(jī)執(zhí)行命令的效果圖。指令發(fā)送和響應(yīng)的間隔時(shí)間為6 ms,定性分析本系統(tǒng)具有較好的實(shí)時(shí)性響應(yīng)能力。
3.2 OTA無(wú)線升級(jí)驗(yàn)證
當(dāng)Bootloader程序進(jìn)入“升級(jí)接收態(tài)”,網(wǎng)絡(luò)調(diào)試助手下發(fā)APP程序,Bootloader會(huì)接收程序源碼并將源碼寫(xiě)入FLASH芯片對(duì)應(yīng)APP存儲(chǔ)位置。完成FLASH燒錄后,進(jìn)入“跳轉(zhuǎn)態(tài)”執(zhí)行更新的程序。
4 結(jié) 語(yǔ)
研究設(shè)計(jì)了基于FreeRTOS的車(chē)載終端以太網(wǎng)通信軟件,研究表明,此通信軟件能夠借助合適的電路結(jié)構(gòu)檢測(cè)車(chē)載電池的參數(shù);參數(shù)誤差、響應(yīng)實(shí)時(shí)性和可維護(hù)性都達(dá)到了預(yù)期的設(shè)計(jì)指標(biāo),對(duì)車(chē)內(nèi)控制器的設(shè)計(jì)提供了一定的參考和應(yīng)用價(jià)值。
參考文獻(xiàn)
[1]甄海川,牛玉嬌,路哲,等.車(chē)載以太網(wǎng)通信開(kāi)發(fā)及應(yīng)用[J].汽車(chē)文摘,2022,60(1):40-44.
[2]呼布?xì)J,秦貴和,劉穎,等.下一代汽車(chē)網(wǎng)絡(luò):車(chē)載以太網(wǎng)技術(shù)現(xiàn)狀與發(fā)展[J].計(jì)算機(jī)工程與應(yīng)用,2016,53(24):29-36.
[3] DAOUD R M,AMER H H,ELSAYED H M,et al. Ethernet-Based Car Control Network [C]// Conference on Electrical amp; Computer Engineering. IEEE,2007.
[4]鄧亮.基于以太網(wǎng)的車(chē)用太陽(yáng)能電池控制器研發(fā)[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué), 2023.
[5]周浩. 基于改進(jìn)型實(shí)時(shí)內(nèi)核與LwIP協(xié)議棧的智能抄表系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)[D].南京:南京郵電大學(xué),2015.
[6]劉林.基于FreeRTOS的智能插座管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:湖南大學(xué),2015.
[7]董向陽(yáng).基于ARM的LwIP協(xié)議棧研究與移植[D].哈爾濱:哈爾濱理工大學(xué),2009.
[8]汪赟.同一設(shè)備MAC地址自動(dòng)配置多IP地址的設(shè)計(jì)與實(shí)現(xiàn)[J].福建電腦,2013,30(11):150-151.
[9]李露,謝映宏,許永軍,等. STM32的FLASH輕量級(jí)壞塊管理算法設(shè)計(jì)與應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2021,21(8):40-43.
[10]文豐,溫倩,武慧軍.基于IAP的嵌入式系統(tǒng)在線編程設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2022,22(12):37-41
收稿日期:2023-05-25 修回日期:2023-06-29
基金項(xiàng)目:江西省教育廳項(xiàng)目:稀土永磁磁浮列車(chē)虛擬編組自適應(yīng)協(xié)同與避撞控制研究(GJJ2200847)
作者簡(jiǎn)介:彭圣凱(2000—),男,本科在讀,研究方向?yàn)槠?chē)電子控制系統(tǒng)。
韓樹(shù)人(1983—),女,研究生,講師,研究方向?yàn)榫W(wǎng)絡(luò)化控制和嵌入式控制。