嚴正國 王海強 張富華
基于C8051F060單片機的CAN-USB的接口設(shè)計
西安石油大學(xué) 嚴正國
西京學(xué)院 王海強
西安石油大學(xué) 張富華
【摘要】本文提出了基于C8051F系列單片機的CAN總線與USB總線的接口設(shè)計方案,創(chuàng)新地采用了Silicon公司生產(chǎn)的C8051F060單片機作為主控芯片實現(xiàn)接口的數(shù)據(jù)傳輸。該芯片集成了CAN控制器,可以達到接口小型化,低成本的目的。本文給出了接口的系統(tǒng)結(jié)構(gòu),硬件設(shè)計電路和軟件設(shè)計程序。在實際運用中,該接口模塊工作穩(wěn)定,能夠較好地實現(xiàn)CAN總線與USB總線的數(shù)據(jù)傳輸。
【關(guān)鍵詞】CAN總線;USB總線;C8051F060單片機;接口設(shè)計
Abstract:This paper presents a new design solution of the interface between CAN bus and USB bus based on the series of C8051F MCU,which innovatively used the C8051F060 MCU produced by the Silicon company as the main control chip to realize the function of data transmission.The main chip has integrated the CAN controller,thus achieving the miniaturization of the interface and the low cost.This paper presents the system structure,hardware design circuit and software design procedure.The interface works stably in the practical application and achieves the data transmission between the CAN bus and USB bus well.
Key words:CAN bus;USB bus;C8051F060 MCU;interface design
引言
CAN總線是為了解決汽車中眾多控制與測試之間的數(shù)據(jù)交換開發(fā)的一種串行數(shù)據(jù)通信協(xié)議,具有通信速率高、傳輸距離遠、糾錯能力強、以及性價比高等特點,是目前國際上應(yīng)用最廣泛的現(xiàn)場總線之一,廣泛地應(yīng)用到了其他領(lǐng)域。
USB總線是通用的串行總線,基于通用連接技術(shù),實現(xiàn)計算機外設(shè)的快速簡單連接,并且它可以為外設(shè)提供電源,傳輸速率較快,已經(jīng)成為計算機上的標(biāo)準(zhǔn)接口。
通過USB實現(xiàn)CAN總線與計算機的直接通信,將極大地方便CAN總線的運用。傳統(tǒng)的轉(zhuǎn)換一般采用單片機和CAN控制器配合完成兩種總線的數(shù)據(jù)交換,Silicon公司生產(chǎn)的C8051F060單片機是完全集成的混合片上系統(tǒng)型MCU,集成了CAN控制器,能夠簡單方便地實現(xiàn)接口的設(shè)計。
1.硬件設(shè)計
硬件設(shè)計包括兩部分,CAN接口電路和USB接口電路。主控制器芯片采用集成了CAN控制器的C8051F060單片機,CAN接口電路是通過SN65HVD230收發(fā)器實現(xiàn)CAN總線與主控制器的連接,USB接口電路是通過CP2102橋接電路來實現(xiàn)USB總線與主控制器的連接。
1.1 CAN接口電路
一個CAN總線接口由3個部分組成,它們分別對應(yīng)于CAN總線的物理層、數(shù)據(jù)鏈路層和應(yīng)用層。最上層為微控制器,主要負責(zé)上層應(yīng)用及系統(tǒng)控制,包括CAN協(xié)議的應(yīng)用協(xié)議的實現(xiàn),協(xié)調(diào)各系統(tǒng)設(shè)備的工作。中間層為CAN控制器,負責(zé)處理數(shù)據(jù)幀,完成數(shù)據(jù)的打包、解包、錯誤界定,并提供報文緩沖和傳輸濾波。最底層為CAN收發(fā)器,主要是進行接口電平的轉(zhuǎn)換、接口電氣特性的處理。
圖1 CAN接口電路
獨立的CAN控制器需要外接一個微處理器,在CPU的控制下才能運行。C8051F060集成了微處理器和CAN控制器,大大簡化了應(yīng)用系統(tǒng)的硬件設(shè)計,系統(tǒng)的可靠性也有很大的提高。CAN收發(fā)器采用TI公司生產(chǎn)的SN65HVD230型電路,適用于較高通訊速率、良好抗干擾能力和高可靠性CAN總線的串行通信。在CAN總線的兩端需要接一個120Ω匹配電阻,提高了通信的抗干擾能力和可靠性。CAN接口電路如圖1所示。
1.2 USB接口電路
USB總線與主控制器的連接是通過USB-UART橋接電路實現(xiàn)的。主控制器集成的異步串行口UART通過橋接電路連接USB口來實現(xiàn)數(shù)據(jù)傳輸。CP2102是Silicon公司推出的USB-UART橋接電路。該電路的集成度高,內(nèi)置USB2.0全速功能的控制器和收發(fā)器以及異步串行數(shù)據(jù)總線,無須任何外部的USB器件。通過驅(qū)動程序?qū)SB口虛擬成COM口以達到擴展的目的,無須修改現(xiàn)有的軟件和硬件就可以通過USB向基于CP2102的器件傳輸數(shù)據(jù)。USB接口電路如圖2所示。
圖2 USB接口電路
2.軟件設(shè)計
系統(tǒng)的軟件設(shè)計主要功能是實現(xiàn)單片機集成的CAN控制器與異步串行口UART之間的通信。通信程序的設(shè)計主要考慮兩方面的問題,第一、主控制器CPU對CAN控制器的操作比較復(fù)雜,所以必須明確CAN寄存器各部分的功能,數(shù)據(jù)在MCU、CAN模塊和總線之間的通路和通信協(xié)議。第二、CAN控制器和異步串行口之間的數(shù)據(jù)傳遞。
2.1 CAN寄存器和協(xié)議
CAN寄存器分為CAN控制器協(xié)議寄存器,消息對象接口寄存器和消息處理寄存器。CAN控制器協(xié)議寄存器用于配置CAN控制器,處理中斷,監(jiān)視總線狀態(tài),將CAN控制器置于測試模式。消息對象接口寄存器有兩組,用于配置向CAN總線發(fā)送和從CAN總線接收數(shù)據(jù)的32個消息對象。消息處理器寄存器提供中斷、錯誤、發(fā)送/接收請求和新數(shù)據(jù)信息。
圖3 數(shù)據(jù)通路
為了避免消息對象與總線數(shù)據(jù)交換時,因CPU的介入而破壞某些數(shù)據(jù),CPU不能直接對消息對象讀/寫操作,必須通過消息對象接口寄存器(IFx)對消息對象進行操作。CPU對IFx寫操作完畢后,IFx保存了消息對象的內(nèi)容,當(dāng)消息對象與總線不進行數(shù)據(jù)交換時,IFx再將內(nèi)容更新到消息對象上。同時,CPU對消息對象接口寄存器的訪問也是間接的,通過CAN0ADR和CAN0DAT寄存器訪問,不能直接訪問。綜上所述,數(shù)據(jù)通路示意圖如下圖3所示。
2.2 程序設(shè)計
軟件主要包括主程序模塊和中斷接收模塊。主程序包括初始化和查詢發(fā)送兩部分。串口和CAN通信的接收程序可在中斷處理程序中完成而不需要與主程序發(fā)生交互。
主程序的初始化包括CAN口和串口的初始化,開啟串口模塊和CAN口模塊的中斷。CAN模塊的初始化的部分程序如下所示:
clear_msg_objects();//將所有消息清0
init_can_rx (0x01,1);//初始化接收
init_can_tx (0x02,2);//初始化發(fā)送
EIE2 |= 0x20;//CAN中斷開啟
EA = 1;//全局中斷開啟
SFRPAGE = CAN0_PAGE;//指向CAN0頁面
CAN0CN=0X41;//CCE置1,重新配置波特率
CAN0ADR=BITREG;
CAN0DAT=0x7FC0;//調(diào)波特率125k
start_can();//結(jié)束初始化,開始CAN通信
圖4 主程序流程
主程序的查詢發(fā)送主要是通過查詢標(biāo)志位來進行。如果總線上有數(shù)據(jù),就會進入程序中斷,通過中斷處理程序改變標(biāo)志位。主程序查詢到標(biāo)志位置位,進入發(fā)送主程序,CAN接口接收到的數(shù)據(jù)送到串口發(fā)送程序,同樣的,串口接收到的數(shù)據(jù)傳送到CAN接口發(fā)送程序,兩者發(fā)送之后都需要清除接收標(biāo)志位,等待下一次的接收,主程序流程如圖4所示。
當(dāng)CAN總線上有數(shù)據(jù)時,發(fā)出中斷請求,中斷處理程序通過狀態(tài)寄存器來判斷接收中斷,中斷處理程序接收數(shù)據(jù),并置位標(biāo)志位,中斷結(jié)束,開放中斷。CAN接口接收到的數(shù)據(jù)在主程序中送入串口發(fā)送緩沖區(qū)。同理,串口接口緩沖區(qū)有數(shù)據(jù),就會進入串口接收中斷,接收數(shù)據(jù)并置位標(biāo)志位,中斷結(jié)束,開放中斷。串口接收的數(shù)據(jù)在主程序中送入CAN接口發(fā)送緩沖區(qū),發(fā)送到總線。
3.結(jié)論
CAN總線和USB總線以其獨特的設(shè)計和優(yōu)點廣泛地應(yīng)用在各行各業(yè),兩者的互相通信成為發(fā)展的趨勢。本文設(shè)計的CAN-USB的接口設(shè)計創(chuàng)新地采用了內(nèi)置CAN控制器的C8051F060單片機和USB-UART橋接電路芯片CP2102,接口電路簡單,應(yīng)用方便,很好地完成了兩者之間的數(shù)據(jù)通信。
參考文獻
[1]C8051F060/1/2/3/4/5/6/7混合信號ISPFLASH微控制器數(shù)據(jù)手冊.
[2]張培仁.CAN總線設(shè)計及分布式控制[M].北京:清華大學(xué)出版社,2012.
[3]童長飛.C8051F系列單片機開發(fā)與C語言編程[M].北京:北京航空航天大學(xué)出版社,2005.
[4]李科亮,郭世明,蘇玉香,等.基于P87C591單片機的CAN-232轉(zhuǎn)換接口[J].儀表技術(shù)與傳感器,2009(3).
作者簡介:嚴正國(1976—),男,陜西渭南人,碩士,研究生導(dǎo)師,研究方向:數(shù)字信號傳輸及處理。