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