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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計(jì)

          嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計(jì)

          作者: 時(shí)間:2009-03-26 來(lái)源:網(wǎng)絡(luò) 收藏

          目前,(Ethernet)協(xié)議已經(jīng)非常廣泛地應(yīng)用于各種計(jì)算機(jī)網(wǎng)絡(luò),如辦公局域網(wǎng)、工業(yè)控制網(wǎng)絡(luò)、因特網(wǎng)等場(chǎng)合,并且還在不斷地發(fā)展?;?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/以太網(wǎng)">的新技術(shù)和聯(lián)網(wǎng)設(shè)備不斷出現(xiàn),已經(jīng)成為事實(shí)上最常用的網(wǎng)絡(luò)標(biāo)準(zhǔn)之一。

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

          但是,基于以太網(wǎng)的目前并不是很多。其原因除了本身運(yùn)行速度較慢、資源較少且不足以實(shí)現(xiàn)以太網(wǎng)的各種協(xié)議外,更重要是以太網(wǎng)的及協(xié)議相對(duì)比較復(fù)雜,使人望而卻步。

          本文將介紹以8051系列為例的系統(tǒng)與10Mbps以太網(wǎng)控制器芯片DM9008的電路實(shí)現(xiàn)及編程方法。

          1 以太網(wǎng)控制器DM9008簡(jiǎn)介

          DM9008是臺(tái)灣DAVICOM公司生產(chǎn)的基于ISA總線的10M超級(jí)以太網(wǎng)控制器芯片。它集成了介質(zhì)訪問(wèn)控制子層(MAC)和物理層的功能,可以方便地基于ISA總線的系統(tǒng),也可以比較簡(jiǎn)單地與通用進(jìn)行。

          主要特點(diǎn)如下:

          ?實(shí)現(xiàn)IEEE 802.3協(xié)議、10BASE-T、10BASE2和10BASE5的單芯片解決方案;

          ?集成ISA總線接口、8K×16 SRAM、介質(zhì)訪問(wèn)控制(MAC)、編解碼器(ENDEC)和10BASE-T收發(fā)器;

          ?與NOVELL NE2000軟件兼容;

          ?可選8根中斷申請(qǐng)線;

          ?自動(dòng)極性檢測(cè)和糾正;

          ?可選8、16位模式;

          ?外部可編程EEPROM;

          ?單5V電源低功耗CMOS;

          ?100腳PQFP封裝。

          由于該芯片功能較強(qiáng),配置有較多的引腳,但在與一般接口時(shí)只需要用到其中的一部分即可完成常用的功能。

          2 與8051單片機(jī)系統(tǒng)的接口電路

          下面介紹國(guó)內(nèi)最常用的8051系列單片機(jī)與DM9008的接口電路,實(shí)現(xiàn)的網(wǎng)絡(luò)接口采用無(wú)屏蔽雙絞線(UTP)RJ-45接口。

          圖1給出了8051單片機(jī)系統(tǒng)與DM9008網(wǎng)絡(luò)控制器的接口電路框圖。8051單片機(jī)系統(tǒng)所提供的接口信號(hào)線為:P0口的8位數(shù)據(jù)總線D0~D7、5根經(jīng)過(guò)鎖存的地址線A0~A4、讀信號(hào)線RD、寫(xiě)信號(hào)線WR、經(jīng)過(guò)譯碼產(chǎn)生的片選線CS1和經(jīng)過(guò)反相后高電平有效地中斷請(qǐng)求線INT。這些信號(hào)線分別與DM9008的數(shù)據(jù)線低8位SD0~SD7、地址線低5位SA0~SA4、I/O讀信號(hào)線IOR、I/O寫(xiě)信號(hào)線IOW、地址使能線AEN和8根中斷請(qǐng)求線中的一根IRQ12相連。

          DM9008的復(fù)位線RST與8051單片機(jī)的復(fù)位線同為高電平有效,故在系統(tǒng)上電時(shí)同時(shí)復(fù)位。時(shí)鐘電路只需外接1個(gè)20MHz的晶振及2個(gè)電容即可。

          DM9008有16根數(shù)據(jù)線,與8051單片機(jī)接口,只需用到低8位數(shù)據(jù)線,其它高8位數(shù)據(jù)線不用,IO16接高電平或浮空,MD6/SLOT接地。地址線有SA0~SA19共20根,只用到低5位SA0~SA4與單片機(jī)相連,SA5~SA7接地、SA8~SA9接高電平,其它高地址位全部接地。這樣對(duì)于DM9008內(nèi)部來(lái)說(shuō),I/O的基地址為300H。另外BALE、SYSCLK接地,SMEMR、MEMW、MEMR浮空。DM9008有8根中斷請(qǐng)求線,可以選1根與8051系統(tǒng)的中斷線相連,其它7根線均浮空,所選線在EEPROM 93C46中指定。

          EEPROM 93C46是一個(gè)采用4線SPI串行接口的電可擦除存儲(chǔ)器,容量為64×16位(即128個(gè)字節(jié)),主要保存DM9008的配置信息,如網(wǎng)絡(luò)硬件地址、I/O基地址、中斷線選擇等配置寄存器內(nèi)容,在DM9008復(fù)位后讀取93C46的內(nèi)容并設(shè)置內(nèi)部配置寄存器的值。如果93C46中內(nèi)容不正確,DM9008就無(wú)法正常工作。所以通常先通過(guò)編程器把配置數(shù)據(jù)寫(xiě)入93C46,再把它焊在電路板上。DM9008通過(guò)EECS、EEDI、EEDO、EECK與93C46相連。

          由于本設(shè)計(jì)只使用10BASE-T,即采用無(wú)屏蔽雙絞線的RJ45接口,而DM9008已內(nèi)置了10BASE-T的收發(fā)器,故接口部分電路比較簡(jiǎn)單,只需要外接1個(gè)隔離濾波器LAN7236即可。TPTX+、TPTX-為發(fā)送線,TPRX+、TPRX-為接收線,經(jīng)隔離后的4根線與RJ45接口相連。

          對(duì)于其它型號(hào)的單片機(jī),如16位單片機(jī)80C196KC等,其接口電路只需稍作修改即可改為16位數(shù)據(jù)總線方式。

          3 軟件設(shè)計(jì)

          DM9008的編程包括初始化、發(fā)送、接收三部分功能。在接收和發(fā)送數(shù)據(jù)以前要進(jìn)行必需的檢測(cè)和初始化。DM9008的初始化主要是設(shè)置所需的寄存器狀態(tài),建立網(wǎng)絡(luò)接口收發(fā)的條件。

          網(wǎng)絡(luò)接口通過(guò)2個(gè)DMA操作來(lái)完成數(shù)據(jù)的接收和發(fā)送。本地DMA完成DM9008與其內(nèi)部FIFO隊(duì)列之間的數(shù)據(jù)傳送,遠(yuǎn)程DMA完成DM9008與CPU之間的數(shù)據(jù)傳送。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 下一頁(yè)

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