何紅芬,肖 兵
(華南理工大學(xué) 自動化科學(xué)與工程學(xué)院,廣州 510640)
CAN總線是德國BOSCH公司為現(xiàn)代汽車應(yīng)用領(lǐng)域推出的一種多主局域網(wǎng)。它實現(xiàn)了汽車電子的網(wǎng)絡(luò)化,大幅度減少了汽車內(nèi)的線束,實現(xiàn)數(shù)據(jù)共享[1]。汽車整車網(wǎng)絡(luò)數(shù)據(jù)是分析汽車運行狀態(tài)及故障原因的依據(jù),對汽車設(shè)備開發(fā)和診斷等方面有著非常重要的意義。為了實時記錄整車網(wǎng)絡(luò)的數(shù)據(jù),車載數(shù)據(jù)記錄儀等汽車電子設(shè)備隨之發(fā)展。目前普通的車載數(shù)據(jù)記錄儀是以CAN數(shù)據(jù)幀的形式來采集和存儲數(shù)據(jù)的,這樣必然會造成存儲空間的浪費,此外未能實現(xiàn)數(shù)據(jù)的分析定位功能和故障診斷功能,局限性較大,而高端的數(shù)據(jù)記錄儀價格過于昂貴。SAE J1939通信協(xié)議作為CAN的高層應(yīng)用協(xié)議被廣泛應(yīng)用于工程車和商用客車中?;贑AN網(wǎng)絡(luò)的SAE J1939協(xié)議可以對數(shù)據(jù)進行準(zhǔn)確的分析定位。此外,數(shù)據(jù)記錄儀的安全性和可靠性也是衡量產(chǎn)品好壞的標(biāo)準(zhǔn)。
因此本文開發(fā)了一款基于TI雙核高性能控制芯片F(xiàn)28M35x的整車網(wǎng)絡(luò)偵聽器,實時采集整車CAN網(wǎng)絡(luò)的數(shù)據(jù),并集成SAE J1939通信協(xié)議以便對CAN數(shù)據(jù)幀進行解析和消息定位。數(shù)據(jù)偵聽器將解析后的數(shù)據(jù)分類存儲在SD卡的文件系統(tǒng)中。各個外設(shè)接口電路均采用了數(shù)字隔離電路,從而保證數(shù)據(jù)偵聽器的安全性和可靠性。
SAE J1939通信協(xié)議是卡車和商用客車中應(yīng)用最廣泛的高層應(yīng)用協(xié)議,美國汽車工業(yè)協(xié)會的車輛委員會提出其相關(guān)的規(guī)范,并選擇了CAN作為SAE J1939標(biāo)準(zhǔn)的底層基礎(chǔ)。它是一種傳輸速率較高的通信網(wǎng)絡(luò)協(xié)議,波特率可達到250 kb/s,可以支持分布在整個車輛中的電子控制系統(tǒng)間的實時性閉環(huán)控制及其通信[2]。SAE-J1939協(xié)議也遵循OSI 7層網(wǎng)絡(luò)模型,如表1所示對ISO/OSI參考模型進行了描述。
表1 J1939協(xié)議的分層模型Tab.1 Hierarchical model of J1939 protocol
J1939協(xié)議中有以下相關(guān)的數(shù)據(jù)單元:
(1)CAN數(shù)據(jù)幀。CAN總線網(wǎng)絡(luò)中的節(jié)點進行通信的單位,能夠攜帶8個字節(jié)的數(shù)據(jù)。
(2)協(xié)議數(shù)據(jù)單元 PDU(protocol data unit)。 本質(zhì)上是CAN數(shù)據(jù)幀,J1939協(xié)議對其ID有另一種解析方法。
(3)報文。帶有標(biāo)準(zhǔn)約定功能的PDU或PDU組,根據(jù)PDU個數(shù)又分為單包報文和多包報文。
(4)消息。傳輸層以上使用的數(shù)據(jù)單元,能容納大于8個字節(jié)的數(shù)據(jù)。
整車網(wǎng)絡(luò)通信數(shù)據(jù)的智能偵聽器采用了美國TI公司的雙核高性能單片機F28M35x為主控芯片。主控芯片具有多種通信外設(shè),基于其CAN總線接口設(shè)計了整車數(shù)據(jù)偵聽模塊;基于SPI總線接口設(shè)計了SD卡數(shù)據(jù)存儲模塊;基于USB外設(shè)接口設(shè)計了USB接口模塊,硬件示意如圖1所示。為了提高數(shù)據(jù)偵聽器的安全性和可靠性,各個模塊的接口電路中均采用了數(shù)字隔離電路設(shè)計。數(shù)據(jù)偵聽模塊通過2個高速隔離式CAN收發(fā)器ISO1050芯片連接到整車CAN網(wǎng)絡(luò)中。基于主控芯片的SPI接口經(jīng)過高速數(shù)字隔離器ISO7240CF-Q1與外部帶SPI接口容量為128 G的SD卡相連。采用了ADI公司的隔離芯片ADuM4160來實現(xiàn)USB總線電氣隔離電路。各路隔離電路均采用獨立的隔離電源,防止數(shù)據(jù)總線或者其它電路上的噪音電流進入本地接地并干擾和損壞敏感電路。
圖1 系統(tǒng)硬件示意Fig.1 Schematic diagram of hardware system
為了能實現(xiàn)數(shù)據(jù)的分析定位功能和故障診斷功能,并充分利用存儲空間,該數(shù)據(jù)偵聽器集成了SAE J1939通信協(xié)議的軟件中間件。本系統(tǒng)的軟件整體實施框架如圖2所示,數(shù)據(jù)偵聽器接收到整車CAN網(wǎng)絡(luò)上的CAN數(shù)據(jù)幀后,由J1939通信協(xié)議解釋器解析定位出CAN數(shù)據(jù)幀的有用信息,并將該信息分類存儲在SD卡中。當(dāng)有USB設(shè)備接入數(shù)據(jù)偵聽器時,可通過USB接口將數(shù)據(jù)傳輸?shù)缴衔粰C進行顯示和分析。
軟件系統(tǒng)的開發(fā)平臺是TI公司提供的CCS6.0軟件集成開發(fā)環(huán)境,它提供了C語言或匯編語言編程開發(fā)方式。此外,TI公司還提供ControlSUITE軟件基礎(chǔ)設(shè)施和工具集,方便開發(fā)者快速部署軟件系統(tǒng)和應(yīng)用開發(fā)[3]。系統(tǒng)首先進行初始化工作,包括F28M35自身的初始化、CAN控制器的初始化、USB接口的初始化以及SAE J1939通信協(xié)議棧的初始化。然后判斷是否插入SD卡,如果沒有插入SD卡則故障燈亮;判斷已插入SD卡后,使能該軟件系統(tǒng)的中斷,包括CAN模塊的接收中斷和USB設(shè)備中斷。當(dāng)CAN總線網(wǎng)絡(luò)上有數(shù)據(jù)傳輸時,產(chǎn)生接收中斷,轉(zhuǎn)而去處理接收中斷處理函數(shù),主要是CAN數(shù)據(jù)幀的解析和存儲。
圖2 系統(tǒng)軟件實施框圖Fig.2 Block diagram of software implementation system
軟件系統(tǒng)關(guān)鍵的部分是J1939通信協(xié)議的集成,作為CAN協(xié)議的高層協(xié)議,它可以根據(jù)應(yīng)用層的SPN提取出其物理值。J1939協(xié)議通過協(xié)議棧的形式實現(xiàn),如圖3所示,由數(shù)據(jù)鏈路層、網(wǎng)絡(luò)管理層以及應(yīng)用層組成。網(wǎng)絡(luò)管理層描述節(jié)點地址分配和管理,該數(shù)據(jù)偵聽器使用預(yù)置地址,并未涉及。
圖3 J1939協(xié)議棧實現(xiàn)模型Fig.3 Implementation model of J1939 protocol stack
數(shù)據(jù)鏈路層描述基于CAN2.0B規(guī)范的CAN數(shù)據(jù)通信,還描述了傳輸服務(wù)[5],協(xié)議棧實現(xiàn)數(shù)據(jù)鏈路層的功能包括了硬件抽象層HAL、數(shù)據(jù)層DL、傳輸層TL。
主要負責(zé)設(shè)置CAN底層驅(qū)動,提供CAN數(shù)據(jù)收發(fā)的接口。F28M35x的CAN模塊的驅(qū)動有2種方式:一種是直接調(diào)用外設(shè)驅(qū)動庫中的關(guān)于CAN控制器的配置函數(shù)來配置郵箱和管理CAN中斷,這種方式不需要了解外設(shè)管理的細節(jié),有助于快速開發(fā);另外一種是直接配置外設(shè)寄存器,這種方式雖然需要了解各個寄存器的細節(jié),但是更加可靠有效[4]。本設(shè)計中選用的是直接配置寄存器的方法,確保CAN底層驅(qū)動的有效可靠。
CAN底層驅(qū)動包含了幾種CAN模塊的操作:CAN控制器配置 HAL_init()、發(fā)送數(shù)據(jù)Trans_CANpkt()、接收數(shù)據(jù)處理Get_CANpkt()。其中CAN模塊的初始化函數(shù)流程如圖4所示,首先使能時鐘,配置引腳工作在CAN模式下,配置位時序等來設(shè)置波特率,配置發(fā)送和接收郵箱。CAN接收函數(shù)流程如圖5所示,采用中斷工作模式,當(dāng)郵箱接收到數(shù)據(jù)幀后會產(chǎn)生中斷,調(diào)用相應(yīng)的中斷函數(shù)將CAN數(shù)據(jù)幀放入接收緩沖區(qū)。CAN底層發(fā)送函數(shù)的程序流程如圖6所示,主要是將CAN數(shù)據(jù)幀的ID(標(biāo)識符)、數(shù)據(jù)長度和數(shù)據(jù)域賦給發(fā)送郵箱進行發(fā)送。
圖4 CAN初始化配置流程Fig.4 Configuration flow chart of CAN initialize
圖5 CAN接收函數(shù)流程Fig.5 Flow chart of CAN receive function
圖6 CAN發(fā)送函數(shù)流程Fig.6 Flow chart of CAN send function
主要是定義協(xié)議數(shù)據(jù)單元PDU的數(shù)據(jù)結(jié)構(gòu),取出接收緩沖區(qū)中的CAN數(shù)據(jù)幀,根據(jù)CAN標(biāo)識符解析 PDU域,并根據(jù) PF(PDU格式)來完成CAN數(shù)據(jù)幀與PDU之間的轉(zhuǎn)換,具體流程如圖7所示。
圖7 CAN數(shù)據(jù)幀轉(zhuǎn)換成PDU的流程Fig.7 Flow chart of changing CAN data frame into PDU
完成J1939消息與PDU之間的解析轉(zhuǎn)換,消息的拆裝和重組。由于數(shù)據(jù)偵聽器需要偵聽整車CAN網(wǎng)絡(luò)上的數(shù)據(jù),所以傳輸方式采用廣播方式,連接管理報文為TP.CM_BAM。進行多包方式傳輸時,建立接收狀態(tài)機來管理傳輸過程。狀態(tài)轉(zhuǎn)換圖如圖8所示,初始狀態(tài)是Wait_for_mesaage,當(dāng)收到了連接報文TP.CM_BAM,則轉(zhuǎn)到Init狀態(tài)開始初始化,將報文中關(guān)于接收消息的數(shù)據(jù)存儲在狀態(tài)機中;狀態(tài)轉(zhuǎn)到Wait_for_data等待數(shù)據(jù)報文TP.DT,此時開啟定時器用于超時計時,當(dāng)沒有收到TP.DT則跳到Check_timer狀態(tài)進行超時判斷,若超過750 ms,則判定為超時,狀態(tài)跳轉(zhuǎn)到Reset狀態(tài),重新回到Wait_for_message狀態(tài)。如果收到了TP.DT,則跳轉(zhuǎn)到Check_data狀態(tài),進行包序檢查,包序正確則跳轉(zhuǎn)到Save_data狀態(tài)存儲數(shù)據(jù)報文,否則跳轉(zhuǎn)到Reset狀態(tài)。當(dāng)所有數(shù)據(jù)報文都重組完成,則將J1939消息傳輸?shù)缴蠈舆M行解析。
圖8 狀態(tài)轉(zhuǎn)換Fig.8 Diagram of state transition
應(yīng)用層主要描述了車輛使用的每個參數(shù)的數(shù)據(jù)長度、數(shù)據(jù)類型、分辨率、數(shù)據(jù)范圍和標(biāo)稱符等內(nèi)容,此外應(yīng)用層還定義了故障診斷代碼。所以應(yīng)用層的主要功能是對接收到的消息和故障代碼進行解析,實現(xiàn)信息定位。參數(shù)可分為連續(xù)型參數(shù)和離散型參數(shù),關(guān)于連續(xù)型參數(shù)在J1939的應(yīng)用層協(xié)議中有一套連續(xù)型參數(shù)的定義,這些參數(shù)用SLOT來描述。 SLOT 就是比例(scaling)、界限(limit)、偏移量(offset)和傳送功能(transfer)的縮寫[6]。 可根據(jù) SLOT的定義及物理數(shù)據(jù)的計算公式:物理數(shù)據(jù)=比例系數(shù)×傳輸數(shù)值+偏移量來獲取實際的參數(shù)值。如表2所示,以發(fā)動機冷卻劑溫度(SPN 110)為例說明:SPN=110,可知其數(shù)據(jù)范圍、分辨率等。根據(jù)SLOT的定義及物理數(shù)據(jù)的計算公式:物理數(shù)據(jù)=比例系數(shù)×傳輸數(shù)值+偏移量。CAN數(shù)據(jù)幀的數(shù)據(jù)域為12 23 34 45 56 67 78 89。第一字節(jié)為0x12,轉(zhuǎn)換為十進制是18,18×1-40=-22℃,從而可以得知發(fā)動機的冷卻劑溫度為-22℃。
表2 發(fā)送機冷卻劑溫度的應(yīng)用層定義Tab.2 Application layer definition of transmitter coolant temperature
根據(jù)參數(shù)值的物理意義分別以樹形結(jié)構(gòu)存儲于SD卡中的發(fā)動機溫度文件系統(tǒng)中。上位機可以直接定位到該數(shù)據(jù)是發(fā)動機的冷卻液的溫度,而不只是簡單的CAN數(shù)據(jù)幀。
將數(shù)據(jù)偵聽器與實驗室自主開發(fā)的發(fā)動機電子控制單元ECU連接進行系統(tǒng)測試,結(jié)果表明:數(shù)據(jù)偵聽器偵聽總線上的CAN數(shù)據(jù)幀,通過J1939協(xié)議對接收到的CAN數(shù)據(jù)幀進行解析實現(xiàn)信息定位,并將得到參數(shù)的實際值分類存儲到SD卡中。SD卡中的數(shù)據(jù)可供上位機的分析軟件進行圖形化顯示,此時顯示的數(shù)據(jù)可以直接定位到數(shù)據(jù)的實際來源和數(shù)值,更加直觀,上位機的分析軟件的顯示界面如圖9所示。
圖9 上位機顯示界面Fig.9 Display interface of PC
基于SAE J1939的整車CAN網(wǎng)絡(luò)數(shù)據(jù)偵聽器的軟件系統(tǒng)中集成SAE J1939協(xié)議對CAN數(shù)據(jù)幀進行解析和準(zhǔn)確的信息定位,并將解析后的物理信息分類存儲在SD卡中,從而有效地提高了存儲空間的利用率。借助TI雙核單片機的實時控制和通信的優(yōu)越性能,在各個外設(shè)接口都設(shè)計了數(shù)字隔離電路來確保數(shù)據(jù)記錄儀的安全性和可靠性。
[1]顧衛(wèi)鋼.手把手教你學(xué)DSP—基于TMS320X281x[M].北京:北京航空航天大學(xué)出版社,2011.
[2]李偉.基于CAN/LIN總線的汽車儀表信息系統(tǒng)研究與設(shè)計[D].武漢:華中科技大學(xué),2006.
[3]TheTexasInstrumentsInc.controlSUITE GettingStarted Guide(Rev.C)[EB/OL],2015.
[4]F2803x Firmware Development Package USER’S GUIDE[S],2014
[5]SAE J1939-21.Data Link Layer Standard.SAE Group[S],2001.
[6]SAE J1939-71.Vehicle Application Layer Standard.SAE Group[S],2004.