DM9000(A)是一個全集成、功能強大、性價比高的快速以太網MAC控制器,它帶有一個通用處理器接口、EEPROM接口、10/100 PHY和16KB的SRAM(13KB作爲接收FIFO,3KB作爲發送FIFO)。它採用單電源供電,可兼容3.3V、5V的IO接口電平。 DM9000(A)同樣支持MII(Media Independent Interface 介質無關)接口,連接到HPNA(Home Phone-line Networking Alliance 家用電話網絡聯盟)設備上或其它支持MII的設備。 DM9000(A)包含一系列可被訪問的控制狀態寄存器,這些寄存器是字節對齊的,他們在硬件或軟件復位時被設置成初始值。 以下爲DM9000的寄存器功能詳解: NCR (00H):網絡控制寄存器(Network Control Register ) 7:EXT_PHY:1選擇外部PHY,0選擇內部PHY,不受軟件復位影響。 6:WAKEEN:事件喚醒使能,1使能,0禁止並清除事件喚醒狀態,不受軟件復位影響。 5:保留。 4:FCOL:1強制衝突模式,用於用戶測試。 3:FDX:全雙工模式。內部PHY模式下只讀,外部PHY下可讀寫。 2-1:LBK:迴環模式(Loopback)00通常,01MAC內部迴環,10內部PHY 100M模式數字迴環,11保留。 0:RST:1軟件復位,10us後自動清零。 NSR (01H):網絡狀態寄存器(Network Status Register ) 7:SPEED:媒介速度,在內部PHY模式下,0爲100Mbps,1爲10Mbps。當LINKST=0時,此位不用。 6:LINKST:連接狀態,在內部PHY模式下,0爲連接失敗,1爲已連接。 5:WAKEST:喚醒事件狀態。讀取或寫1將清零該位。不受軟件復位影響。 4:保留。 3:TX2END:TX(發送)數據包2完成標誌,寫1將清零該位(官方說明書上是說讀或寫都可清零,但是經過實驗,只要寫1才能清零!)。數據包指針2傳輸完成。 2:TX2END:TX(發送)數據包1完成標誌,寫1將清零該位(官方說明書上是說讀或寫都可清零,但是經過實驗,只要寫1才能清零!)。數據包指針1傳輸完成。 1:RXOV:RX(接收)FIFO(先進先出緩存)溢出標誌。 0:保留。 TCR(02H):發送控制寄存器(TX Control Register) 7:保留。 6:TJDIS:Jabber傳輸使能。1使能Jabber傳輸定時器(2048字節),0禁止。 註釋:Jabber是一個有CRC錯誤的長幀(大於1518byte而小於6000byte)或是數據包重組錯誤。原因:它可能導致網絡丟包。多是由於工作站有硬件或軟件錯誤。 5:EXCECM:額外衝突模式控制。0當額外的衝突計數多於15則終止本次數據包,1始終嘗試發發送本次數據包。 4:PAD_DIS2:禁止爲數據包指針2添加PAD。 3:CRC_DIS2:禁止爲數據包指針2添加CRC校驗。 2:PAD_DIS2:禁止爲數據包指針1添加PAD。 1:CRC_DIS2:禁止爲數據包指針1添加CRC校驗。 0:TXREQ:TX(發送)請求。發送完成後自動清零該位。 TSR_I(03H):數據包指針1的發送狀態寄存器1(TX Status Register I) 7:TJTO:Jabber傳輸超時。該位置位表示由於多於2048字節數據被傳輸而導致數據幀被截掉。 6:LC:載波信號丟失。該位置位表示在幀傳輸時發生紅載波信號丟失。在內部迴環模式下該位無效。 5:NC:無載波信號。該位置位表示在幀傳輸時無載波信號。在內部迴環模式下該位無效。 4:LC:衝突延遲。該位置位表示在64字節的衝突窗口後又發生衝突。 3:COL:數據包衝突。該位置位表示傳輸過程中發生衝突。 2:EC:額外衝突。該位置位表示由於發生了第16次衝突(即額外衝突)後,傳送被終止。 1-0:保留。 TSR_II(04H):數據包指針2的發送狀態寄存器2(TX Status Register II) 同TSR_I 略。 RCR(05H):接收控制寄存器(RX Control Register ) 7:保留。 6:WTDIS:看門狗定時器禁止。1禁止,0使能。 5:DIS_LONG:丟棄長數據包。1爲丟棄數據包長度超過1522字節的數據包。 4:DIS_CRC:丟棄CRC校驗錯誤的數據包。 3:ALL:忽略所有多點傳送。 2:RUNT:忽略不完整的數據包。 1:PRMSC:混雜模式(Promiscuous Mode) 0:RXEN:接收使能。 RSR(06H):接收狀態寄存器(RX Status Register ) 7:RF:不完整數據幀。該位置位表示接收到小於64字節的幀。 6:MF:多點傳送幀。該位置位表示接收到幀包含多點傳送地址。 5:LCS:衝突延遲。該位置位表示在幀接收過程中發生衝突延遲。 4:RWTO:接收看門狗定時溢出。該位置位表示接收到大於2048字節數據幀。 3:PLE:物理層錯誤。該位置位表示在幀接收過程中發生物理層錯誤。 2:AE:對齊錯誤(Alignment)。該位置位表示接收到的幀結尾處不是字節對齊,即不是以字節爲邊界對齊。 1:CE:CRC校驗錯誤。該位置位表示接收到的幀CRC校驗錯誤。 0:FOE:接收FIFO緩存溢出。該位置位表示在幀接收時發生FIFO溢出。 ROCR(07H):接收溢出計數寄存器(Receive Overflow Counter Register) 7:RXFU:接收溢出計數器溢出。該位置位表示ROC(接收溢出計數器)發生溢出。 6-0:ROC:接收溢出計數器。該計數器爲靜態計數器,指示FIFO溢出後,當前接收溢出包的個數。 BPTR(08H):背壓門限寄存器(Back Pressure Threshold Register) 7-4:BPHW:背壓門限最高值。當接收SRAM空閒空間低於該門限值,則MAC將產生一個擁擠狀態。1=1K字節。默認值爲3H,即3K字節空閒空間。不要超過SRAM大小。 3-0:JPT:擁擠狀態時間。默認爲200us。0000爲5us,0001爲10us,0010爲15us,0011爲25us,0100爲50us,0101爲100us,0110爲150us,0111爲200us,1000爲250us,1001爲300us,1010爲350us,1011爲400us,1100爲450us,1101爲500us,1110爲550us,1111爲600us。 FCTR(09H):溢出控制門限寄存器(Flow Control Threshold Register)7-4:HWOT:接收FIFO緩存溢出門限最高值。當接收SRAM空閒空間小於該門限值,則發送一個暫停時間(pause_time)爲FFFFH的暫停包。若該值爲0,則無接收空閒空間。1=1K字節。默認值爲3H,即3K字節空閒空間。不要超過SRAM大小。 3-0:LWOT:接收FIFO緩存溢出門限最低值。當接收SRAM空閒空間大於該門限值,則發送一個暫停時間(pause_time)爲0000H的暫停包。當溢出門限最高值的暫停包發送之後,溢出門限最低值的暫停包纔有效。默認值爲8K字節。不要超過SRAM大小。 RTFCR(0AH):接收/發送溢出控制寄存器(RX/TX Flow Control Register) 7:TXP0:1發送暫停包。發送完成後自動清零,並設置TX暫停包時間爲0000H。 6:TXPF:1發送暫停包。發送完成後自動清零,並設置TX暫停包時間爲FFFFH。 5:TXPEN:強制發送暫停包使能。按溢出門限最高值使能發送暫停包。 4:BKPA:背壓模式。該模式僅在半雙工模式下有效。當接收SRAM超過BPHW並且接收新數據包時,產生一個擁擠狀態。 3:BKPM:背壓模式。該模式僅在半雙工模式下有效。當接收SRAM超過BPHW並數據包DA匹配時,產生一個擁擠狀態。 2:RXPS:接收暫停包狀態。只讀清零允許。 1:RXPCS:接收暫停包當前狀態。 0:FLCE:溢出控制使能。1設置使能溢出控制模式。 EPCR/PHY_CR(0BH):EEPROM和PHY控制寄存器(EEPROM & PHY Control Register)
7-6:保留。 5:REEP:重新加載EEPROM。驅動程序需要在該操作完成後清零該位。 4:WEP:EEPROM寫使能。 3:EPOS:EEPROM或PHY操作選擇位。0選擇EEPROM,1選擇PHY。 2:ERPRR:EEPROM讀,或PHY寄存器讀命令。驅動程序需要在該操作完成後清零該位。 1:ERPRW:EEPROM寫,或PHY寄存器寫命令。驅動程序需要在該操作完成後清零該位。 0:ERRE:EEPROM或PHY的訪問狀態。1表示EEPROM或PHY正在被訪問。 EPAR/PHY_AR(0CH):EEPROM或PHY地址寄存器(EEPROM & PHY Address Register) 7-6:PHY_ADR:PHY地址的低兩位(bit1,bit0),而PHY地址的bit[4:2]強制爲000。如果要選擇內部PHY,那麼此2位強制爲01,實際應用中要強制爲01。 5-0:EROA:EEPROM字地址或PHY寄存器地址。 EPDRL/PHY_DRL(0DH):EEPROM或PHY數據寄存器低半字節(EEPROM & PHY Low Byte Data Register) 7-0:EE_PHY_L EPDRL/PHY_DRH(0EH):EEPROM或PHY數據寄存器高半字節(EEPROM & PHY High Byte Data Register) 7-0:EE_PHY_H WUCR(0FH):喚醒控制寄存器(Wake Up Control Register) 7-6:保留。 5:LINKEN:1使能“連接狀態改變”喚醒事件。該位不受軟件復位影響。 4:SAMPLEEN:1使能“Sample幀”喚醒事件。該位不受軟件復位影響。 3:MAGICEN:1使能“Magic Packet”喚醒事件。該位不受軟件復位影響。 2:LINKST:1表示發生了連接改變事件和連接狀態改變事件。該位不受軟件復位影響。 1:SAMPLEST:1表示接收到“Sample幀”和發生了“Sample幀”事件。該位不受軟件復位影響。 0:MAGICST:1表示接收到“Magic Packet”和發生了“Magic Packet”事件。該位不受軟件復位影響。 PAR(10H -- 15H):物理地址(MAC)寄存器(Physical Address Register) 7-0:PAD0 -- PAD5:物理地址字節0 -- 字節5(10H -- 15H)。用來保存6個字節的MAC地址。 MAR(16H -- 1DH):多點發送地址寄存器(Multicast Address Register ) 7-0:MAB0 -- MAB7:多點發送地址字節0 -- 字節7(16H --1DH)。 GPCR(1FH):GPIO控制寄存器(General Purpose Control Register) 7-4:保留。 3-0:GEP_CNTL:GPIO控制。定義GPIO的輸入輸出方向。1爲輸出,0爲輸入。GPIO0默認爲輸出做POWER_DOWN功能。其它默認爲輸入。因此默認值爲0001。 GPR(1FH):GPIO寄存器(General Purpose Register) 7-4:保留。 3-1:GEPIO3-1:GPIO爲輸出時,相關位控制對應GPIO端口狀態,GPIO爲輸入時,相關位反映對應GPIO端口狀態。(類似於單片機對IO端口的控制)。 0:GEPIO0:功能同上。該位默認爲輸出1到POWER_DEWN內部PHY。若希望啓用PHY,則驅動程序需要通過寫“0”將PWER_DOWN信號清零。該位默認值可通過EEPROM編程得到。參考EEPROM相關描述。 TRPAL(22H):發送SRAM讀指針地址低半字節(TX SRAM Read Pointer Address Low Byte) 7-0:TRPAL TRPAH(23H):發送SRAM讀指針地址高半字節(TX SRAM Read Pointer Address High Byte ) 7-0:TRPAH RWPAL(24H):接收SRAM指針地址低半字節(RX SRAM Write Pointer Address Low Byte) 7-0:RWPAL RWPAH(25H):接收SRAM指針地址高半字節(RX SRAM Write Pointer Address High Byte) 7-0:RWPAH VID(28H -- 29H):生產廠家序列號(Vendor ID) 7-0:VIDL:低半字節(28H),只讀,默認46H。 7-0:VIDH:高半字節(29H),只讀,默認0AH。 PID(2AH --2BH):產品序列號(Product ID) 7-0:PIDL:低半字節(2AH),只讀,默認00H。 7-0:PIDH:高半字節(2BH),只讀,默認90H。 CHIPR(2CH):芯片修訂版本(CHIP Revision) 7-0:PIDH:只讀,默認00H。 TCR2(2DH):傳輸控制寄存器2(TX Control Register 2) 7:LED:LED模式。1設置LED引腳爲模式1,0設置LED引腳爲模式0或根據EEPROM的設定。 6:RLCP:1重新發送有衝突延遲的數據包。 5:DTU:1禁止重新發送“underruned”數據包。 4:ONEPM:單包模式。1發送完成前發送一個數據包的命令能被執行,0發送完成前發送兩個以上數據包的命令能被執行。 3-0:IFGS:幀間間隔設置。0XXX爲96bit,1000爲64bit,1001爲72bit,1010爲80bit,1011爲88bit,1100爲96bit,1101爲104bit,1110爲112bit,1111爲120bit。 OCR(2EH):操作測試控制寄存器(Operation Control Register) 7-6:SCC:設置內部系統時鐘。00爲50MHz,01爲20MHz,10爲100MHz,11保留。 5:保留。 4:SOE:內部SRAM輸出使能始終開啓。 3:SCS:內部SRAM片選始終開啓。 2-0:PHYOP:爲測試用內部PHY操作模式。 SMCR(2FH):特殊模式控制寄存器(Special Mode Control Register) 7:SM_EN:特殊模式使能。 6-3:保留。 2:FLC:強制衝突延遲。 1:FB1:強制最長“Back-off”時間。 0:FB0:強制最短“Back-off”時間。 ETXCSR(30H):傳輸前(Early)控制、狀態寄存器(Early Transmit Control/Status Register) 7:ETE:傳輸前使能。 6:ETS2:傳輸前狀態2。 5:ETS1:傳輸前狀態1。 4-2:保留。 1-0:ETT:傳輸前門限。當寫到發送FIFO緩存裏的數據字節數達到該門限,則開始傳輸。00爲12.5%,01爲25%,10爲50%,11爲75%。 TCSCR(31H):傳輸校驗和控制寄存器(Transmit Check Sum Control Register) 7-3:保留。 2:UDPCSE:UDP校驗和產生使能。 1:TCPCSE:TCP檢驗和產生使能。 0:IPCSE:IP校驗和產生使能。 RCSCSR(32H):接收校驗和控制狀態寄存器(Receive Check Sum Control Status Register ) 7:UDPS:UDP校驗和狀態。1表示UDP數據包校驗失敗。 6:TCPS:TCP校驗和狀態。1表示TCP數據包校驗失敗。 5:IPS:IP校驗和狀態。1表示IP數據包校驗失敗。 4:UDPP:1表示UDP數據包。 3:TCPP:1表示TCP數據包。 2:IPP:1表示IP數據包。 1:RCSEN:接收檢驗和檢驗使能。1使能校驗和校驗,將校驗和狀態位(bit7-2)存儲到數據包的各自的報文頭的第一個字節。 0:DCSE:丟棄校驗和錯誤的數據包。1使能丟棄校驗和錯誤的數據包,若IP/TCP/UDP的校驗和域錯誤,則丟棄該數據包。 MRCMDX(F0H):存儲器地址不變的讀數據命令(Memory Data Pre-Fetch Read Command Without Address Increment Register) 7-0:MRCMDX:從接收SRAM中讀數據,讀取之後,指向內部SRAM的讀指針不變。 MRCMDX1(F1H):存儲器讀地址不變的讀數據命令(Memory Data Read Command With Address Increment Register 同上。 MRCMD(F2H):存儲器讀地址自動增加的讀數據命令(Memory Data Read Command With Address Increment Register) 7-0:MRCMD:從接收SRAM中讀數據,讀取之後,指向內部SRAM的讀指針自動增加1、2或4,根據處理器的操作模式而定(8位、16位或32位)。 MRRL(F4H):存儲器讀地址寄存器低半字節(Memory Data Read_ address Register Low Byte) 7-0:MDRAL MRRH(F5H):存儲器讀地址寄存器高半字節Memory Data Read_ address Register High Byte 7-0:MDRAH:若IMR的bit7=1,則該寄存器設置爲0CH。 MWCMDX(F6H):存儲器讀地址不變的讀數據命令(Memory Data Write Command Without Address Increment Register) 7-0:MWCMDX:寫數據到發送SRAM中,之後指向內部SRAM的寫地址指針不變。 MWCMD(F8H):存儲器讀地址自動增加的讀數據命令(Memory Data Write Command With Address Increment Register) 7-0:MWCMD:寫數據到發送SRAM中,之後指向內部SRAM的讀指針自動增加1、2或4,根據處理器的操作模式而定(8位、16位或32位)。 MWRL(FAH):存儲器寫地址寄存器低半字節(Memory Data Write_ address Register Low Byte) 7-0:MDRAL MWRH(FBH):存儲器寫地址寄存器高半字節(Memory Data Write _ address Register High Byte) 7-0:MDRAH TXPLL(FCH):發送數據包長度寄存器低半字節(TX Packet Length Low Byte Register) 7-0:TXPLL TXPLH(FDH):發送數據包長度寄存器高半字節(TX Packet Length High Byte Register) 7-0:TXPLH ISR(FEH):中斷狀態寄存器(Interrupt Status Register) 7-6:IOMODE:處理器模式。00爲16位模式,01爲32位模式,10爲8位模式,11保留。 5:LNKCHG:連接狀態改變。 4:UDRUN:傳輸“Underrun” 3:ROOS:接收溢出計數器溢出。 2:ROS:接收溢出。 1:PTS:數據包傳輸。 0:PRS:數據包接收。 ISR寄存器各狀態寫1清除 IMR(FFH):中斷屏蔽寄存器(Interrupt Mask Register) 7:PAR:1使能指針自動跳回。當SRAM的讀、寫指針超過SRAM的大小時,指針自動跳回起始位置。需要驅動程序設置該位,若設置則REG_F5(MDRAH)將自動位0CH。 6:保留。 5:LNKCHGI:1使能連接狀態改變中斷。 4:UDRUNI:1使能傳輸“Underrun”中斷。 3:ROOI:1使能接收溢出計數器溢出中斷。 2:ROI:1使能接收溢出中斷。 1:PTI:1使能數據包傳輸終端。 0:PRI:1使能數據包接收中斷。
註釋:其中“藍色字體”表示在DM9000初始化中要用到的寄存器。 訪問以上寄存器的方法是通過總線驅動的方式,即通過對IOR、IOW、AEN、CMD以及SD0--SD15等相關引腳的操作來實現。其中CMD引腳爲高電平時爲寫寄存器地址,爲低電平時爲寫數據到指定地址的寄存器中。詳細過程請參考數據手冊中“讀寫時序”部分。 在DM9000(A)中,還有一些PHY寄存器,也稱之爲介質無關接口MII寄存器,需要我們去訪問。這些寄存器是字對齊的,即16位寬。下面列出三個常用的PHY寄存器。 BMCR(00H):基本模式控制寄存器(Basic Mode Control Register) 15:reset:1PHY軟件復位,0正常操作。復位操作使PHY寄存器的值爲默認值。復位操作完成後,該位自動清零。 14:loopback:1Loop-back使能,0正常操作。 13:speed selection:1爲100Mbps,0爲10Mbps。連接速度即可以根據該位選擇,也可以根據第12位,即自動協商選擇。當自動協商使能時,即第12位爲1,該位將會返回自動協商後的速度值。 12:auto-negotiation enable:1自動協商使能。使得第13位和第8位的值反應自動協商後的狀態。 11:power down:POWER_DOWN模式。1爲POWER_DOWN,0爲正常操作。在POWER_DOWN狀態下,PHY應當響應操作處理。在轉變到POWER_DOWN狀態或已經運行在POWER_DOWN狀態下時,PHY不會在MII上產生虛假信號。 10:isolate:1除了一些操作外,PHY將從MII中隔離,0爲正常操作。當該位置位,PHY不會響應TXD[3:0],TX_EN和TX_ER輸入,並且在TX_CLK,RX_CLK,RX_DV,RX_ER,RXD[3:0],COL和CRS輸出上爲高阻態。當PHY被隔離,則它將響應操作處理。 9:restart auto-aegotiation:1重新初始化自動協商協議,0爲正常操作。當第12位禁止該功能,則該位無效。初始化後該位自動清零。 8:duplex mode:1爲全雙工操作,0爲正常操作。當第12位被禁止(置0)時該位被置位,若第12位被置位,則該位反應自動協商後的狀態。 7:collision test:1爲衝突測試使能,0爲正常操作。若該位置位,聲明TX_EN將引起COL信號被聲明。 6-0:保留。 ANAR(04H):自動協商廣告寄存器(Auto-negotiation Advertisement Register) 15:NP:0表示無有效的下一頁,1表示下一頁有效。PHY沒有下一頁,所以該位始終爲0。 14:ACK:1表示連接對象數據接收認證,0表示無認證。PHY的自動協商狀態機會自動控制該位。 13:RF:1表示本地設備處於錯誤狀態,0爲無錯誤檢驗。 12-11:保留。 10:FCS:1表示處理器支持溢出控制能力,0表示不支持。 9:T4:1表示本地設備支持100BASE-T4,0表示不支持。PHY不支持100BASE-T4,所以該位永遠是0。 8:TX_FDX:1爲本地設備支持100BASE-TX全雙工模式,0爲不支持。 7:TX_HDX:1爲本地設備支持100BASE-TX,0爲不支持。 6:10_FDX:1爲本地設備支持100BASE-T全雙工模式,0爲不支持。 5:10_HDX:1爲本地設備支持100BASE-T,0爲不支持。 4-0:selecter:協議選擇位,00001爲默認值,表示設備支持IEEE802.3CSMA/CD,不用修改。 DSCR(16H):DAVICOM詳細配置寄存器(DAVICOM Specified Configuration Register) 15:BP_4B5B:1爲繞過4B5B編碼和5B4B解碼功能,0爲正草4B5B和5B4B功能。 14:BP_SCR:1爲繞過擾頻和解擾功能,0爲正常操作。 13:BP_ALIGN:1爲繞過接收時的解擾、符號隊列、解碼功能和發送時的符號編碼、擾頻功能,0正常操作。 12:BP_ADPOK:1爲強制信號探測功能使能,0爲正常操作。該位僅爲調試使用 11:保留。 10:TX:1表示100BASE-TX操作,0保留。 9-8:保留。 7:F_LINK_100:0爲正常100Mbps,1爲強制100Mbps良好連接狀態。 6-5:保留,強制爲0. 4:RPDCTR-EN:1爲使能自動簡化POWER_DOWN,0爲禁止。 3:SMRST:1爲重新初始化PHY的狀態機,初始化後該位自動清零。 2:MFPSC:1表示MII幀引導抑制開啓,0表示關閉。 1:SLEEP:睡眠模式。該位置位將導致PHY進入睡眠模式,通過將該位清零喚醒睡眠模式,其中配置將還原爲睡眠模式之前的狀態,但狀態機將重新初始化。 0:RLOUT:該位置位將使接收到的數據放入發送通道中。 訪問PHY寄存器的方法是: (1)寄存器地址寫到EPAR/PHY_AR(0CH)寄存器中,注意將寄存器地址的第6位置1(地址與0x40或運算即可),以表明寫的是PHY地址,而不是EEPROM地址。 (2)將數據高字節寫到PHY_DRH(0EH)寄存器中。 (3)將數據低字節寫到PHY_DRL(0DH)寄存器中。 (4)發送PHY命令(0x0a)到EPCR/PHY_CR(0BH)寄存器中。 (5)延時5us,發送命令0x08到EPCR/PHY_CR(0BH)寄存器中,清除PHY寫操作。 以上爲DM9000(A)常用寄存器功能的詳細介紹,通過對這些寄存器的操作訪問,我們便可以實現對DM9000的初始化、數據發送、接收等相關操作。而要實現ARP、IP、TCP等功能,則需要對相關協議的理解,由編寫相關協議或移植協議棧來實現. |