基于ARM7的MVB_CAN網關設計
2 CAN總線與MVB總線協議轉換
CAN總線和MVB總線都屬于現場總線范疇,因此,它們都有自己的網絡分層結構。對于大多數現場總線,它們都包括物理層,數據鏈路層和應用層。
MVB有過程數據和消息數據之分。基于過程數據的網絡分層是三層(物理層、數據鏈路層、應用層),而基于消息數據的網絡分層則有7層。由于消息數據比較復雜且應用場合較少,因此,本文只討論過程數據。但實際上,有時也可以將MVB視為一個三層協議的網絡。
CAN網絡分層結構按照CAN總線協議來說,就只有兩層即物理層和數據鏈路層。但是涉及到具體的應用,它實際上也包括應用層。
為了實現兩種總線問的協議轉換,通常需要首先對他們的幀格式進行轉換,其主要原因是幀字節數大小不同,而幀的編碼解碼部分是由網卡硬件完成的;其次是對應用層的轉換,即通過一定的形式將CAN總線中表示過11位標志符的數據含義和MVB總線中過程變量的數據集對應起來,以實現數據之間的傳輸。
3 MVB-CAN網關的硬件實現
為了設計方便,本設計的CAN側采用三星公司生產的S3C4480微控制器,MVB側則采用MVBC01 ASIC專用芯片。
MVB通信控制器選用的MVBC01 ASIC專用芯片采用的是16 bit數據總線,該芯片同時可提供豐富的接口控制信號(如RDY、TMRDY等待信號),因此,可用于簡化與各種宿主CPU以及通信存儲器的接口設計。此外,MVBC01還內嵌有完整的MVB1類設備協議,其中,MVB物理層接口采用電氣短距離介質ESD+接口,系統信號通道則使用光耦來實現主系統與外界的電隔離,從而提高了系統的可靠性。另外,系統還使用RS 485芯片作為收發器,并使用過壓保護模塊來防止瞬間過壓對器件造成的損壞。MVB側的接口單元如圖4所示。本文引用地址:http://www.104case.com/article/156540.htm
MVBC01端口ICA (MVB Input Data ChannelA)和ICB(MVB Input Data Channel B)分別為MVB輸入數據通道A和輸入數據通道B,來自物理層收發器的MVB信號可由此端口送入MVBC01中。MVBC01的端口OC (MVB Output Data Channel)是MVB的數據輸出端口,數據經此端口可發送至物理層收發器。MVBC端口SF(Send Frame)的輸出信號可作為物理層的使能信號,該信號有效時,表示一個報文正在通過MVBC端口OC(MVB Output Data Channel)輸出。
本系統CAN側采用的是三星公司生產的S3C44BOX微控制器,S3C44BOX是韓國三星公司推出的一款基于ARM7TDMI核的16/32位RISC高性價比、低功耗的嵌入式微處理器。該芯片的片上資源非常豐富,因為它本身帶有可滿足CAN2.0B協議的CAN控制器,故可省去CAN控制器和單片機之間的硬件連接。
CAN收發器采用PHILIPS公司的PCA82C250。主要提供對總線的差動發送能力和對CAN控制器的差動接收能力。當微處理器對CAN控制器進行
相應配置后,收發器即可自動完成相應的CAN總線動作。
MVBC01的引腳除在MVBC01復位時作為復位完成信號外,還可作為MVBC01接收到網絡數據時的通知信號。它的狀態通過s3c44b0x的
傳送給S3C44BOX。S3C44BOX輪詢檢測
,若檢測到跳變發生且MVBC01判斷此信號為網絡控制數據接收事件,則通過I2C接口讀取MVBC01的數據。MVBC01的復位可通過微控制器的PA0端口觸發。當MVBC01復位完成后,再通過/INT通知微控制器。MVBC01的控制口配置成串行方式的I2C接口,S3C44BOX通過該接口對MVBC01的寄存器進行初始化和其它控制操作。其網關硬件連接圖如圖5所示。
4 軟件實現
由于MVB-CAN網關兩側連接的是兩個現場總線,因此,它們實際的工作就是通過對信息的重新封裝以使MVB總線和CAN總線能夠讀取和傳
輸。
由于CAN數據幀包含8個字節的數據,而MVB從幀最多包含256個字節的數據,因此,從CAN側接收到的數據要通過MVB傳輸,就需要按照一定的格式把CAN幀中的數據組合成MVB幀的數據格式;同樣,從MVB側接收到的數據要通過CAN傳輸,也需要按照一定的格式對MVB幀中的數據進行分幀處理。另外,為了實現透明傳輸,還需要把MVB側的過程數據的數據集與CAN側11位標志符對應起來。
本文采用的方案是建立一種規范的方式來定義MVB端的MVB各種變量的含義,如所在端的端口地址、長度、以及變量在數據集中的偏移量
等。而后再將這些信息按照一定的規則和CAN總線側的幀的標識符等信息對應成一個表格,這樣,在CAN側的數據接收就可以借助這個表格來
完成。這樣做的優點在于把一些必要的信息(位偏移、長度等)按照約定的形式來實現共享,因而不再需要在數據集中分出空間來傳輸一些(包
括長度和偏移等)信息。本文把表格定義為應用層轉換表(inbus-to-outbus或者out-to-inhus)。這里的端口指的是一種既可以被總線訪問,又可以被應用處理器訪問的存儲器,它在MVB中是用來尋址的,數據的發送是通過應用將數據放入端口,數據的接收則是從端口中取數據放到應用中去。至于端口與端口間的數據拷貝,則是通過主輪詢方式來實現的。當主節點輪詢到需要發送數據的端口(源端口)時,便會產生從源端口到宿端口(數據接收端口)的數據拷貝。數據集在MVB中其實就是一般的純數據,之所以稱它為集,主要是因為MVB中一幀的數據較長,通常我們把多個變量的信息放在一個集中(一個幀中1來傳輸,這樣做較為經濟。
評論