1.DM9000簡介
?DM9000 是一款完全集成的、性價比高、引腳數少、帶有通用處理器接口的單芯片快速以太網控制器。 自 帶一個 10/100M PHY 和 4K 雙字的 SRAM ,DM9000A 為適應各種處理器提供了 8 位、16 位數據接口訪問 內部存儲器,DM9000 擁有自動協(xié)商功能。DM9000 特性如下:
1.集成自適應 10/100M 收發(fā)器。
2.內置 16k 字節(jié)的 SRAM。
3.支持硬件幀校驗。
4.兼容 3.3V 和 5.0V 輸入輸出電壓。
DM9000 有多種型號,有100引腳和48引腳的,開發(fā)板選擇的是48引腳的DM9000,型號為DM9000CEP。
2.DM9000硬件接口
引腳 | 說明 |
PWRST | 復位信號 |
CS | 片選信號 |
WR(IOW) | 處理器寫命令 |
RD(IOR) | 處理器讀命令 |
CMD | 命令/數據標志, 0,讀寫命令; 1,讀寫數據 |
SD0~SD15 | 16 位雙向數據線 |
3.DM9000數據位寬設置
?DM9000 支持8位和16位兩種數據位寬,可以通過 DM9000的21(EEDCS)引腳設置其數據位寬,當EEDCS上拉的時候DM9000選擇8位數據位寬,否則的話選擇16位數據位寬。開發(fā)板上的R65電阻為 EECS 的上拉電阻,但是此電阻并未焊接!DM9000芯片的數據位寬為 16 位。
4.開發(fā)平臺
硬件平臺:STM32F103ZET6開發(fā)板集成DM9000網卡
開發(fā)環(huán)境:Windows下Keil5
驅動時序:硬件FSMC
若沒有DM9000有線網卡設備,可自行購買DM9000網卡模塊.
DM9000網卡模塊鏈接:DM9000有線網卡
5.DM9000硬件配置
DM9000 網卡接在 FSMC 的第 2 塊上,數據線地址: 0x64000000
??PA7 地址線作為命令與數據線切換引腳。
??外接16位寬度存儲器: HADDR[25:1] FSMC_A[24:0]
??外部地址線0對應內部地址線1
0x64000000基地址:01100100000000000000000000000000
0x64000000寫數據:01100100000000000000000000000000
0x64000100寫命令: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(寫使能)
** RD(FSMC_NOE) -- PD4(讀使能)
** DM9000_RST -- PD7(復位腳)
** CMD(FSMC_A7) -- PF13(數據命令選擇腳)
** DM9000_INT --PG6(中斷腳)
**
*********************************************/
void DM9000_GPIO_Init(void)
{
/*開時鐘*/
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寫使能,PD4讀使能,PD7復位腳
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;//數據命令選擇腳
GPIOG->CRL&=0xF0FFFFFF;
GPIOG->CRL|=0x08000000;//DM9000中斷腳
GPIOG->ODR|=1<<6;//上拉
EXTI->IMR|=1<<6; //開放中斷線6的中斷請求
EXTI->FTSR|=1<<6; //允許中斷線6下降沿觸發(fā)請求
RCC->APB2ENR|=1<<0;//AFIO時鐘使能
AFIO->EXTICR[1]&=~(0xF<<(2*4));//選擇輸入源為PG6
AFIO->EXTICR[1]|=0x6<<(2*4);//選擇輸入源為PG6
STM32_NVIC_SetPriority(EXTI9_5_IRQn,1,1);//設置優(yōu)先級
/*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);//讀寫使用相同時序
FSMC_Bank1->BTCR[2]|=1<<12;//允許寫操作
FSMC_Bank1->BTCR[2]|=0x1<<4;//16位寬度
FSMC_Bank1->BTCR[3]|=0x1<<8;//2個時鐘周期
FSMC_Bank1->BTCR[3]&=~(0xF<<4);//地址保持時間1個時鐘周期
FSMC_Bank1->BTCR[3]&=~(0xF<<0);//地址保持時間1個時鐘周周期
FSMC_Bank1->BTCR[2]|=1<<0;//啟動存儲器塊
}
6.主函數
#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("網卡速度:%d Mbps 模式:%srn",(stat&0x02)?10:100,(stat&0x01)?"全雙工":"半雙工");
else printf("DM9000網卡狀態(tài)信息獲取失敗!rn");
while(1)
{
len=DM9000_ReadPacketLen();//讀取數據包長度
if(len>0)
{
printf("讀取數據長度:%drn",len);
DM9000_ReadPacketData(dm9000_rx_buff,len);//讀取數據
for(i=0;i
6.運行效果
??將開發(fā)板通過網線連接路由器即可看到相關答應信息
審核編輯:湯梓紅
-
控制器
+關注
關注
112文章
16361瀏覽量
178030 -
以太網
+關注
關注
40文章
5424瀏覽量
171702 -
單芯片
+關注
關注
3文章
419瀏覽量
34574
發(fā)布評論請先 登錄
相關推薦
評論