數控同步現場總線與CAN總線網關的設計
NCSF數據幀頭部長18字節,圖4為NCSF數據幀的頭部結構。EthAREA六個字節填充0xFF,使NCSF幀能夠通過以太網交換設備;幀的總長度G_Length;兩個全局控制字G_CTRLI和G_CTRL2;①數據幀標識G_mtype;②幀類型標識G_stype;③從站計數器G_sno。
圖4 NCSF幀頭部結構
在DM9000的設備驅動和NCSF協議中,為了方便管理每個NCSF數據包及其控制信息,特設計數據結構ncsf buff。
在ncsf buff中next和prey使所有需發送的數據包構成一個雙向鏈表;cb為數據包狀態控制字,保存此數據包當前的狀態和控制信息,ncsf buff中最重要的幾個成員變量為head、data、tail和end,這四個成員變量指向同一連續內存區域的不同位置,其結構和關系如圖5所示。
圖5 ncsf_buff數據結構
在創建nesf_buff的同時會申請一段足夠容納最大的NCSF數據幀2倍的連續內存,head指向這一塊內存的首地址,end指向其尾部,data指向head+LEN的位置,在tail和data之間是NCSF有效數據,即在data前預留LEN長空閑空間,以便在此有效數據前擴展數據包頭部和其它數據,tail預留的空閑空間用于在尾部擴展有效數據。有效數據區前后預留的空閑空間可以避免在數據包擴展時重新分配內存和拷貝相關數據,由此提高了發送接收數據包的速度。
3.2 CAN總線接口模塊
MPC2515是一款獨立的CAN控制器,完全支持CAN2.0B技術規范。該器件能夠收發標準和擴展的數據幀以及遠程幀。MPC2515自帶兩個驗收屏蔽寄存器、六個驗收濾波寄存器,這些寄存器用于過濾不必要接收的報文,它們可以有效降低微控制器的負擔。MPC2515和S3C2440之間的連接通過SPI實現。
圖6中特別畫出CAN模塊的電源電路,為了增強CAN總線的抗干擾能力,MCP2515與總線收發器TJAl050之間采用高速光電耦合器6N137相連以實現電氣隔離,而為了實現完全的電器隔離,6N137兩端的電源也應該進行完全隔離,B0505S為它們提供了完全隔離的電源。
圖6 CAN模塊電路簡圖
S3C2440通過特定的SPI命令與MPC2515進行交互,命令包含復位、讀、寫、讀RX緩沖器、裝載TX緩沖器、請求發送報文、讀狀態和位修改命令等。通過這些命令S3C2440可以讀寫CAN控制器的狀態、發送CAN數據幀,以及重置CAN控制器。S3C2440通過SPI向MPC2515發出每個命令字節前,CS都需要被置為低電平。在任何操作期間CS都要保持低電平,操作完成后需要把CS置為高電平。
CAN模塊的初始化依次為:軟件復位、設置CAN總線的波特率、關閉中斷、設置驗收屏蔽寄存器和驗收濾波寄存器、切換MPC2515到正常模式、清空接收和發送寄存器,最后開啟相應的中斷。
can_frame是CAN數據幀發送隊列的數據結構。為了能夠兼容CAN擴展報文接收,在can_frame中ext_f標志為0表示為正常報文,為1表示為擴展報文;rtr_f對應數據幀仲裁場中的RTR位;pri為報文的優先級。為0按照先入先出順序出隊,少數緊急指令為1,此報文優先出隊被發送。
評論