DM9000 寄存器的定義

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將清零該位。數據包指針2傳輸完成。

2:TX2END:TX(發送)數據包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位模式,00保留。

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等功能,則需要對相關協議的理解,由編寫相關協議或移植協議棧來實現。

發佈了149 篇原創文章 · 獲贊 6 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章