<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一種低成本的Ehternet嵌入式系統(tǒng)的設(shè)計

          一種低成本的Ehternet嵌入式系統(tǒng)的設(shè)計

          作者: 時間:2013-02-05 來源:網(wǎng)絡(luò) 收藏

          TJA1050為CAN收發(fā)器,是CAN協(xié)議控制器和物理總線之間的接口,可以對CAN總線提供差動發(fā)送和接收能力。微控制器對CAN控制器進(jìn)行相應(yīng)配置后,收發(fā)器自動完成相應(yīng)的CAN總線動作。有較強(qiáng)的抗干擾能力,最多節(jié)點數(shù)可達(dá)110個。

          采用高速光耦6N137實現(xiàn)與TJA1050之間的電氣隔離,保護(hù)控制系統(tǒng)電路,以滿足在最高速率1M/s下的電氣響應(yīng)。

          二、軟件設(shè)計

          整個系統(tǒng)的軟件分為兩部分:CAN控制器協(xié)議轉(zhuǎn)換模塊和以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊。其程序結(jié)構(gòu)如圖2所示。


          圖2 主程序結(jié)構(gòu)圖

          當(dāng)以太網(wǎng)應(yīng)用層有數(shù)據(jù)要發(fā)送到CAN節(jié)點時,首先由以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊從傳輸層數(shù)據(jù)報文中解析出完整的CAN協(xié)議數(shù)據(jù)包,存放在數(shù)據(jù)緩沖區(qū)A中,再通知總調(diào)度模塊,由它調(diào)用CAN控制器協(xié)議模塊將CAN協(xié)議數(shù)據(jù)包發(fā)送到CAN總線上。反過來,當(dāng)CAN設(shè)備有數(shù)據(jù)要發(fā)送到用戶層時,先由CAN控制器協(xié)議轉(zhuǎn)換模塊將完整的CAN協(xié)議數(shù)據(jù)包存放在數(shù)據(jù)緩沖區(qū)B中,再通知總調(diào)度模塊,由它調(diào)用以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊,將完整的CAN協(xié)議數(shù)據(jù)包作為應(yīng)用層數(shù)據(jù)封裝起來,再發(fā)送到以太網(wǎng)的應(yīng)用。

          (一)CAN控制器協(xié)議轉(zhuǎn)換模塊

          CAN通信協(xié)議有四種不同的幀格式,本系統(tǒng)中使用標(biāo)準(zhǔn)幀格式,其格式如表1所示。CAN首先接收仲裁域,根據(jù)仲裁域的內(nèi)容判斷所接收的信號是哪種幀格式,然后用戶將相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)域中進(jìn)行發(fā)送,或從數(shù)據(jù)域中讀取接收到的數(shù)據(jù)。

          表1 幀傳送格式

          CAN控制器協(xié)議轉(zhuǎn)換模塊主要由的寄存器讀程序CANRead()、寫程序、CANWrite()、初始化程序CANInit()、發(fā)送程序Txdsub()和接收程序Rxdsub()組成。
          選用CAN2.0A協(xié)議構(gòu)建CAN總線控制網(wǎng)絡(luò),對的初始化主要包括對控制寄存器CR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線定時寄存器BTR0/1和輸出控制寄存器OCR的設(shè)置。初始化完成后,由總調(diào)度模塊監(jiān)控SJA1000控制器。當(dāng)CAN總線上有數(shù)據(jù)到達(dá)時,通過中斷方式調(diào)用接收子程序Rxdsub(),把這一幀數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)B中,然后翻譯接收緩沖器。同樣,當(dāng)有按CAN2.0A協(xié)議格式組合成的一幀數(shù)據(jù)報文在數(shù)據(jù)緩沖區(qū)A中要發(fā)送到CAN總線上去時,總調(diào)度模塊調(diào)用CAN發(fā)送子程序Txdsub()發(fā)送。

          (二)以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊

          一個標(biāo)準(zhǔn)的以太網(wǎng)物理傳輸幀如表2所示(單位:字節(jié))。

          表2 以太網(wǎng)的物理傳輸幀結(jié)構(gòu)表

          除數(shù)據(jù)段的長度不定外,其他部分的長度都固定不變。以太網(wǎng)規(guī)定整個傳輸包的最大長度不能超過1514字節(jié)(14字節(jié)為DA、SA、TYPE),最小大能小于60字節(jié)。除去DS、SA、TYPE14字節(jié)外,還必須傳輸46字節(jié)的數(shù)據(jù),當(dāng)數(shù)據(jù)段的數(shù)據(jù)不足46字節(jié)時需填充,填充字符的個數(shù)不包括在長度字段里;超過1500個字節(jié)時,需拆成多個幀傳送。
          以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要負(fù)責(zé)從UDP數(shù)據(jù)包中解析出完整的CAN協(xié)議報文,存入數(shù)據(jù)緩沖區(qū)A中。同時,也可以將數(shù)據(jù)緩沖區(qū)B中的完整CAN協(xié)議報文封裝成UDP數(shù)據(jù)報,然后將其發(fā)送到以太網(wǎng)上。

          主程序工作流程圖如圖3所示,單片機(jī)首先初始化網(wǎng)絡(luò)設(shè)備。網(wǎng)卡IP地址和物理地址存于單片機(jī)的EEPROM中,單片機(jī)復(fù)位后首先讀取這些數(shù)據(jù)以初始化網(wǎng)卡。


          圖3 主程序工作流程圖

          網(wǎng)卡初始化完成以后,當(dāng)有數(shù)據(jù)從RJ45過來時,單片機(jī)對數(shù)據(jù)包進(jìn)行分析,如果是ARP(物理地址解析協(xié)議)數(shù)據(jù)包,則程序轉(zhuǎn)入ARP處理程序。如果是IP(網(wǎng)間協(xié)議)數(shù)據(jù)包且傳輸層使用UDP(用戶數(shù)據(jù)報協(xié)議),端口正確,則認(rèn)為數(shù)據(jù)報正確,數(shù)據(jù)解包后,送入數(shù)據(jù)緩沖區(qū)A,最后把數(shù)據(jù)部分通過CAN接口輸出。反之,如果單片機(jī)從CAN接口收到數(shù)據(jù),則將數(shù)據(jù)按照UDP協(xié)議格式打包,送入數(shù)據(jù)緩沖區(qū)B,由RTL8019AS將數(shù)據(jù)輸出到局域網(wǎng)中。

          本系統(tǒng)在通信傳輸層來采UDP協(xié)議是考慮到CAN協(xié)議數(shù)據(jù)報為短幀形式(每個數(shù)據(jù)幀最多為8字節(jié))。如果采用TCP傳輸協(xié)議,要傳輸8個字節(jié)CAN協(xié)議數(shù)據(jù),需先通過三次握手建立連接,再傳輸數(shù)據(jù),之后還要通過握手釋放連接。這樣的傳輸效率對有限的網(wǎng)絡(luò)資源來說無疑是一種浪費。而UDP是無連接的傳輸,可以提高網(wǎng)絡(luò)傳輸效率,同時也可以減輕網(wǎng)關(guān)的處理任務(wù)壓力。UDP傳輸協(xié)議可靠性的不足之處可以采用加傳校驗機(jī)制來改善。通過實驗測試,表明這種方法是行之有效的。

          本文介紹了種低成本、高可靠性、快捷的嵌入式CAN總線與以太網(wǎng)互連的軟硬件實現(xiàn)方法。該互連方案保證了管理監(jiān)控層與生產(chǎn)測控層之間的連接,方便了上下層信息交流,適用于現(xiàn)有的網(wǎng)絡(luò)傳輸系統(tǒng),有著廣泛的應(yīng)用前景。特別是在數(shù)據(jù)采集和數(shù)據(jù)傳輸領(lǐng)域中,可以廣泛地應(yīng)用于嵌入式網(wǎng)絡(luò)接口功能的設(shè)計中。


          上一頁 1 2 下一頁

          關(guān)鍵詞: Ehternet 嵌入式系統(tǒng) SJA1000

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();