1.DM9000簡(jiǎn)介
?DM9000 是一款完全集成的、性?xún)r(jià)比高、引腳數(shù)少、帶有通用處理器接口的單芯片快速以太網(wǎng)控制器。 自 帶一個(gè) 10/100M PHY 和 4K 雙字的 SRAM ,DM9000A 為適應(yīng)各種處理器提供了 8 位、16 位數(shù)據(jù)接口訪問(wèn) 內(nèi)部存儲(chǔ)器,DM9000 擁有自動(dòng)協(xié)商功能。DM9000 特性如下:
1.集成自適應(yīng) 10/100M 收發(fā)器。
2.內(nèi)置 16k 字節(jié)的 SRAM。
3.支持硬件幀校驗(yàn)。
4.兼容 3.3V 和 5.0V 輸入輸出電壓。
DM9000 有多種型號(hào),有100引腳和48引腳的,開(kāi)發(fā)板選擇的是48引腳的DM9000,型號(hào)為DM9000CEP。
2.DM9000硬件接口
![poYBAGKV_pKAfU4IAAK3QzI0DBg646.png](https://file.elecfans.com/web2/M00/46/D6/poYBAGKV_pKAfU4IAAK3QzI0DBg646.png)
引腳 | 說(shuō)明 |
PWRST | 復(fù)位信號(hào) |
CS | 片選信號(hào) |
WR(IOW) | 處理器寫(xiě)命令 |
RD(IOR) | 處理器讀命令 |
CMD | 命令/數(shù)據(jù)標(biāo)志, 0,讀寫(xiě)命令; 1,讀寫(xiě)數(shù)據(jù) |
SD0~SD15 | 16 位雙向數(shù)據(jù)線 |
3.DM9000數(shù)據(jù)位寬設(shè)置
?DM9000 支持8位和16位兩種數(shù)據(jù)位寬,可以通過(guò) DM9000的21(EEDCS)引腳設(shè)置其數(shù)據(jù)位寬,當(dāng)EEDCS上拉的時(shí)候DM9000選擇8位數(shù)據(jù)位寬,否則的話(huà)選擇16位數(shù)據(jù)位寬。開(kāi)發(fā)板上的R65電阻為 EECS 的上拉電阻,但是此電阻并未焊接!DM9000芯片的數(shù)據(jù)位寬為 16 位。
![pYYBAGKV_8eAe8dcAATsG06Y4Zc749.png](https://file.elecfans.com/web2/M00/46/D5/pYYBAGKV_8eAe8dcAATsG06Y4Zc749.png)
4.開(kāi)發(fā)平臺(tái)
硬件平臺(tái):STM32F103ZET6開(kāi)發(fā)板集成DM9000網(wǎng)卡
開(kāi)發(fā)環(huán)境:Windows下Keil5
驅(qū)動(dòng)時(shí)序:硬件FSMC
若沒(méi)有DM9000有線網(wǎng)卡設(shè)備,可自行購(gòu)買(mǎi)DM9000網(wǎng)卡模塊.
DM9000網(wǎng)卡模塊鏈接:DM9000有線網(wǎng)卡
![poYBAGKWADCAKGeMAAgIaHU_cUo667.png](https://file.elecfans.com/web2/M00/46/D6/poYBAGKWADCAKGeMAAgIaHU_cUo667.png)
5.DM9000硬件配置
![poYBAGKWAQSASeyFAAEaM2lxvN0770.png#pic_center](https://file.elecfans.com//web2/M00/46/D6/poYBAGKWAQSASeyFAAEaM2lxvN0770.png#pic_center)
DM9000 網(wǎng)卡接在 FSMC 的第 2 塊上,數(shù)據(jù)線地址: 0x64000000
??PA7 地址線作為命令與數(shù)據(jù)線切換引腳。
??外接16位寬度存儲(chǔ)器: HADDR[25:1] FSMC_A[24:0]
??外部地址線0對(duì)應(yīng)內(nèi)部地址線1
0x64000000基地址:01100100000000000000000000000000
0x64000000寫(xiě)數(shù)據(jù):01100100000000000000000000000000
0x64000100寫(xiě)命令:01100100000000000000000100000000
?DM9000硬件初始化:
/******************DM9000初始化**************
**硬件接口:
** FSMC_D0~D1 -- PD14~PD15
** FSMC_D2~D3 -- PD0~PD1
** FSMC_D4~D12 -- PE7~PE15
** FSMC_D13~D14-- PD8~PD9
** FSMC_D15 -- PD10
** CS(FSMC_NE2) -- PG9(片選)
** WR(FSMC_NWE) -- PD5(寫(xiě)使能)
** RD(FSMC_NOE) -- PD4(讀使能)
** DM9000_RST -- PD7(復(fù)位腳)
** CMD(FSMC_A7) -- PF13(數(shù)據(jù)命令選擇腳)
** DM9000_INT --PG6(中斷腳)
**
*********************************************/
void DM9000_GPIO_Init(void)
{
/*開(kāi)時(shí)鐘*/
RCC->APB2ENR|=1<<3;//PB
RCC->APB2ENR|=1<<5;//PD
RCC->APB2ENR|=1<<6;//PE
RCC->APB2ENR|=1<<7;//PF
RCC->APB2ENR|=1<<8;//PG
GPIOD->CRL&=0x0F00FF00;//PD5寫(xiě)使能,PD4讀使能,PD7復(fù)位腳
GPIOD->CRL|=0x30BB00BB;
GPIOD->CRH&=0x00FFF000;
GPIOD->CRH|=0xBB000BBB;
GPIOE->CRL&=0x0FFFFFFF;
GPIOE->CRL|=0xB0000000;
GPIOE->CRH&=0x00000000;
GPIOE->CRH|=0xBBBBBBBB;
GPIOG->CRH&=0xFFFFFF0F;
GPIOG->CRH|=0x000000B0;//片選NE2
GPIOF->CRH&=0xFF0FFFFF;
GPIOF->CRH|=0x00B00000;//數(shù)據(jù)命令選擇腳
GPIOG->CRL&=0xF0FFFFFF;
GPIOG->CRL|=0x08000000;//DM9000中斷腳
GPIOG->ODR|=1<<6;//上拉
EXTI->IMR|=1<<6; //開(kāi)放中斷線6的中斷請(qǐng)求
EXTI->FTSR|=1<<6; //允許中斷線6下降沿觸發(fā)請(qǐng)求
RCC->APB2ENR|=1<<0;//AFIO時(shí)鐘使能
AFIO->EXTICR[1]&=~(0xF<<(2*4));//選擇輸入源為PG6
AFIO->EXTICR[1]|=0x6<<(2*4);//選擇輸入源為PG6
STM32_NVIC_SetPriority(EXTI9_5_IRQn,1,1);//設(shè)置優(yōu)先級(jí)
/*FSMC核心寄存器配置*/
RCC->AHBENR|=1<<8;//FSMC
FSMC_Bank1->BTCR[2]=0;//BCR2
FSMC_Bank1->BTCR[3]=0;//BTR2
FSMC_Bank1->BTCR[2]&=~(0x1<<19);//異步模式
FSMC_Bank1->BTCR[2]&=~(0x1<<14);//讀寫(xiě)使用相同時(shí)序
FSMC_Bank1->BTCR[2]|=1<<12;//允許寫(xiě)操作
FSMC_Bank1->BTCR[2]|=0x1<<4;//16位寬度
FSMC_Bank1->BTCR[3]|=0x1<<8;//2個(gè)時(shí)鐘周期
FSMC_Bank1->BTCR[3]&=~(0xF<<4);//地址保持時(shí)間1個(gè)時(shí)鐘周期
FSMC_Bank1->BTCR[3]&=~(0xF<<0);//地址保持時(shí)間1個(gè)時(shí)鐘周周期
FSMC_Bank1->BTCR[2]|=1<<0;//啟動(dòng)存儲(chǔ)器塊
}
6.主函數(shù)
#include "dm9000.h"
u8 dm9000_tx_buff[64]={0x11,0x22,0x33,0x44,0x55};
u8 dm9000_rx_buff[1024];
int main()
{
u8 stat;
u16 i;
int len;
Beep_Init();
Usartx_Init(USART1,115200,72);
TIMx_Init(TIM2,72,20*1000);
printf("初始化完成rn");
/*DM9000初始化*/
if(DM9000_Init()==0)printf("DM9000初始化成功rn");
else printf("DM9000初始化失敗rn");
/*獲取DM9000工作模式*/
stat=DM9000_Get_SpeedAndDuplex();//獲取連接狀態(tài)和工作方式
if(stat!=0xff)printf("網(wǎng)卡速度:%d Mbps 模式:%srn",(stat&0x02)?10:100,(stat&0x01)?"全雙工":"半雙工");
else printf("DM9000網(wǎng)卡狀態(tài)信息獲取失敗!rn");
while(1)
{
len=DM9000_ReadPacketLen();//讀取數(shù)據(jù)包長(zhǎng)度
if(len>0)
{
printf("讀取數(shù)據(jù)長(zhǎng)度:%drn",len);
DM9000_ReadPacketData(dm9000_rx_buff,len);//讀取數(shù)據(jù)
for(i=0;i
6.運(yùn)行效果
??將開(kāi)發(fā)板通過(guò)網(wǎng)線連接路由器即可看到相關(guān)答應(yīng)信息
![pYYBAGKWAM6AQq84AACvkDJN0DE360.png](https://file.elecfans.com/web2/M00/46/D5/pYYBAGKWAM6AQq84AACvkDJN0DE360.png)
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
112文章
16473瀏覽量
179662 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5465瀏覽量
172847 -
單芯片
+關(guān)注
關(guān)注
3文章
422瀏覽量
34683
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
DM9000以太網(wǎng)控制平臺(tái)電路設(shè)計(jì)方案
![<b class='flag-5'>DM9000</b><b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>控制</b>平臺(tái)電路設(shè)計(jì)方案](https://file1.elecfans.com//web2/M00/A6/7E/wKgZomUMPhSAEYiBAAATePvn95E342.jpg)
Altera FPGA 用DM9000以太網(wǎng)模塊與電腦之間傳輸圖像
U-Boot移植DM9000網(wǎng)卡分享!
兩塊STM32板子以太網(wǎng)通信要以太網(wǎng)控制芯片相同嗎?
FSMC方式訪問(wèn)DM9000以太網(wǎng)芯片時(shí)讀取的是ID寄存器的地址
基于S3C2440和DM9000AE的以太網(wǎng)接口的設(shè)計(jì)
dm9000/dm9000a linux驅(qū)動(dòng)程序 (Ethe
伺服控制系統(tǒng)的DM9000A以太網(wǎng)接口設(shè)計(jì)
基于DM9000的以太網(wǎng)藏文信息控制平臺(tái)
基于ARM和DM9000的網(wǎng)卡接口設(shè)計(jì)與實(shí)現(xiàn)
DM9000的以太網(wǎng)藏文信息控制平臺(tái)
![<b class='flag-5'>DM9000</b>的<b class='flag-5'>以太網(wǎng)</b>藏文信息<b class='flag-5'>控制</b>平臺(tái)](https://file1.elecfans.com//web2/M00/A5/8E/wKgZomUMOPiACW00AAHV8bO5hTE525.jpg)
驅(qū)動(dòng)之路-DM9000網(wǎng)卡驅(qū)動(dòng)程序分析
![驅(qū)動(dòng)之路-<b class='flag-5'>DM9000</b><b class='flag-5'>網(wǎng)</b>卡驅(qū)動(dòng)程序分析](https://file.elecfans.com/web1/M00/92/40/pIYBAFzb1WaAOJcAAABqIJ0vR5M801.png)
DM9000物理接口寄存器的詳細(xì)資料說(shuō)明
![<b class='flag-5'>DM9000</b>物理接口寄存<b class='flag-5'>器</b>的詳細(xì)資料說(shuō)明](https://file.elecfans.com/web1/M00/B3/15/o4YBAF4b3yqAP0moAAO0Qz1c-Ek591.png)
評(píng)論