摘??要: 從系統(tǒng)整體結(jié)構(gòu)、硬軟件設(shè)計等方面論述了車身控制模塊的LIN總線接口與PC機的USB接口互連的設(shè)計方法。該設(shè)計已經(jīng)應(yīng)用到車身控制設(shè)備的測試之中。
關(guān)鍵詞:? LIN總線; USB/CDC; 單片機
?
LIN總線廣泛應(yīng)用于車門、方向盤、座椅、溫度和發(fā)動機冷卻風扇等控制中。目前工程師大多采用專用的測試設(shè)備來測試帶LIN總線的車身控制模塊(BCM)。但該類測試設(shè)備功能單一,而且成本較高。目前USB接口已經(jīng)在PC機上普及,如果能設(shè)計LIN總線和USB總線互連的接口,直接將BCM模塊中的信息通過USB接口上傳到PC機,就能充分利用PC機的資源來對BCM進行測試,不僅可提供豐富的人機界面和智能化的測試管理手段,而且能大大降低測試成本。PIC18F2550單片機既內(nèi)嵌有USB接口,又提供了支持LIN協(xié)議的USART接口,且具有良好的電氣性能。本文即以此單片機為核心設(shè)計了一種LIN總線和USB總線互連的接口轉(zhuǎn)換器。
1 LIN 總線技術(shù)簡介
LIN總線基于通用的UART/SCI接口,其最高通信速率為20Kbps,在硬件和軟件上都易于實現(xiàn)。其低成本的優(yōu)勢使得一些先進的機械電子裝置,如智能傳感器和執(zhí)行器等可應(yīng)用到車輛系統(tǒng)中。目前LIN總線的協(xié)議已逐漸從1.3升級到2.0,最新的標準為2.1。當前大多數(shù)的LIN接口芯片支持LIN 2.0協(xié)議,本文采用的協(xié)議即為LIN 2.0。
2 USB-LIN 轉(zhuǎn)換接口的總體設(shè)計
本文設(shè)計的USB-LIN轉(zhuǎn)換接口主要包括三大部分:單片機的USB接口部分、LIN總線的接口部分和電源隔離部分,如圖1所示。其中,單片機的5V電源來自PC機的USB接口,LIN收發(fā)器的電源來自汽車的12V蓄電池。光耦PS9701實現(xiàn)了兩套電源系統(tǒng)的隔離,有效地保護了PC機的USB接口和BCM模塊。
?

3 USB-LIN 轉(zhuǎn)換接口的硬件設(shè)計
3.1 PIC18F2550單片機
PIC18F2550是Microchip公司生產(chǎn)的增強型閃存USB 單片機[1],它具有兼容USB2.0協(xié)議的USB接口,內(nèi)嵌1KB雙端口存取RAM。USB協(xié)議棧實現(xiàn)了四種傳輸方式:控制傳輸方式、中斷傳輸方式、批量傳輸方式和實時傳輸方式。此外,PIC18F2550還內(nèi)嵌增強型USART 模塊,支持LIN總線協(xié)議。PIC18F2550對USB接口和LIN接口均提供了良好的支持,因此,選用該單片機可簡化LIN和USB轉(zhuǎn)換接口的外圍電路的設(shè)計。
3.2 USB接口部分的硬件設(shè)計
USN-LIN接口電路的USB部分的設(shè)計如圖2所示。
?

其中,USBH為USB接口,PC機的USB口提供的電壓為5V±5%,電流最小為100mA,最大為500mA。PIC18F2550正常工作時應(yīng)提供的電源范圍為4.2V~5.5V,如果選用PIC18LF2550,電源范圍可拓寬至2.6V~5.5V,實際測試中,本電路消耗的電流僅為50mA。因此,無論是筆記本電腦還是臺式機,其USB口提供的電源都能夠保證該電路正常工作。
圖2中信號RC1/FT、RC0/CS、RC6/TX 和RC7/RX連接至光隔回路,以實現(xiàn)PC機的USB口和LIN總線的電源隔離。其中,RC1/FT為LIN總線故障偵測端口,通過該端口,ATA6625(LIN接口芯片)將LIN總線的狀態(tài)傳送到PIC18F2550,以指明當前LIN總線是處于故障狀態(tài),還是處于總線退出或空閑狀態(tài)。RC0/CS為LIN總線收發(fā)器的片選端。RC6/TX為LIN總線收發(fā)器的發(fā)送數(shù)據(jù)端。RC7/RX為LIN總線收發(fā)器的接收數(shù)據(jù)端。為改善光隔的耦合波形,在輸入端RC1/FT和RC7/RX上都加入了1kΩ的上拉電阻。
3.3 與LIN總線接口部分的硬件設(shè)計
與LIN總線接口部分電路如圖3所示。圖3中,ATA6625為LIN收發(fā)器[2],其設(shè)計符合LIN 2.0規(guī)范和SAEJ2602標準,該芯片的ESD穩(wěn)定性高于6kV。ATA6625還包括一個超低壓降型穩(wěn)壓器,穩(wěn)壓器的輸出為5V,電流可達50mA,可為應(yīng)用方案中的MCU和其他芯片提供電源,能有效降低系統(tǒng)的成本。
?

圖3中,LINH為LIN總線接口,Vbat由12V蓄電池供電。D3和D4防止保護蓄電池過載。LIN總線端的電源與PC機的USB端口是隔離的。LIN總線收發(fā)器和單片機之間通過光耦PS9701進行數(shù)據(jù)交換。當本節(jié)點為主節(jié)點時,接上1kΩ電阻R13以提高總線的驅(qū)動能力;當本節(jié)點為從節(jié)點時,應(yīng)去掉此電阻。
由于LIN收發(fā)芯片的RX管腳和FAULT管腳驅(qū)動能力有限,不能直接驅(qū)動PS9701,因此,在LIN收發(fā)器至光隔驅(qū)動回路上添加了74LVC2G04反相器。
3.4?兩套電源系統(tǒng)隔離部分的硬件設(shè)計
為了防止PC機的USB接口的損壞,在PC機的5V電源和汽車蓄電池的供電系統(tǒng)之間加入了光電隔離,其電路如圖4所示??紤]到LIN總線的波特率上限為20Kb/s,電路中采用了PS9701高速光隔,該光電隔離上升時延僅為50ns。
?

4 LIN總線和USB總線通信轉(zhuǎn)換的軟件設(shè)計
USB-LIN接口的總體程序設(shè)計框圖如圖5所示,整個程序分為主程序和中斷服務(wù)程序兩部分。其中,LIN總線的主任務(wù)狀態(tài)機在定時中斷服務(wù)程序中實現(xiàn),從任務(wù)狀態(tài)機在LIN總線的上升沿中斷服務(wù)程序中實現(xiàn)。
?

USB-LIN接口的數(shù)據(jù)緩沖區(qū)的設(shè)計如圖6所示,主要包括LIN端數(shù)據(jù)交換、USB端的數(shù)據(jù)交換以及LIN端用戶緩沖區(qū)與USB端用戶緩沖區(qū)之間的數(shù)據(jù)解析和交換。
?

4.1 LIN總線的軟件實現(xiàn)
LIN總線軟件部分包括網(wǎng)絡(luò)管理的實現(xiàn)、主/從任務(wù)狀態(tài)機的實現(xiàn)[3]、調(diào)度表和信息綁定表的更新等。其中,主任務(wù)只分布在主節(jié)點上,而從任務(wù)分布在所有的節(jié)點上。LIN2.0協(xié)議規(guī)定了主/從任務(wù)的狀態(tài)轉(zhuǎn)移圖[3]。主任務(wù)的核心工作是產(chǎn)生正確的報文頭,報頭傳輸是報文傳輸?shù)囊龑?,其傳輸機制基于時間調(diào)度表,調(diào)度表規(guī)定了幀傳送的順序和兩幀間的時間間隔。LIN主任務(wù)的調(diào)度原理如圖7所示。其中,定時器1作為調(diào)度的時間片定時器,設(shè)定為1ms;定時器0作為幀超時定時器,其設(shè)定依賴于節(jié)點的時鐘頻率和通信的波特率。
?

程序設(shè)計中涉及到調(diào)度表NormalTable和信息綁定表L_HandleList。處理句柄handle實現(xiàn)了這兩個重要表的聯(lián)絡(luò)。調(diào)度表給出了每個幀的時間片,主任務(wù)根據(jù)該表循環(huán)啟動幀的傳輸。調(diào)度表包括:幀的處理句柄handle、幀的PID和該幀的時間片。調(diào)度表只保存在主節(jié)點之中。
信息綁定表L_HandleList定義了一個節(jié)點對接收到的具有某個特定PID的幀的響應(yīng)方式,綁定表將PID和本地的數(shù)據(jù)緩沖區(qū)進行了綁定,從而實現(xiàn)了主節(jié)點對從節(jié)點緩沖區(qū)的直接操作,或者實現(xiàn)了對從節(jié)點上的物理量的直接操作。主從節(jié)點上都保存有綁定表,依據(jù)此表可知道某個信息的長度、流向和存放在本地的位置,以決定是否接收此信息,或是否響應(yīng)此信息的召喚和相應(yīng)方式。
程序中,L_HandleList為結(jié)構(gòu)型數(shù)組,包括:(1)幀的數(shù)據(jù)流向,分為接收和發(fā)送兩種模式;(2)幀數(shù)據(jù)在本節(jié)點中的存儲指針;(3)響應(yīng)幀的長度,不包括校驗場;(4)用于配置的消息ID;(5)PID的存儲指針。其中,第(4)項和第(5)項用于為從節(jié)點中的某個幀分配PID。每個節(jié)點都保存有各自的信息綁定表,最多可保存20組。
調(diào)度表NormalTable和信息綁定表L_HandleList都保存在PIC18F2550的EEPROM中,這兩個表通過PC機的USB口進行更新。
LIN驅(qū)動程序主要實現(xiàn)以下七個重要的API函數(shù)。
(1) void l_ifc_init_MyLinIfc(void),對本節(jié)點的LIN總線驅(qū)動程序進行初始化。
(2) unsigned int l_ifc_read_status_MyLinIfc,返回LIN驅(qū)動器的狀態(tài)。
(3) void l_ifc_wake_up_MyLinIfc(void),請求LIN總線喚醒。
(4) void l_ifc_goto_sleep_req_MyLinIfc,強制命令LIN總線上的從節(jié)點進入睡眠狀態(tài)。
(5) unsigned char ld_AssignFrameID(l_u8 *l_NAD),給指定的幀分配PID。
(6) void l_ifc_rx_MyLinIfc(void),根據(jù)本節(jié)點的配置處理整個數(shù)據(jù)交換,包括數(shù)據(jù)收發(fā)、傳輸超時處理和校驗等。如果節(jié)點為主節(jié)點,則依據(jù)主/從任務(wù)狀態(tài)機實現(xiàn)主/從任務(wù)的功能;如果節(jié)點為從節(jié)點,則只需依據(jù)從任務(wù)狀態(tài)機實現(xiàn)從任務(wù)的功能。
(7) unsigned char l_ifc_pid_to_handle(void),根據(jù)給定的PID,指定該PID的幀對應(yīng)的處理句柄,從而在信息綁定表中查找該幀的處理方法。
4.2 USB總線的軟件實現(xiàn)
PIC18F2550的USB接口可采用通用模式或者CDC模式[4]與PC機進行數(shù)據(jù)交換。雖然通用模式擁有全速USB速率,但是PC機端的驅(qū)動程序?qū)崿F(xiàn)起來較為復雜。USB-LIN接口中處理的是低速的LIN通信,不需要1Mb/s以上的通信速率。因此,單片機中的USB接口不采用通用模式,而采用CDC模式。
在CDC模式下,CDC子類實現(xiàn)虛擬串口通信的協(xié)議[4]。由于大部分的操作系統(tǒng)都帶有支持CDC類的設(shè)備驅(qū)動程序,可自動識別CDC類的設(shè)備,因此在PC機端可不用編寫USB的驅(qū)動程序,只需將接口視為虛擬串口即可。單片機的USB口工作于CDC模式時,最高的通信速率為1Mb/s,完全可以滿足LIN總線數(shù)據(jù)交換的要求。
Microchip為PIC18F2550提供了完整的USB/CDC類固件,主要實現(xiàn)以下API函數(shù)[5]。
(1) void putrsUSBUSART(const rom char *data),將字符串從程序存儲區(qū)寫到USB端口。
(2) void putsUSBUSART(char *data),將字符串從數(shù)據(jù)存儲區(qū)寫到USB端口。
(3) void mUSBUSARTTxRom(rom byte *pData, byte len),將一個特定長度的字符串從程序存儲區(qū)中寫到USB端口。
(4) void mUSBUSARTTxRam(byte *pData, byte len),將一個特定長度的字符串從數(shù)據(jù)存儲區(qū)中寫到USB端口。
(5) BOOL mUSBUSARTIsTxTrfReady(void),檢查CDC類是否有更多的數(shù)據(jù)要發(fā)送。
(6) byte getsUSBUSART(char *buffer, byte len),將數(shù)據(jù)從USB/CDC緩沖區(qū)中拷貝到用戶緩沖區(qū)。
(7) byte mCDCGetRxLength(void),獲得從USB/CDC緩沖區(qū)中拷貝到用戶緩沖區(qū)的數(shù)據(jù)的實際長度。此函數(shù)緊跟在getsUSBUSART之后調(diào)用。
在調(diào)用putrsUSBUSART、putsUSBUSART、mUSBUSAR-TTxRam和mUSBUSARTTxRom之前,先要調(diào)用mUSBUSA
RTIsTxTrfReady檢查固件是否準備好發(fā)送數(shù)據(jù)到USB口,調(diào)用getsUSBUSART時要求目標緩沖區(qū)的長度要大于USB/CDC緩沖區(qū)的長度。
本文給出了LIN接口與USB接口轉(zhuǎn)換的設(shè)計方案,介紹了基于LIN總線和USB總線的接口芯片的通信轉(zhuǎn)換的硬件設(shè)計,并給出了軟件設(shè)計方法。該方案已經(jīng)用于BCM模塊的測試和LIN 網(wǎng)絡(luò)協(xié)議的教學培訓中,具有一定的實用價值。
參考文獻
[1]?PIC18F2455/2550/4455/4550 Data sheet,http://www.microchip.com,2007.
[2] ?ATA6623/ATA6625 Data sheet.http://www.atmel.com/,2008.
[3] ?LIN specification package reversion 2.0. http://www.linsubbus.org/,2003.
[4] ?吳明琪,馬潮.嵌入式系統(tǒng)的USB虛擬串口設(shè)計.單片機與嵌入式系統(tǒng)應(yīng)用,2005,(4).
[5] ?Migrating Applications to USB from RS-232 UART with?minimal impact on PC software.http://www.microchip.com,?2004.
