張 君,郭陽寬,祝連慶,那云,孟曉辰
(北京信息科技大學儀器科學與光電工程學院,北京 100192)
CAN總線具有傳輸距離遠、傳輸速率高、抗干擾能力強、易于組網、成本低等優(yōu)點[1]。目前CAN總線與PC連接普遍采用RS232、RS485和ISA等傳統(tǒng)接口技術,它們存在著傳輸速度慢、功耗高、安裝復雜等缺點。USB接口技術以其傳輸速度快、集成化程度高、支持熱插拔、即插即用、無需外接電源和連接簡單等優(yōu)點得到了廣泛的應用[2]。因此,使用USB作為CAN總線與PC連接的接口,將極大提高通信的速度和通信的可靠性。DSP具有成本低、功耗低、處理消息速度快等優(yōu)點,在通信和工業(yè)產品中得到了廣泛的應用。用DSP作為USB與CAN之間的微處理器,可以完成信息的實時讀取、處理和傳輸的功能。
1.1總體結構
如圖1所示,系統(tǒng)主要由USB總線接口、微處理器TMS320F2812和 CAN總線接口組成。
圖1系統(tǒng)框圖
其中USB總線接口負責PC和微處理器TMS320F2812之間消息的交換;CAN總線接口負責CAN節(jié)點與微處理器TMS320F2812之間消息的交換;微處理器TMS320F2812用于將USB總線接口和CAN總線接口連接起來,實現對USB與CAN總線上消息的讀取,處理和傳輸的功能。
1.2USB總線接口的硬件設計
USB總線接口的硬件電路連接框圖如圖2所示,主要由USB接口芯片CY7C68013和微處理器TMS320F2812構成。CY7C68013內部集成了USB2.0收發(fā)器、SIE、增強的8051微控制器和可編程的外圍接口。工作在48MHz晶振下時,指令執(zhí)行的速度遠快于標準的8051單片機。設計采用CY7C68013的SLAVE FIFO模式,在此模式下,CY7C68013內部CPU不參與消息的傳輸,而是由外部的微處理器直接控制CY7C68013 中FIFO消息的讀寫。微處理器TMS320F2812作為控制核心,產生USB的片選信號、端點選擇和讀寫信號控制CY7C68013進行消息傳輸。
圖2 硬件電路連接框圖
在圖2中,CY7C68013經過16位雙向數據總線FD連接至TMS320F2812,通過SLOE引腳控制輸出。FIFOADR[1:0]引腳用于選擇4個FIFO端點緩沖區(qū)中的一個與XD總線連接。SLRD和SLWR分別是FIFO的讀寫選通信號。FLAGA-C用于表示CY7C68013芯片內部數據緩沖區(qū)的狀態(tài),其直接與DSP的IO引腳相連。
1.3CAN總線接口的硬件設計
TMS320F2812芯片上集成了一個完整的增強型CAN控制器,即eCAN,其為CPU提供了完整的CAN2.0B協議,因此,設計電路時不必外接控制器就可以實現CAN總線的底層協議[3]。TMS320F2812內部CAN控制器只有通過CAN收發(fā)器才能與外部進行通信,因此采用外接PCA82C250作為CAN的收發(fā)器。PCA82C250是CAN協議控制器和物理總線間的接口,該器件對總線提供差動發(fā)送能力,對CAN控制器提供差動接收能力,負擔著節(jié)點邏輯電平和CAN總線差動電平之間的電平轉換任務。PCA82C250可以增大通信距離,提高系統(tǒng)的瞬間抗干擾能力,保護總線,降低射頻干擾實現熱防護[4]?;赥MS320F2812的CAN總線接口硬件電路如圖3所示。
圖3 CAN總線接口硬件電路圖
在圖3中,引腳CANRX,CANTX分別是DSP內部CAN控制器模塊的接收、發(fā)送引腳,其直接與PCA82C250的RXD和TXD引腳相連。CANH和CANL為差分輸出,2個引腳分別通過1個限流電阻與CAN總線相連,該限流電阻可以克服長線效應,減小通信介質中信號的反射。引腳RS用于工作模式的選擇。通過外接1個22 kΩ的斜率電阻,使系統(tǒng)工作在斜率模式下,該模式允許使用非屏蔽雙絞線或平行線作為總線,可降低射頻干擾。
系統(tǒng)軟件設計主要包括CY7C68013固件程序的設計、CAN程序的設計以及應用程序的設計。
2.1固件程序設計
固件程序是指存儲在USB接口芯片內部,用于輔助設備完成預期功能的程序。該程序主要完成USB接口芯片內部的初始化,處理主機的設備請求,以及完成外圍電路的控制等[5]。Cypress公司為CY7C68013的固件開發(fā)提供了固件程序框架和相關的庫文件,為了實現特定的功能,只需要在TD_Init()、TD_Poll()等函數中配置需要使用的端點,選擇合適的傳輸方式,添加實現功能的代碼等[6]。
系統(tǒng)上電后,固件程序首先初始化內部的狀態(tài)變量,然后調用初始化函數TD_Init(),當程序從此函數返回后,固件程序就會設置USB接口成為未配置的狀態(tài)并且使能中斷,接下來,在1 s的間隔內重新列舉設備,并直到端點0接收到設置封包為止。一旦設置封包被檢測到,固件程序將開始交互的任務調度[6]。為使系統(tǒng)能夠快速、可靠地傳輸消息,采用自動批量傳輸。將端點2設置為OUT型,負責傳輸PC的消息;將端點6設置為IN型,負責接收CAN總線上的消息。以下是在Keil C51環(huán)境下編寫的以C語言為基礎的固件程序的主要代碼。
void TD_Init(void)
{IFCONFIG |= 0xCB;//異步從FIFO模式,使用內部的48MHz的時鐘頻率
……..
//初始化端點2的輸出的程序段
EP2CFG = 0xA2;
EP2FIFOCFG=0x10;
// 初始化端點6的輸入的程序段
EP6CFG = 0xE2;
EP6FIFOCFG=0x0C;
……..
//FLAGA標志端點2的空,FLAGB標志端點6的滿
PINFLAGSAB=0xE8;
}
2.2CAN程序設計
系統(tǒng)CAN總線通信工作原理為:在程序初始化中,根據系統(tǒng)要求對CAN寄存器進行初始化;DSP對CAN總線通信的管理包括發(fā)送信息和接收信息。 TMS320F2812中的eCAN模塊主要由CAN協議內核和消息控制器構成。CAN協議內核主要完成消息解碼,并向接收緩沖發(fā)送解碼后的消息,同時根據CAN協議向總線發(fā)送消息,消息控制器決定接收到的消息的取舍[7]。對具體系統(tǒng)的總線通信軟件部分的設計包括應用層協議制定和實施,明確各節(jié)點的功能以及相互交互的數據,規(guī)定每位數據的確切含義以及要做的響應處理[5]。因此,在軟件設計中,主要完成3部分程序的設計:初始化程序、發(fā)送消息程序以及接收消息程序。
2.2.1初始化程序設計
CAN模塊初始化包括:時鐘使能,引腳定義,波特率設定等。首先,關閉看門狗,通過配置PLLCR、PCLKCR寄存器,對時鐘和頻率進行設置;其次,配置DSP寄存器GPMFUX的位6和位7,使CANTX和CANRX引腳作為CAN的通信接口引腳;然后,配置與波特率相關的3個寄存器(SCSR1、BCR1和BCR2);最后,對中斷進行設置,主要包括郵箱中斷屏蔽寄存器CANMIM以及郵箱中斷級別設置寄存器CANMIL的配置。只有當CAN總線控制器進入復位模式時,才能進行初始化,而當初始化完成后,控制器的復位標志必須清除。
2.2.2發(fā)送消息和接收消息程序設計
CAN總線采用“載波檢測,多主掌控、沖突避免(CSMA/CA)”的通信模式,以報文為單位進行消息傳輸[7]。發(fā)送消息的過程如圖4所示。發(fā)送消息時,需要初始化發(fā)送郵箱,主要包括設置郵箱使能寄存器CANME,郵箱數據方向寄存器CANMD,通過寄存器MBOXn.MSGID(n=0-31)設置發(fā)送郵箱的ID,初始化后,向消息寄存器中寫入要發(fā)送的消息,然后設置發(fā)送郵箱的TRS位為1,請求發(fā)送信息,等待傳輸響應位TA=1,表示成功發(fā)送消息,最后清除發(fā)送響應標志位,等待下次發(fā)送信息。
接收消息的過程如圖5所示。接收消息時,同樣需要初始化相應的接收郵箱,完成初始化后,如果接收郵箱的ID與CAN接口發(fā)送來的消息的ID匹配,并成功接收,則接收郵箱掛起寄存器RMP的相應位被置1,當CPU讀取完接收郵箱中的消息后,接收郵箱掛起寄存器的標志位被清除,等待下一條消息的接收。
圖4 發(fā)送消息流程圖
圖5 接收消息流程圖
2.3應用程序設計
系統(tǒng)中,TMS320F2812實現2個功能:實現USB與CAN之間雙向的消息傳輸;完成CAN控制器的初始化和輸出USB控制器所需要的信號。
圖6為消息由USB發(fā)向CAN的軟件流程圖。DSP采用查詢方式接收USB傳來的消息,當USB芯片端點2不為空時,DSP就將該端點緩沖區(qū)的消息讀進來進行處理,否則一直等待。經過處理后的消息放入到發(fā)送郵箱的緩沖區(qū)中,由CAN收發(fā)器發(fā)送給相應的CAN節(jié)點。圖7為消息由CAN發(fā)向USB的軟件流程圖。DSP通過中斷方式接收CAN總線上的消息,當中斷發(fā)生時,DSP響應中斷,把存儲在接收郵箱緩沖區(qū)中的消息讀取出來,經過處理后,發(fā)送給USB芯片端點6。當USB芯片端點6不滿時,DSP就將消息放入端點6的緩沖區(qū)中,從而傳送給上位機,否則一直等待。
圖6 USB至CAN流程圖
圖7 CAN至USB流程圖
系統(tǒng)測試如圖8所示。利用CAN調試器作為CAN總線接口的節(jié)點,與PCA82C250實時通信。PC通過Cypress USB Console界面向CAN節(jié)點發(fā)送消息并接收來自該節(jié)點的消息。USB接口工作在高速模式下,負責PC與DSP之間消息的傳輸。CAN收發(fā)器負責DSP與CAN節(jié)點之間消息的傳輸。首先,在固件程序中設置端點2是輸出,端點6是輸入。DSP中設置0號郵箱是發(fā)送,16號郵箱是接收。其次,通過USB界面把固件程序下載到CY7C68013中,并選擇CAN調試器的傳輸速率為800 kbit/s.
圖8系統(tǒng)測試方框圖
圖9USB Console發(fā)送消息界面
圖10CAN調試器接收消息界面
圖11CAN調試器發(fā)送消息界面
圖12USB Console接收消息界面
經過多次測試,當USB控制器工作在高速模式,CAN收發(fā)器工作在800 kbit/s的傳輸速率下,PC和CAN調試器均準確的收到消息。系統(tǒng)將USB的快速傳輸消息的特點和CAN總線通信的高性能、高可靠性的優(yōu)點結合起來,通過硬件電路的設計以及相關程序的編寫,實現消息快速、可靠的傳輸。
參考文獻:
[1]饒運濤,鄒繼軍,王進宏,等.現場總線CAN 原理與應用技術.北京:北京航空航天大學出版社,2007.
[2]劉吉名,裘東興.基于CY7C68013的USB2.0數據傳輸模塊設計.電子測量技術,2008(3):94-96.
[3]李洪波.基于DSP的CAN總線節(jié)點的研究與通信實現.哈爾濱理工大學學報,2005,2(10):72-75.
[4]佟俐,潘宏俠,胡田.基于TMS320F2812的CAN總線通信系統(tǒng).儀表技術與傳感器,2008(10):36-38.
[5]黃艷芳,趙晶.基于CAN-USB總線的機車滾動軸承檢測系統(tǒng)的設計.電子測量技術,2009,4(32):12-16.
[6]孟浩.基于EZ-USB FX2的CMOS圖像采集系統(tǒng)設計與實現.儀器儀表學報,2007,4(28):333-334.
[7]蔡昌新.eCAN接口的設計與實現.長江大學學報(自科科學版),2007,理工卷(2):93-95.