基于C8051F040的以太網-CAN轉換電路設計
2 系統(tǒng)硬件設計
系統(tǒng)電路如圖3所示,由CP2200、C8051F040、CAN驅動芯片的SN65HVD230等組成。其中CP2200與HR911105A組成以太網電路部分,SN65H-VD230單個組成CAN收發(fā)電路。工作原理如下,當CP2200收到以太網數據時,觸發(fā)C8051F040的INTO,C8051F040把數據從CP2200的接收緩沖區(qū)拷貝到其內存空間,然后通過SN65HVD230轉發(fā)到CAN網絡;當CAN數據有要發(fā)送到以太網,C8051F040收到數據后,就向CP2200的發(fā)送緩沖區(qū)轉發(fā)數據,最后由CP2200通過HR911105A發(fā)到以太網。
2.1 以太網部分電路
CP2200通過HR9011105A連接到以太網上。HR9011105A是HanRun公司生產的集以太網隔離變壓器、RJ-45接口和指示燈為一體的網絡連接器。CP2200的收發(fā)信號分別連接到HR9011105A的收發(fā)針腳,同時前者的LED控制信號LINK、ACK也都接到后者相應針腳。其中,LINK是連接成功指示燈,ACK是數據傳輸指示燈。CP2200與C8051F040的連接,首先數據和地址總線、讀寫信號相連接,其次CP2200的中斷引腳INT與C8051-F040的INT0引腳連接在一起,其片選CS陣腳接C8051F040的A15腳。CP2200的發(fā)送緩沖區(qū)地址為0x0000~0x07FF,接收緩沖區(qū)地址前部分與發(fā)送緩沖器重合,具體地址為0x0000~0x0FFF。當A15為低電平(CS也為低)時,C8051F040就選中CP2200,即CP2200的內部地址空間0x0000~0x0 FFF的外部映射地址為0x8000~0x8FFF。
CP2200發(fā)送數據包:通過使用自動寫(AutoWrite)寄存器將數據裝載到發(fā)送緩沖區(qū),并向內部存儲器TXGO寫1來發(fā)送數據包。一旦發(fā)送完成,會產生數據包已發(fā)送中斷,通知C8051F040。CP2200接收數據包:當MAC接收被使能且接收緩沖區(qū)未滿時,包接收會自動進行。一旦收到數據包,就會產生包接收中斷通知主機。主機可以用自動讀(AutoRead)接口讀取數據包。
2.2 CAN部分電路
C8051F040已經集成CAN控制器,電路只需1個CAN總線收發(fā)器。這里使用TI公司的SN65HVD230收發(fā)器。由于SN65HV230收發(fā)器具有強電磁干擾下寬共模電壓范圍的差動接收能力、交叉線保護、過熱保護、失地保護、過壓保護等卓越特性,所以設計中省去了高速光耦6N137以簡化電路設計,如果需要增強抗干擾能力,也可在C8051F040和SN65HV230之間增加2個高速光耦6N137,以滿足CAN的高速率通信。在CANH與CANL引腳各串聯1個5 Ω電阻與總線相連以起到限流作用。
3 軟件設計及協(xié)議轉換
在充分遵循以太網和CAN協(xié)議的基礎上,設計軟件程序,實現以太網數據與CAN數據之間的協(xié)議轉換與轉發(fā)。在本設計中,CAN與以太網都采用接收中斷,把數據包先存入緩沖區(qū),然后進一步分析數據。在數據接收時,不允許接收新的數據和中斷,直到數據完全接收后,才將接收緩沖區(qū)釋放。在數據發(fā)送時,先確認發(fā)送緩沖區(qū)空閑才寫入數據。由于兩者都有內部的發(fā)送和接收緩沖區(qū),主程序的主要任務就是實現數據的轉發(fā)以及通訊的握手協(xié)議。若定義,由CAN數據轉發(fā)為以太網數據,稱為上行通訊;由以太網數據轉發(fā)為CAN數據,稱為下行通訊。
相對于CAN總線的傳輸速率,本電路的以太網傳輸速率要高10倍,緩沖區(qū)大小也差很多。因此在下行通訊中,需要完成CAN數據的拆包和重新打包任務,屬較慢的操作,采用定時查詢方式發(fā)送。在上行通訊中,直接轉發(fā)CAN接收到CP2200發(fā)送緩沖區(qū)。
3.1 CAN總線程序
1)CAN總線發(fā)送任務 當以太網有新的數據轉發(fā)給CAN時,主程序通知此任務運行。讀出CP2200接收緩沖區(qū)中的數據到內存緩沖區(qū),然后分成不大于8字節(jié)的數據包,增加CAN協(xié)議包頭,送入C8051F040的發(fā)送緩沖區(qū)。
此任務耗時最長。CAN發(fā)送任務收到主程序的運行通知,開始讀取CP2200的接收緩沖區(qū)數據到內存,然后采用查詢發(fā)送方式,把數發(fā)送到C8051F040的發(fā)送緩沖區(qū)。在查詢過程中,如果C8051F040正處于發(fā)送中,將任務等待10 ms,然后再查詢一次,直到發(fā)送成功。
2)CAN總線接收任務 當CAN有數據接收,則將數據直接送人CP2200的發(fā)送緩沖區(qū),并通知其工作。此任務很少占用時間。在轉發(fā)過程中,由于CAN每次數據只有8字節(jié),而CP2200的發(fā)送緩沖區(qū)有2 K,CP2200的發(fā)送不影響CAN的接收。所以CAN接收中斷只需在本程序將CAN數據送入CP2200的發(fā)送緩沖區(qū)后就可打開。
3.2 以太網程序模塊
以太網接口模塊主要實現CP2200的驅動函數,主要包括初始化函數、幀發(fā)送函數和幀接收函數。
1)CP2200的初始化模塊 CP2200的初始化是進行CP2200寄存器的配置。CP2200占用C8051F040的外部RAM的地址,外部存儲器接口(EMIF)被設置在高端口(端口47),EMIFLE(XBR2·1)位被設置為0。然后依次進行下面的設置:配置端口引腳的輸出方式為推挽方式;配置對應EMIF引腳的端口鎖存器為休眠態(tài),設置為邏輯‘1’;選擇地址線和數據線的非復用方式;選擇存儲器模式為不帶塊選擇的分片方式:設置與片外存儲器或外設接口的時序。初始化時按以下步驟進行:等待復位引腳電平升高;MCU通過中斷請求信號得到振蕩器是否完成初始化;MCU查詢INT0來確定CP2200自身的初始化是否完成;禁止那些主處理器不監(jiān)視或不處理的事件的中斷;初始化物理層;用IOPWR寄存器使能所需要的活動(Ack)、連接(Link)LED;初始化媒體訪問控制器(MAC);配置接收過濾器。
2)以太網數據的發(fā)送接收模塊 C8051F040的外部中斷0和定時器0用于TCP/IP協(xié)議棧。由于C8051F040的處理速度、內部集成的資源有限,而TCP/IP協(xié)議種類繁多,不可能集成所有的TEP/IP協(xié)議,所以,使用裁剪后的TCP/IP協(xié)議。結合項目的實際需要,本設計中裁剪后的協(xié)議棧包括IP協(xié)議、ARP協(xié)議、ICMP協(xié)議、TCP協(xié)議。由于TCP協(xié)議是基于連接的協(xié)議,在正式收發(fā)數據前,必須和對方經過3次對話,建立可靠的連接,而且當數據從A端傳到B端后,B端會發(fā)送一個確認包給A端,所以,TCP協(xié)議適用于對可靠性要求較高的數據通信系統(tǒng)。而UDP協(xié)議是面向非連接的協(xié)議,不與對方建立連接,直接就把數據包發(fā)送過去,當數據從A端傳到B端后,B端不會發(fā)送一個確認包給A端,此協(xié)議適用于對可靠性要求不高的通信系統(tǒng)。由于該系統(tǒng)應用于在線數字識別系統(tǒng),可靠性要求高,所以,該系統(tǒng)采用了TCP協(xié)議。
4 結束語
本文描述了一種CAN數據與以太網數據轉換器的設計原理與電路構成。創(chuàng)新點在于:電路設計使用高度集成化的網絡接口芯片CP2200和集成CAN控制器的C8051F040,在不降低效率的同時,有效地節(jié)省空間與資源。在遵循CAN與以太網協(xié)議的基礎上,通過通訊的握手協(xié)議和簡化的以太網協(xié)議,實現了以太網數據與CAN數據的轉發(fā),順利地解決了以太網的高速性與CAN的低速率,以及兩者數據包之間的大小矛盾,能夠保證數據的完整和協(xié)議的可靠。本轉換器可廣泛應用于廠礦、油田等監(jiān)控設施的改進。
評論