《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > LIN總線與USB總線接口的設(shè)計(jì)與實(shí)現(xiàn)

LIN總線與USB總線接口的設(shè)計(jì)與實(shí)現(xiàn)

2009-04-09
作者:黃 麗1; 黃 輝2; 劉 敏3

  摘??要: 從系統(tǒng)整體結(jié)構(gòu)、硬軟件設(shè)計(jì)等方面論述了車(chē)身控制模塊的LIN總線接口與PC機(jī)的USB接口互連的設(shè)計(jì)方法。該設(shè)計(jì)已經(jīng)應(yīng)用到車(chē)身控制設(shè)備的測(cè)試之中。
  關(guān)鍵詞:? LIN總線; USB/CDC; 單片機(jī)

?

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

?

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

?


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

?


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

?


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

?


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

?


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

?


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

參考文獻(xiàn)
[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è)計(jì).單片機(jī)與嵌入式系統(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.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。