摘要:根據(jù)汽車電子開發(fā)的需要,設(shè)計(jì)了基于Freescal公司MC9S08DZ60的USB-CAN總線協(xié)議轉(zhuǎn)換器,設(shè)計(jì)了協(xié)議轉(zhuǎn)換器的硬件電路和軟件,使用NI-VISA編寫了上位機(jī)的USB驅(qū)動(dòng)程序。
關(guān)鍵詞:USB;CAN;協(xié)議轉(zhuǎn)換器;NI-VISA
1 引言
CAN網(wǎng)絡(luò)已經(jīng)普遍應(yīng)用到中高級(jí)車輛中,并且在低級(jí)車中的應(yīng)用也不斷拓展。很多汽車電子模塊都需要通過CAN總線和其他模塊進(jìn)行通信。在進(jìn)行相關(guān)電子模塊的開發(fā)中,需要使用上位機(jī)中的監(jiān)測(cè)、分析程序?qū)AN總線的數(shù)據(jù)進(jìn)行分析,以便確定通信是否正常,發(fā)送的數(shù)據(jù)是否正確。這時(shí)就需要一個(gè)轉(zhuǎn)換器將CAN總線的數(shù)據(jù)轉(zhuǎn)換后提供給上位機(jī)以供分析。實(shí)際開發(fā)中一般使用普通PC機(jī)及筆記本電腦作上位機(jī), PC機(jī)或筆記本提供的PCI、RS232及USB接口都可以比較方便的經(jīng)過轉(zhuǎn)換器和CAN總線相連,由于USB的易擴(kuò)展性、傳輸?shù)目焖傩约盁岵灏涡?,考慮到硬件資源、傳輸速率及現(xiàn)場(chǎng)調(diào)試的方便性,選用USB是最合適的。
2 硬件設(shè)計(jì)
系統(tǒng)硬件主要包括主控制器、USB接口芯片及CAN接口芯片;以這些芯片為核心組成相應(yīng)的主控制電路、USB接口電路及CAN接口電路。下面分別介紹各電路的設(shè)計(jì)。
MCU選用Freescal的汽車級(jí)8位微控制器MC9S08DZ60(以下簡(jiǎn)稱DZ60),DZ60的主要性能參數(shù)為:FLASH ROM :60K; RAM:4K; EEPROM:2K;VCC:+5V;外圍接口:IIC、SPI、SCI、MSCAN。MSCAN 是DZ60內(nèi)部集成的CAN通信控制器,MSCAN 使用先進(jìn)的緩沖器安排,實(shí)現(xiàn)了可預(yù)測(cè)的實(shí)時(shí)性,它支持 Bosch 規(guī)范CAN 2.0A/B 協(xié)議。這樣我們就不需要外接CAN控制器,既節(jié)約了硬件成本,又簡(jiǎn)化了軟件設(shè)計(jì)。
USB 接口芯片一般分為兩大類:一種是芯片內(nèi)部集成了微處理器的;一種是不帶微處理器的. 后一種接口芯片成本較低、選擇靈活方便、可靠性高. PDIUSBD12(以下簡(jiǎn)稱為D12)就是一款不帶微處理器的性能優(yōu)化的USB 接口器件,其通過高速并口和DMA傳輸與微控制器進(jìn)行通行。它采用模塊化的方法實(shí)現(xiàn)USB接口,方便不帶USB接口的外設(shè)添加USB功能。D12完全符合USB1.1 規(guī)范. 對(duì)于我們的系統(tǒng),USB1.1的速度完全滿足要求。
CAN通訊接口芯片選用ST公司的專用芯片L9616,此款芯片支持通用標(biāo)準(zhǔn)ISO/DIS 11898,速率可達(dá)1Mbps。
系統(tǒng)的硬件原理圖如圖2.1所示。
DZ60有兩個(gè)VDD和VSS,必須在每個(gè)VDD和VSS之間接入電容,以提高電源電壓的穩(wěn)定性和抗干擾能力。本系統(tǒng)還設(shè)計(jì)了一個(gè)六針的在線編程接口,可以進(jìn)行軟件的在線更新和升級(jí)。
在系統(tǒng)中D12與DZ60采用了單地址/數(shù)據(jù)總線連接方案。D12的并口和DZ60的PTD口連接,D12的RD_N(讀選通,低有效)和WR_N(寫選通,低有效)引腳分別連接到DZ60的PTG3和PTG4引腳,DZ60通過PTG3和PTG4發(fā)出讀寫命令來實(shí)現(xiàn)對(duì)D12的讀寫。 D12的地址位A0連接DZ60的RA0,A0=0時(shí)選擇命令,A0=1時(shí)選擇數(shù)據(jù)。INT_N是USB中斷請(qǐng)求腳,用來向微控制發(fā)出USB中斷請(qǐng)求。USB 設(shè)備有兩種供電方式:總線供電方式和自供電方式。 我們采用了總線供電方式, 這種方式減少了額外的電源電路設(shè)計(jì),方便實(shí)用。
CAN接收器L9616的TXD和RXD分別和DZ60的TxCAN和RxCAN連接,進(jìn)行數(shù)據(jù)的傳輸。C_H和C_L分別接到CAN網(wǎng)絡(luò)的CAN_H和CAN_L,R10是CAN網(wǎng)絡(luò)匹配電阻。
3軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)包括三部分:轉(zhuǎn)換器軟件、上位機(jī)USB驅(qū)動(dòng)程序及上位機(jī)數(shù)據(jù)監(jiān)測(cè)分析程序的設(shè)計(jì)。
3.1轉(zhuǎn)換器軟件設(shè)計(jì)
主控制器的主要功能:一是對(duì)集成的CAN控制器和D12初始化,為數(shù)據(jù)傳輸做好準(zhǔn)備;二是通過CAN接口和USB接口接收和輸出數(shù)據(jù),以及對(duì)數(shù)據(jù)進(jìn)行必要的轉(zhuǎn)換,使上位機(jī)能順利和目標(biāo)系統(tǒng)進(jìn)行數(shù)據(jù)通信。固件程序的設(shè)計(jì)還要考慮協(xié)調(diào)好USB接口電路和CAN接口電路,使系統(tǒng)在穩(wěn)定、可靠的情況下,達(dá)到最大的傳輸速率;另外還要增加軟件系統(tǒng)的可擴(kuò)展性和硬件無關(guān)性,方便以后的更新。
根據(jù)USB協(xié)議,任何傳輸都是從主機(jī)開始的,微控制器(這里是DZ60)等待主機(jī)的命令。通信時(shí)主機(jī)首先發(fā)令牌給D12,D12收到令牌后向DZ60發(fā)出中斷請(qǐng)求。DZ60收到中斷請(qǐng)求后進(jìn)入中斷服務(wù)程序,讀取D12中斷寄存器并判斷令牌的類型,然后執(zhí)行相應(yīng)的操作。
由于DZ60內(nèi)置了CAN控制器(MSCAN),并且MSCAN使用先進(jìn)的緩沖器安排,實(shí)現(xiàn)了可預(yù)測(cè)的實(shí)時(shí)性,另外 Freescal提供了初始化和讀寫CAN數(shù)據(jù)的底層函數(shù),我們只要在系統(tǒng)中調(diào)用相應(yīng)的函數(shù)即可,這些都極大簡(jiǎn)化了應(yīng)用軟件的設(shè)計(jì)。
經(jīng)過以上分析,我們知道固件的結(jié)構(gòu)可以分為三部分:初始化、主循環(huán)和中斷服務(wù)程序。固件的程序流程圖如圖2.2所示。
3.2上位機(jī)USB驅(qū)動(dòng)程序設(shè)計(jì)
一般所使用的USB設(shè)備都沒有現(xiàn)成的驅(qū)動(dòng)程序,需要開發(fā)者根據(jù)系統(tǒng)硬件編寫相應(yīng)得驅(qū)動(dòng)程序。但是編寫驅(qū)動(dòng)程序需要熟悉上位機(jī)操作系統(tǒng)的軟件編寫環(huán)境及和驅(qū)動(dòng)相關(guān)的部分,這對(duì)于一般嵌入式領(lǐng)域的開發(fā)者來說有很大的難度,并且會(huì)消耗大量的時(shí)間。一個(gè)較好的解決方法是借助一些工具來開發(fā)USB驅(qū)動(dòng)程序,這將會(huì)縮短開發(fā)時(shí)間,降低開發(fā)難度。Labwindows/CVI就是開發(fā)USB驅(qū)動(dòng)的一個(gè)非常好的平臺(tái),它是NI(National Instruments,美國(guó)國(guó)家儀器公司)推出的面向計(jì)算機(jī)測(cè)控領(lǐng)域的虛擬儀器軟件開發(fā)平臺(tái),是一個(gè)基于標(biāo)準(zhǔn)c的開放的開發(fā)環(huán)境,很容易將開發(fā)的驅(qū)動(dòng)程序集成到應(yīng)用系統(tǒng)中。
從7.0版本新增的VISA包含有VISA驅(qū)動(dòng)程序生成向?qū)?,更加方便了USB驅(qū)動(dòng)程序的開發(fā)。利用VISA開發(fā)USB驅(qū)動(dòng)主要是為系統(tǒng)創(chuàng)建INF文件,流程如下。在系統(tǒng)中安裝完NI_VISA后,從開始菜單中選擇程序>>National Instrument>> VISA >> VISA Driver Developer Wizard,進(jìn)入驅(qū)動(dòng)程序開發(fā)向?qū)?,這個(gè)向?qū)Э梢詾镻XI/PCI或USB設(shè)備創(chuàng)建INF文件,在向?qū)У牡谝粋€(gè)對(duì)話框中選中USB即開始創(chuàng)建USB的INF文件,后面按照向?qū)У奶崾咎钊胛覀兪褂玫腢SB設(shè)備的信息,將在所選擇的路徑下生成相應(yīng)的INF文件。把生成的INF文件安裝就可以使用USB設(shè)備了。
USB設(shè)備啟動(dòng)后,在應(yīng)用程序中添加VISA的相關(guān)I/O接口軟件,就可以實(shí)現(xiàn)USB通訊了。主要函數(shù)介紹如下:函數(shù)ViOpenDefaultRM得到VISA資源管理器句柄;函數(shù)ViOpen打開USB設(shè)備句柄;函數(shù)ViSetAttribute設(shè)置發(fā)送和接收端點(diǎn)屬性;函數(shù)ViGetAttribute查看結(jié)果;函數(shù)ViRead和Viwrite進(jìn)行讀寫數(shù)據(jù);函數(shù)ViClose釋放儀器和資源管理器句柄。
3.3上位機(jī)數(shù)據(jù)監(jiān)測(cè)分析程序的設(shè)計(jì)
上位機(jī)數(shù)據(jù)監(jiān)測(cè)分析程序主要用來實(shí)時(shí)顯示數(shù)據(jù)的傳輸,根據(jù)需要保存數(shù)據(jù),以便可以離線分析。
結(jié)論
采用基于NI-VISA驅(qū)動(dòng)的USB接口使應(yīng)用系統(tǒng)的設(shè)計(jì)非常容易,開發(fā)難度低,開發(fā)出的系統(tǒng)穩(wěn)定可靠。采用基于Freescal的汽車級(jí)微控制器,提高了系統(tǒng)在惡劣環(huán)境下的穩(wěn)定性。
參考文獻(xiàn)
[1] 周立功,等. PDIUSBD12 USB 固件編程與驅(qū)動(dòng)開發(fā)[M] . 北京: 北京航空航天大學(xué)出版社,2003.
[2] Philips PDIUSBD12Product data Rev.0820[Z] December,2001.
[3] Philips Corp. Firmware programming guide for PDIUSBD12 version 1.0[Z]. Philips Corp. September 1998.