<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > TMS320C6713與DM9000A的接口設計與實(shí)現

TMS320C6713與DM9000A的接口設計與實(shí)現

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

隨著(zhù)嵌入式技術(shù)和網(wǎng)絡(luò )技術(shù)的發(fā)展及以太網(wǎng)的廣泛應用,各種應用設備的網(wǎng)絡(luò )化成為未來(lái)設備發(fā)展的一個(gè)重要方向。各種嵌入式設備已經(jīng)成功滲透到生產(chǎn)生活的各個(gè)領(lǐng)域,并逐漸朝著(zhù)網(wǎng)絡(luò )化、智能化的方向發(fā)展[1]。以太網(wǎng)因其在實(shí)時(shí)操作、可靠傳輸、標準統一等方面的卓越性能及其便于安裝、維護簡(jiǎn)單、不受通信距離限制等優(yōu)點(diǎn),已發(fā)展成為一種成熟的技術(shù)。人們希望通過(guò)網(wǎng)絡(luò )連接各種現場(chǎng),協(xié)調各種設備間的工作,實(shí)現設備的網(wǎng)絡(luò )化控制與管理。AVICOM公司的DM9000A是實(shí)現網(wǎng)絡(luò )通信的芯片,它占用很少的硬件資源,可以在不改變設備其他性能的基礎上給設備加入網(wǎng)絡(luò )功能。開(kāi)發(fā)一個(gè)嵌入式通信控制器不僅實(shí)現了設備上網(wǎng)的低成本解決方案,同時(shí)也提升了設備水平。隨著(zhù)數字信息技術(shù)、網(wǎng)絡(luò )技術(shù)和嵌入式系統的高速發(fā)展,如視頻監控、遠程控制、信息家電、網(wǎng)絡(luò )攝像頭都離不開(kāi)嵌入式設備與網(wǎng)絡(luò )的結合,嵌入式系統的以太網(wǎng)接口設計已成為目前的一個(gè)研究熱點(diǎn)。因此嵌入式以太網(wǎng)接口的設計對于嵌入式網(wǎng)絡(luò )系統的建立是十分必要的。目前,Linux 操作系統己經(jīng)越來(lái)越廣泛地被應用于嵌入式設備[2],編寫(xiě)Linux下的設備驅動(dòng)程序十分有意義。
1 DM9000A芯片介紹
DM9000A是DAVICOM公司推出的一款高速以太網(wǎng)接口芯片,其基本特征是:集成10M/100M物理層接口;內部帶有16 KB SRAM用作接收發(fā)送的FIFO緩存;支持8/16 bit兩種主機工作模式;通過(guò)HP認證的AUTO-Mdix(支持直接互連自動(dòng)翻轉)功能;支持TCP/IP加速(IPv4 check sum offload)減輕CPU負擔,提高整機效能;10 ns I/O讀寫(xiě)時(shí)間。該電路還集成了EEPROM接口,自舉時(shí)通過(guò)EEPROM接口輸入到芯片中,從而實(shí)現自動(dòng)初始化。在現有以太網(wǎng)控制器芯片中大多數速度是10 M的,其傳輸速率慢, DM9000A是成本低速度快的以太網(wǎng)控制器芯片,速度10M/100M自適應。它被設計為低功耗、高處理性能, 而其操作又非常簡(jiǎn)單, 具有通用的處理器接口,可以與多種處理器直接連接,容易完成不同系統的軟件驅動(dòng)開(kāi)發(fā)。數據總線(xiàn)寬度可設置為8 bit和16 bit,IO口支持3.3 V~5 V,因此幾乎可以和所有處理器連接。DM9000A以太網(wǎng)控制器遵循IEEE頒布的802.3以太網(wǎng)傳輸協(xié)議[3]。芯片內部集成4 KB雙字節靜態(tài)存取存儲器, 自動(dòng)收發(fā)轉換功能使開(kāi)發(fā)變得更加簡(jiǎn)單, 容易完成不同系統的軟件驅動(dòng)開(kāi)發(fā)。
2 DM9000A芯片的硬件接口設計
DM9000A可以很方便地與目前主流嵌入式CPU以8 bit或16 bit的總線(xiàn)方式連接,本文系統的CPU為T(mén)I公司的DSP:TMS320C6713(C6713),它是業(yè)界流行的一款高性能32 bit浮點(diǎn)DSP,在255 MHz時(shí)鐘主頻下,其最高執行速度可達1 800 MIPS。C6713擁有豐富的片內資源,常用于數字處理領(lǐng)域,二者的接口設計如圖1。

現在的設備都包含數字處理器,DM9000A可以很容易地應用到各種設備里。由圖1可以看到,TMS320C6713與DM9000A硬件連接簡(jiǎn)單。系統上電時(shí),DSP通過(guò)總線(xiàn)配置DM9000A內部網(wǎng)絡(luò )控制寄存器(NCR)、中斷寄存器(ISR)等,完成DM9000A的初始化。隨后,DM9000A進(jìn)入數據收發(fā)等待狀態(tài)。該電路還集成了EEPROM接口,自舉時(shí)通過(guò)EEPROM接口輸入配置數據到芯片中,從而實(shí)現自動(dòng)初始化。數據總線(xiàn)SD0-SD15可以直接掛在處理器的數據總線(xiàn)上,無(wú)需電平轉換。如果EECS接一個(gè)10 kΩ的上拉電阻,芯片在上電時(shí)將被配置成8 bit數據總線(xiàn)模式,此時(shí)SD8-SD15可以用作GPIO。再加一個(gè)硬件協(xié)議棧,可以將其用在沒(méi)有處理器的設備中。
3 DM9000A芯片的操作
對處理器驅動(dòng)網(wǎng)卡芯片來(lái)說(shuō),比較關(guān)心的有以下幾個(gè)引腳:IOR、IOW、CMD(A2)、INT、RST以及數據引腳SD0~SD15。IOR和IOW是DM9000的讀寫(xiě)選擇引腳,低電平有效,即在信號的上升沿進(jìn)行讀(IOR)寫(xiě)(IOW)操作。CMD為命令/數據選擇引腳,低電平時(shí)讀寫(xiě)命令操作,高電平時(shí)讀寫(xiě)數據操作,將它接到處理器的地址線(xiàn)A2上。如DM9000A工作的基地址為0x80000000,則DM9000A有兩個(gè)的地址:命令口地址(0x80000000)和數據口地址(0x80000004)。DM9000A有多個(gè)寄存器,通過(guò)先向命令口寫(xiě)寄存器地址,再向數據口寫(xiě)寄存器數據來(lái)配置芯片。數據總線(xiàn)SD0-SD15則根據數據總線(xiàn)的位數接到處理器數據總線(xiàn)上。收發(fā)數據也是通過(guò)讀寫(xiě)相應的寄存器實(shí)現。
圖2和圖3分別顯示了DM9000A的讀寫(xiě)時(shí)序,由圖可知,DM9000A的讀寫(xiě)操作與一般的異步存儲器相同。根據芯片資料,編寫(xiě)讀寫(xiě)寄存器的子函數。

寄存器的讀操作:
#define DM_INDEX *(volatile unsigned int *)0x8000000
#define DM_DATA *(volatile unsigned int *)0x8000004
int dm9000_reg_read(char reg)
{ DM_INDEX = reg;
  return DM_ DATA; }
寄存器的寫(xiě)操作:
void dm9000_reg_write(char reg, char data)
{ DM_ INDEX = reg;
DM_ DATA = data; }
4 DM9000A芯片的初始化
對DM9000A芯片的初始化,就是向相應的寄存器寫(xiě)入期望的值,為芯片的穩定工作做好準備。表1列出各寄存器的名稱(chēng)、地址以及賦參考值,寄存器的具體功能可以參考DM9000A的用戶(hù)手冊。

初始化中還要對PAR(10H--15H)寄存器初始化,PAR中保存的是芯片物理地址即通常的MAC地址,芯片根據網(wǎng)絡(luò )數據與PAR中的數據比較來(lái)確定保存或丟棄數據。初始化后,可以通過(guò)讀NCR寄存器來(lái)判斷芯片是否已經(jīng)連上網(wǎng)絡(luò )。

5 DM9000A芯片數據的發(fā)送和接收
在傳送數據封包之前,需將其封包數據存放在DM9000A的內存中。DM9000A的內部RAM地址0000h~0BFFh用來(lái)存放發(fā)送數據包。用戶(hù)無(wú)需關(guān)心數據存放的地址,只要向MWCMD寄存器寫(xiě)入數據包即可,內部數據指針會(huì )自動(dòng)更新,將MWCMD寄存器的數據依次存到內部RAM。另外還需將要傳送封包的大小存放在TXPLH和TXPLL寄存器中。之后再將TCR的bit0設為1,此時(shí)芯片開(kāi)始進(jìn)行封包的傳送。而在傳送完成后,會(huì )將傳送是否成功的信息放在TSRI、TSRll中。
以下為數據發(fā)送的函數:datas為要發(fā)送的數據在處理器緩沖區的地址,len(兩個(gè)字節)為要發(fā)送的數據長(cháng)度(以字節為單位)。
void sendpacket(char *datas, unsigned int len)
  {unsigned int i;
dm9000_reg_write(IMR, 0x80);//先禁止網(wǎng)卡中斷,防止在發(fā)送數據時(shí)被中斷干擾。
DM_ INDEX = MWCMD; //寫(xiě)命令寄存器
for(i=0; ilen; i+=2) //16 bit mode
DM_DATA = datas[i] | (datas[i+1]8);
dm9000_reg_write(TXPLH, (len>>8) 0x0ff);
dm9000_reg_write(TXPLL, len 0x0ff);
dm9000_reg_write(TCR, 0x01); //請求發(fā)送數據
dm9000_reg_write(IMR, 0x81);
//DM9000網(wǎng)卡的接收中斷使能
}
數據的發(fā)送比較簡(jiǎn)單,接收相對復雜一點(diǎn)。DM9000接收到數據包時(shí),會(huì )存放于DM9000接收內存的0C00h~3FFFh中。若是讀取位置超過(guò)3FFFh時(shí),DM9000會(huì )自動(dòng)將位置移到OC00h的位置。在每一個(gè)數據包前,會(huì )增加4 B存放數據包相關(guān)資料。接收數據包時(shí)首先要讀取這4個(gè)字節來(lái)確定數據包的狀態(tài),第一個(gè)字節“01H”表示接下來(lái)的是有效數據包,若為“00H”則表示沒(méi)有數據包,若為其他值則表示網(wǎng)卡沒(méi)有正確初始化,需要重新初始化。在讀取其他字節之前,必需要確定第1個(gè)字節是否為“01h”。第2個(gè)字節則為這個(gè)數據包的相關(guān)信息,其格式與RSR寄存器的格式一樣。第3和4個(gè)字節是存放這個(gè)封包的長(cháng)度大?。ú话ㄇ八膫€(gè)字節)。
如果接收到的數據包長(cháng)度小于60 B,則DM9000會(huì )自動(dòng)為不足的字節補上0,使其達到60 B。同時(shí),在接收到的數據包后DM9000還會(huì )自動(dòng)添加4個(gè)CRC校驗字節??梢圆挥杼幚?。于是,接收到的數據包的最小長(cháng)度也會(huì )是64 B。
接收數據包的過(guò)程:(1)讀MRCMDX寄存器,判斷是否有數據包。(2)如有數據包,讀MRCMD寄存器,根據數據包的長(cháng)度信息將整個(gè)數據包讀取出來(lái)。其中第一步需要做兩遍,因為第一次讀到的值總為0。
以下為數據包接收的函數:datas為接收到是數據存儲位置,接收成功返回1,不成功返回0。
unsigned int receivepacket(unsigned char *datas)
{
unsigned int i, tem;
unsigned int status, len;
unsigned char ready;
ready = 0; //希望讀取到“01H”
status = 0; //數據包狀態(tài)
len = 0; //數據包長(cháng)度
/*以上為有效數據包前的4個(gè)狀態(tài)字節*/
ready = dm9000_reg_read(MRCMDX);
//第一次讀取,一般讀取到的是00H
ready = dm9000_reg_read(MRCMDX);
//第二次讀取,總能讀對if(ready!= 0x01)
{ if(ready!= 0x00)
//若第二次讀取到的不是01H或00H,則
表示沒(méi)有初始化成功
{ dm9000_reg_write(IMR, 0x80);
//屏幕網(wǎng)卡中斷
DM9000_init();//重新初始化
dm9000_reg_write(IMR, 0x81);
//打開(kāi)網(wǎng)卡中斷
}
retrun 0;
}
}
/*以上表示若接收到的第一個(gè)字節不是“01H”,則表示沒(méi)有數據包,返回0*/
status = dm9000_reg_read(MRCMD);
len = DM_DATA;
if(!(status 0xbf00) (len 1522))
{ for(i=0; ilen; i+=2)// 16 bit mode
{ tem = DM_ DATA;
datas[i] = tem 0x0ff;
datas[i+1] = (tem >> 8) 0x0ff;
}
}
else
{
return 0;
}
6 網(wǎng)絡(luò )數據傳輸協(xié)議
以上完成了以太網(wǎng)數據包的收發(fā),應用網(wǎng)絡(luò )傳輸還需要完整的網(wǎng)絡(luò )傳輸協(xié)議,TCP/IP協(xié)議為互聯(lián)網(wǎng)通用協(xié)議。TCP/IP協(xié)議族是一整套把各種系統連接在一起并保證數據準確快速傳輸的規定和格式[4]。通常把TCP/IP協(xié)議族抽象成為一種具有四層結構的模型:鏈路層、網(wǎng)絡(luò )層、運輸層、應用層。每層各負責一個(gè)或一系列獨立的功能。根據各種協(xié)議的格式編寫(xiě)相應的數據處理函數。在有操作系統的應用中,要編寫(xiě)網(wǎng)絡(luò )設備驅動(dòng)程序。設備驅動(dòng)程序需要完成網(wǎng)絡(luò )設備的注冊、初始化與注銷(xiāo)以及進(jìn)行發(fā)送和接收數據處理,并能針對傳送超時(shí)、中斷等情況進(jìn)行及時(shí)處理[5]。
DM9000A的操作簡(jiǎn)單,模塊獨立,不會(huì )影響原設備的性能指標,為設備間的通信提供保障。在沒(méi)有處理器的裝備中,93C46可以正確初始化芯片,硬件協(xié)議棧能正確處理收發(fā)數據。傳輸協(xié)議有成熟的TCP/IP協(xié)議,在簡(jiǎn)單的通信和控制系統中,可以應用簡(jiǎn)單的數據傳輸協(xié)議,縮短開(kāi)發(fā)周期,提高設備的效率。
參考文獻
[1] 雒珊,尹崗.基于A(yíng)RM 的以太網(wǎng)通信控制器的設計[J].電子測量技術(shù),2009, 23(10):133-135.
[2] 趙軍.嵌入式平臺上Linux網(wǎng)絡(luò )設備驅動(dòng)程序的開(kāi)發(fā)[J].電腦知識與技術(shù),2009,5(33):9272-9273.
[3] 陳 峰,彭 龑,易 彬,等.基于嵌入式技術(shù)的以太網(wǎng)接口設計[J].通信技術(shù),2010,43(5):127-129.
[4] 劉春燕,顏興建.嵌入式TCP/IP協(xié)議的設計與實(shí)現[J].電腦知識與技術(shù),2010,6(8):1815-1816.
[5] 周敬瓊,周鳳星.基于A(yíng)RM 的Linux 網(wǎng)絡(luò )設備驅動(dòng)程序開(kāi)發(fā)[J]. 計算機工程與設計,2009,30(22):5124-5127.



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>