劉佳,徐洋,戈學凱
重慶郵電大學自動化學院,重慶 400065
近年來,汽車電子電氣架構的逐步面向標準化、融合化、智能化和網聯化等方向發展。其中,新能源汽車的網聯化是通過新能源汽車所搭載的車載終端實現的[1-2]。新能源汽車車身數據具有體量大和實時性強等特點,使傳統汽車的車載終端設計思路不適用于新能源汽車。伴隨著新能源技術在汽車領域的應用,新能源汽車面臨新的車身安全問題,例如電池管理系統的安全問題[3-4]。因此,我國制定并發布了關于新能源汽車入市的白皮書。根據白皮書相關條例,新能源汽車入市必須安裝車載終端,通過車載終端實現新能源汽車整車生命周期的管理和監控。因此,針對新能源汽車車載終端的研究是很有必要的。本文提供了一種基于異構處理器的方案[5-6]來設計新能源汽車車載終端。
新能源汽車車載終端可以看作是一個多網絡之間信息交互融合的系統,其系統結構總體上可以分為三個部分:應用承接層(車載終端)、網絡傳輸層(無線通信模塊)、應用層(監控中心/企業平臺)。具體工作流程如下:車載終端通過控制器局域網總線(controller area network,CAN)實時獲取車身數據,實現對車速、電池電量、電壓、電流、單體溫度等一系列數據的監測[7-8]。車載終端通過定位模塊實時獲取位置信息。最后,將獲取的數據按照傳輸協議規定的標準數據幀格式或者私有數據幀格式進行加密封包后通過無線通信模塊上傳到遠程服務器[9-10]。新能源汽車車載終端的作用就是實現不同網絡之間的數據交互[11-12]。新能源汽車車載終端系統總體架構如圖1所示。

圖1 新能源汽車車載終端系統總體架構
本設計采用ST公司異構處理器STM32MP157作為核心處理器。該異構處理器內部集成了Cortex-A7核心和Cortex-M4核心。Cortex-A7核心主頻高達650 MHz,Cortex-M4核心主頻高達209 MHz,內部集成了豐富的片上外設硬件資源。通過ST公司推出的STM32CubeIDE軟件配置工具,可以自由分配不同硬件外設到不同核心,提高硬件資源分配和設計的靈活性。在不同的核心上,可以運行不同的操作系統,實現不同的軟件運行環境,實現更復雜的軟件功能。
系統硬件設計方案采用“核心板+功能底板”的設計模式,根據實際設計需求,分配不同硬件外設資源到不同核心,將系統硬件設計分為三個部分,即:微處理器側(MPU side)、微控制器側(MCU side)和公共側(common side)。
微處理器側作為本設計中的應用核心,主要圍繞異構處理器STM32MP157內部Cortex-A7核心進行設計,分配DDR控制器、eMMC控制器、兩路 IIC、兩路USBH和GPIO引腳等硬件外設資源。DDR控制器外接512MB DDR3內存;eMMC 控制器外接8GB eMMC Flash。一路IIC用于控制電源管理芯片,另一路IIC和USBH1外接STUSB 1600芯片構成USB OTG電路。USBH2 外接USB Hub芯片FE2.1進行USB接口擴展,其中一路用作MINI PCIe接口[13],用于外接4G通信模塊和SIM 卡,剩下的預留4路作為USB擴展接口。GPIO引腳外接按鍵和Led,用作用戶按鍵和指示燈。
微控制器側作為本設計中的實時核心,主要圍繞異構處理器STM32MP157內部Cortex-M4核心進行設計,分配內部外設RETRAM、SRAM 1/2/3/4和兩路FDCAN。RETRAM用于存放Cortex-M4核心中斷向量表,SRAM 1一般用于存放Cortex-M4固件代碼段,SRAM 2用于存放Cortex-M4固件數據段,SRAM 3/4作為共享內存使用。兩路FDCAN外接CAN收發器芯片SN65HV230,采用DB9物理接口方式引出[14]。
公共側主要圍繞異構處理器STM31MP157內部Cortex-A7核心和Cortex-M4核心的啟動、調試、串口終端和核間通信進項設計,分配啟動BOOT引腳、Debug JTAG引腳、串口UART4引腳、內部外設硬件信號量(hardware semaphore,HSEM)和內部外設核間通信控制器(Inter-processor communication controller,IPCC)。BOOT 0/1/2引腳外接撥碼開關,用來選擇異構處理器STM32MP157的啟動方式。JTAG引腳外接JLINK/SWD卡座,用來在線硬件調試異構處理器STM32MP157。串口引腳用作調試信息打印和終端功能。內部外設硬件信號量和核間通信控制器用來實現異構處理器STM32MP157內部不同核心之間的數據交換。新能源汽車車載終端系統硬件設計框如圖2所示。

圖2 新能源汽車車載終端系統硬件設計框
本章節主要介紹異構處理器STM32MP157內部不同核心之間數據交互的軟硬件實現基礎,分為硬件部分和軟件部分來介紹。
核間通信硬件部分通過異構處理器STM32MP158處理內部硬件資源,即通過IPCC、HSEM和共享內存協同完成。其中,PCC提供Cortex-A7核心和Cortex-M4核心之間數據傳輸通道,HSEM提供Cortex-A7核心和Cortex-M4核心硬件資源技術和硬件鎖,共享內存用于完成Cortex-A7核心和Cortex-M4核心之間的數據交換。
核間通信軟件部分采用OpenAMP開源軟件框架。該框架由RemoteProcess、RPMsg、Virt-IO及Proxy四部分組件組成。該框架將異構處理器STM32MP157內部不同核心劃分為主核心和從核心,本設計將車載終端中Cortex-A7作為主核心,Cortex-M4作為從核心。通過在主核心上運行Remote-Process組件,實現對從核心的運行環境進行生命周期管理,實現啟動、關閉和加載可執行文件到從核心內存空間,并完成后續主從核心之間通信,相關組件為RP-msg和Virt-IO。RP-msg組件作用于主從核心,是基于Virt-IO組件的進一步抽象,提供核間通信服務,實現異構多核處理器I核間通信的通道。Virt-IO組件作用于主從核心,是對上述IPCC、HSEM和共享內存等硬件資源的抽象,作為核間通信的軟件抽象層。Proxy組件在本設計中并未用到,因此不做介紹。
在調用RPMsg框架中的相關API來發送數據時,需要指定RPMsg端點、發送的用戶數據、數據的長度以及源地址或者目的地址等,使用起來不是很方便,也不是很靈活,于是基于RPMsg框架,OpenAMP庫提供了虛擬串口的實現方式,即將RPMsg再經過一層封裝,最后抽象出虛擬串口。因此,本設計最終基于虛擬串口來實現異構處理器內部Cortex-A7核心和Cortex-M4核心的數據通信,其核間通信的完整實現如圖3所示。

圖3 新能源汽車基于虛擬串口實現異核通信
本設計車載終端軟件部分圍繞微處理器側和微控制器側兩部分展開,主要介紹微處理器側和微控制器側的軟件流程設計。
微處理器側圍繞異構處理器STM32MP157內部Cortex-A7核心進行軟件流程設計,在Cortex-A7核心上運行Linux系統,基于Linux系統進行網絡編程和應用編程[15-16]。網絡編程部分,本設計車載終端采用C/S架構,即客戶端(client)和服務器端(server)。本設計中本系統工作在client模式下,通過創建TCP socket方式,連接上server,實現網絡通信功能[17-18]。應用編程部分主要分為數據獲取、數據處理和數據上傳3部分。其中,數據獲取部分,通過讀取字符驅動設備“ttyRPMSG”來獲取Cortex-M4核心傳輸過來的CAN報文數據。數據處理部分,本設計中設計了二進制數據格式(原數據格式)和JSON數據格式兩種解析方式實現對CAN報文的解析。數據上傳部分通過建立的TCP socket通信,將數據上傳到指定服務器。新能源汽車車載終端微處理器側軟件設計流程如圖4所示。

圖4 新能源汽車車載終端微處理器側軟件設計流程
微控制器側主要圍繞異構處理器STM32MP157內部Cortex-M4核心進行軟件流程設計,在Cortex-M4核心上運行裸機程序。本設計中將其分為4部分:核間通信功能初始化及配置、兩路FDCAN的初始化及配置、核間數據通信及兩路FDCAN中斷處理。通過STM32CubeIDE軟件內嵌的STM32CubeMX圖形化配置工具,進行核間通信功能初始化及配置,包括公共側內部外設核間通信控制器在微處理器側的初始化和配置、軟件通信框架OpenAMP的初始化及虛擬串口的初始化和注冊。新能源汽車車載終端微控制器側軟件設計流程如圖5所示。

圖5 新能源汽車車載終端微控制器側軟件設計流程
本設計新能源汽車車載終端采用Altium Designer軟件進行硬件板卡設計,分為元器件庫制作、原理圖設計和PCB設計。按照文中第2章所提及的“核心板+功能底板”的設計模式,功能底板采用4層PCB設計,支持4G/5G網絡模塊,提供兩路FDCAN接口,預留4路USB作為擴展接口,增強擴展性,方便后續升級。功能底板繪制主要分為電源電路設計、OTG電路設計、MINI PCIe電路設計、SIM卡電路設計、FDCAN電路設計、USB Hub電路設計及啟動和調試接口電路設計。新能源汽車車載終端功能底板設計如圖6所示。

圖6 新能源汽車車載終端功能底板設計
新能源汽車車載終端功能底板焊接元器件后實物布局如圖7所示。

圖7 新能源汽車車載終端實物布局
為驗證本設計中新能源汽車車載終端的功能及穩定性,搭建模擬硬件測試環境,進行測試與驗證。測試平臺主要由上位機測試軟件、CAN總線診斷工具盒及本文所設計的新能源汽車車載終端組成,主要分為原始二進制數據格式上傳測試和JSON數據上傳格式測試。
選取電池管理系統(BMS)控制單元一幀數據和電機控制器(VCU)控制單元一幀數據進行測試。其中,選取的BMS控制單元數據幀和VCU控制單元數據幀的各項參數見1。

表1 模擬測試數據幀用例
原始二進制數據格式上傳測試:上位機軟件對BMS控制單元數據幀和VCU控制單元數據幀分別按照各自周期進行1000次發送測試,即總共發送2000幀數據,每幀數據由4字節CAN ID和8節數據組成,共24000字節數據。通過對服務器端接收數據進行分析發現,數據上傳成功率能達到100%,能完整接收到上位機發送的每一幀測試數據。導出服務器端接收數據時由于測試數據太大,只截取導出數據開始、中間及結尾部分作為展示,如圖8所示。

圖8 原始二進制數據格式上傳測試結果
在相同測試環境下,進行JSON數據格式上傳測試:選擇BMS控制單元數據幀進行500次模擬測試,模擬測試中,通過車載終端調試串口打印Cortex-M4核心向Cortex-A7核心發送數據幀次數,通過自行編寫的服務器端接收數據,選取所接收 JSON 數據最后3次的截圖,結果如圖9所示。

圖9 采取JSON數據格式上傳測試結果
本文以異構處理器STM32MP157為核心,采用“核心板+功能底板”的設計模式,設計了一款新能源汽車車載終端。根據實際開發需求,將異構處理器劃分為微處理器端和微控制器端。針對功能底板進行了硬件設計,針對核心板進行軟件開發,并將設計的新能源汽車車載終端十五搭建硬件在環測試系統,進行模擬功能測試。測試結果表明,本文中設計的新能源汽車車載終端能夠有效、可靠地將模擬測試數據按照指定格式發送至測試服務器,完成預期功能。