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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于AX88796B的網(wǎng)絡(luò)接口模塊的設(shè)計(jì)與實(shí)現(xiàn)

          基于AX88796B的網(wǎng)絡(luò)接口模塊的設(shè)計(jì)與實(shí)現(xiàn)

          作者:重慶郵電大學(xué) 崔巍 時(shí)間:2008-07-22 來源:今日電子/21IC 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/86068.htm

            應(yīng)用日益普及的今天,工業(yè)現(xiàn)場的儀器儀表、數(shù)據(jù)采集和控制設(shè)備也日趨網(wǎng)絡(luò)化,工業(yè)自動(dòng)化和網(wǎng)絡(luò)的結(jié)合越來越密切。而將以太網(wǎng)和嵌入式系統(tǒng)相結(jié)合應(yīng)用于工業(yè)控制中已成為趨勢(shì)。

            是Asix公司推出的一款為嵌入式和工業(yè)以太網(wǎng)應(yīng)用而設(shè)計(jì)的低引腳數(shù)以太網(wǎng)控制芯片。其內(nèi)部集成10/100Mb/s自適應(yīng)的介質(zhì)訪問層MAC和物理層收發(fā)器PHY以及8K×16位的SRAM。可應(yīng)用于商業(yè)級(jí)0~70C和工業(yè)級(jí)-40C~85C的溫度范圍。支持MCS-51系列、80186系列、ISA總線和SRAM-like接口類型。執(zhí)行基于IEEE802.3/IEEE802.3u局域網(wǎng)標(biāo)準(zhǔn)的10Mb/s和100Mb/s以太網(wǎng)控制功能,并且提供發(fā)送隊(duì)列功能來增強(qiáng)標(biāo)準(zhǔn)NE2000的發(fā)送性能。

            AT91R40008是基于ARM7TDMI核的32位RISC結(jié)構(gòu)的嵌入式,非常適于工業(yè)實(shí)時(shí)控制應(yīng)用。AX88796B引腳的LQFP封裝減少了PCB空間并且和NE2000兼容,編程簡單,其驅(qū)動(dòng)可以容易快速的移植到許多嵌入式系統(tǒng)中。因此,綜合上述兩種芯片的優(yōu)點(diǎn),我們選擇AX88796B和AT91R40008作為工業(yè)實(shí)時(shí)控制中嵌入式網(wǎng)絡(luò)應(yīng)用的解決方案,具有很好的工業(yè)應(yīng)用價(jià)值和前景。

           


          圖1 AX88796B內(nèi)部結(jié)構(gòu)圖

          AX88796B內(nèi)部結(jié)構(gòu)及工作原理

            1 AX88796B的內(nèi)部結(jié)構(gòu)

            網(wǎng)卡上電復(fù)位時(shí)EEPROM接口能夠通過CSR中偏移為14H的SMI/EEPROM寄存器來存取數(shù)據(jù),MAC地址由EEPROM中讀取,并被自動(dòng)載入地址為0000h~001fh和0400h~040fh的內(nèi)部存儲(chǔ)區(qū)中。如果沒有使用EEPROM,每次上電對(duì)網(wǎng)卡進(jìn)行初始化時(shí)候就手動(dòng)給它分配一個(gè)MAC地址。

            AX88796B內(nèi)部有一個(gè)16KB(0x4000~0x7fff)大小的SRAM,該SRAM是雙端口SRAM,可以同時(shí)被網(wǎng)卡讀寫和用戶讀寫,這片地址空間的一部分被保留用來存放一個(gè)緩沖環(huán)結(jié)構(gòu),另一部分可以給用戶使用。在本設(shè)計(jì)中,16KB的SRAM全部被用來接收和發(fā)送數(shù)據(jù)包。本地DMA正是通過這個(gè)緩沖環(huán)結(jié)構(gòu)來接收?qǐng)?bào)文的。這個(gè)結(jié)構(gòu)由一連串相鄰的固定長度為256B的緩沖區(qū)構(gòu)成,每256字節(jié)稱為一頁,共有64頁。頁的地址就是地址的高8位,頁地址為0x00~0xff。其中0x40~0x4B為網(wǎng)卡的發(fā)送緩沖區(qū),共12頁,剛好可以存儲(chǔ)2個(gè)最大的以太網(wǎng)包,所以我們把發(fā)送緩沖區(qū)分成兩部分進(jìn)行輪流發(fā)送。使用0x4c~0x7f共52頁為網(wǎng)卡的接收緩沖區(qū)。AX88796B的SRAM空間結(jié)構(gòu)和收發(fā)緩沖區(qū)結(jié)構(gòu)如圖2、3所示。

           


          圖2 SRAM空間結(jié)構(gòu)


          圖3 收發(fā)緩沖區(qū)

            2 AX88796B的工作原理

            由四個(gè)寄存器來控制接收緩沖區(qū)的操作。Page Start Address Register (PSTART)和Page Stop Address Register(PSTOP)定義了接收緩沖區(qū)的起始和終止頁號(hào),形成一個(gè)接收緩沖環(huán)。當(dāng)前頁地址寄存器(Current Page Register)指向第一個(gè)用于存儲(chǔ)數(shù)據(jù)包的緩沖區(qū)。邊界指針寄存器(Boundary Pointer Register)指向在緩沖環(huán)中第一個(gè)未被主機(jī)讀取的數(shù)據(jù)包。如果本地DMA地址與Boundary Pointer Register的值相等,則接收過程中止。邊界指針也被用來初始化遠(yuǎn)端DMA來移動(dòng)一個(gè)數(shù)據(jù)包,當(dāng)數(shù)據(jù)包被移走后,邊界指針也向前增長。這樣,Current Page Register如同一個(gè)寫指針,Boundary Pointer如同一個(gè)讀指針。接收到一個(gè)數(shù)據(jù)包時(shí),從PSR中指定的頁號(hào)開始存儲(chǔ),如果一個(gè)256B的緩沖區(qū)不夠,DMA會(huì)執(zhí)行一個(gè)前向連接來連接下一個(gè)緩沖區(qū)以存儲(chǔ)這個(gè)數(shù)據(jù)包的剩余部分。連接的時(shí)候緩沖區(qū)必須是連續(xù)的,一個(gè)數(shù)據(jù)包總是會(huì)被存儲(chǔ)在相鄰的緩沖區(qū)里。在連接下一個(gè)緩沖區(qū)前,緩沖管理邏輯會(huì)執(zhí)行兩個(gè)比較,首先比較下一個(gè)緩沖區(qū)的DMA地址是否和page Stop Register相等,若相等,則DMA地址被恢復(fù)為page start address register中保存的地址。其次和boundary pointer register比較,如果相等,則接收?qǐng)?bào)文過程終止。Boundary Pointer Register能夠防止緩沖區(qū)里的數(shù)據(jù)還沒有讀出就被重寫。

            要發(fā)送和接收數(shù)據(jù)包就必須通過DMA讀寫AX88796B內(nèi)部的SRAM。DMA分為遠(yuǎn)程DMA(Remote DMA)和本地DMA(Local DMA)。CPU從網(wǎng)卡的SRAM讀寫數(shù)據(jù)稱為遠(yuǎn)端DMA。AX88796B讀寫SRAM稱為本地DMA。數(shù)據(jù)包的接收過程:當(dāng)數(shù)據(jù)包到達(dá)網(wǎng)卡的MAC層后,本地DMA先將到達(dá)MAC層的報(bào)文傳送到網(wǎng)卡的內(nèi)存中,主機(jī)CPU再通過遠(yuǎn)端DMA通道從網(wǎng)卡內(nèi)存中讀取數(shù)據(jù)包。數(shù)據(jù)包的發(fā)送過程:主機(jī)CPU通過遠(yuǎn)端DMA把要發(fā)送的數(shù)據(jù)包送到網(wǎng)卡的內(nèi)存中,本地的DMA將該數(shù)據(jù)包傳送到MAC層,再經(jīng)由內(nèi)部的PHY層發(fā)送至網(wǎng)絡(luò)。


          上一頁 1 2 下一頁

          評(píng)論


          相關(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); })();