RTL8019 寄存器名称

作者在 2009-02-17 13:56:50 发布以下内容
// PAGE 0--3
#define CR  reg00 // Command Register
 
// PAGE 0 [R]
#define CLDA0 reg01 // Current Local DMA Register 0
#define CLDA1 reg02 //
#define BNRY reg03 //
#define TSR  reg04 // Transmit Status Register
#define NCR  reg05 // Number of Collisions Register
#define FIFO reg06 // First In Fisrt Out Register
#define ISR  reg07 //
#define CRDA0 reg08 // Current Remote DMA Register 0
#define CRDA1 reg09 //
//#define 8019ID0 reg0A //
//#define 8019ID1 reg0B //
#define RSR  reg0C // Receive Status Register
#define CNTR0 reg0D // Frame Alignment Error Tally Counter Register
#define CNTR1 reg0E // CRC Error Tally Counter Register
#define CNTR2 reg0F // Missed Packed Tally Counter Register
 
// PAGE 0 [W]
#define PSTART reg01 // Page Start Register
#define PSTOP reg02 // Page Stop Register
#define BNRY reg03 // Boundary Register
#define TPSR reg04 // Transmit Page Start Register
#define TBCR0 reg05 // Transmit Byte Count Register 0
#define TBCR1 reg06 //
#define ISR  reg07 //
#define RSAR0 reg08 //
#define RSAR1 reg09 //
#define RBCR0 reg0A // Remote Byte Count Register 0
#define RBCR1 reg0B //
#define RCR  reg0C // Receive Configuration Register
#define TCR  reg0D // Transmit Configuration Register
#define DCR  reg0E // Data Configuration Register
#define IMR  reg0F // Interrupt Mask Register
 
// PAGE 1 [R/W]
#define PAR0 reg01 // Physical Address Register
#define PAR1 reg02 //
#define PAR2 reg03 //
#define PAR3 reg04 //
#define PAR4 reg05 //
#define PAR5 reg06 //
#define CURR reg07 // Current Page Register
#define MAR0 reg08 // Multicast Address Register
#define MAR1 reg09 //
#define MAR2 reg0A //
#define MAR3 reg0B //
#define MAR4 reg0C //
#define MAR5  reg0D //
#define MAR6 reg0E //
#define MAR7 reg0F //
 
// PAGE 2 [R]
#define PSTART reg01 //
#define PSTOP reg02 //
#define TPSR reg04 //
#define RCR  reg0C //
#define TCR  reg0D //
#define DCR  reg0E //
#define IMR  reg0F //
 
基础知识 | 阅读 11209 次
文章评论,共5条
vfdff(作者)
2009-02-17 20:57
1
DM9000寄存器功能详细介绍[转]<br />
<br />
&nbsp;&nbsp;&nbsp; DM9000(A)是一个全集成、功能强大、性价比高的快速以太网MAC控制器,它带有一个通用处理器接口、EEPROM接口、10/100 PHY和16KB的SRAM(13KB作为接收FIFO,3KB作为发送FIFO)。它采用单电源供电,可兼容3.3V、5V的IO接口电平。<br />
<br />
&nbsp;&nbsp;&nbsp; DM9000(A)同样支持MII(Media Independent Interface 介质无关)接口,连接到HPNA(Home Phone-line Networking Alliance 家用电话网络联盟)设备上或其它支持MII的设备。<br />
<br />
&nbsp;&nbsp;&nbsp; DM9000(A)包含一系列可被访问的控制状态寄存器,这些寄存器是字节对齐的,他们在硬件或软件复位时被设置成初始值。<br />
<br />
&nbsp;&nbsp;&nbsp; 以下为DM9000的寄存器功能详解:<br />
<br />
NCR (00H):网络控制寄存器(Network Control Register )<br />
<br />
7:EXT_PHY:1选择外部PHY,0选择内部PHY,不受软件复位影响。<br />
<br />
6:WAKEEN:事件唤醒使能,1使能,0禁止并清除事件唤醒状态,不受软件复位影响。<br />
<br />
5:保留。<br />
<br />
4:FCOL:1强制冲突模式,用于用户测试。<br />
<br />
3:FDX:全双工模式。内部PHY模式下只读,外部PHY下可读写。<br />
<br />
2-1:LBK:回环模式(Loopback)00通常,01MAC内部回环,10内部PHY 100M模式数字回环,11保留。<br />
<br />
0:RST:1软件复位,10us后自动清零。<br />
<br />
NSR (01H):网络状态寄存器(Network Status Register )<br />
<br />
7:SPEED:媒介速度,在内部PHY模式下,0为100Mbps,1为10Mbps。当LINKST=0时,此位不用。<br />
<br />
6:LINKST:连接状态,在内部PHY模式下,0为连接失败,1为已连接。<br />
<br />
5:WAKEST:唤醒事件状态。读取或写1将清零该位。不受软件复位影响。<br />
<br />
4:保留。<br />
<br />
3:TX2END:TX(发送)数据包2完成标志,写1将清零该位(官方说明书上是说读或写都可清零,但是经过实验,只要写1才能清零!)。数据包指针2传输完成。<br />
<br />
2:TX2END:TX(发送)数据包1完成标志,写1将清零该位(官方说明书上是说读或写都可清零,但是经过实验,只要写1才能清零!)。数据包指针1传输完成。<br />
<br />
1:RXOV:RX(接收)FIFO(先进先出缓存)溢出标志。<br />
<br />
0:保留。<br />
<br />
TCR(02H):发送控制寄存器(TX Control Register)<br />
<br />
7:保留。<br />
<br />
6:TJDIS:Jabber传输使能。1使能Jabber传输定时器(2048字节),0禁止。<br />
<br />
注释:Jabber是一个有CRC错误的长帧(大于1518byte而小于6000byte)或是数据包重组错误。原因:它可能导致网络丢包。多是由于工作站有硬件或软件错误。<br />
<br />
5:EXCECM:额外冲突模式控制。0当额外的冲突计数多于15则终止本次数据包,1始终尝试发发送本次数据包。<br />
<br />
4:PAD_DIS2:禁止为数据包指针2添加PAD。<br />
<br />
3:CRC_DIS2:禁止为数据包指针2添加CRC校验。<br />
<br />
2:PAD_DIS2:禁止为数据包指针1添加PAD。<br />
<br />
1:CRC_DIS2:禁止为数据包指针1添加CRC校验。<br />
<br />
0:TXREQ:TX(发送)请求。发送完成后自动清零该位。<br />
<br />
TSR_I(03H):数据包指针1的发送状态寄存器1(TX Status Register I)<br />
<br />
7:TJTO:Jabber传输超时。该位置位表示由于多于2048字节数据被传输而导致数据帧被截掉。<br />
<br />
6:LC:载波信号丢失。该位置位表示在帧传输时发生红载波信号丢失。在内部回环模式下该位无效。<br />
<br />
5:NC:无载波信号。该位置位表示在帧传输时无载波信号。在内部回环模式下该位无效。<br />
<br />
4:LC:冲突延迟。该位置位表示在64字节的冲突窗口后又发生冲突。<br />
<br />
3:COL:数据包冲突。该位置位表示传输过程中发生冲突。<br />
<br />
2:EC:额外冲突。该位置位表示由于发生了第16次冲突(即额外冲突)后,传送被终止。<br />
<br />
1-0:保留。<br />
<br />
TSR_II(04H):数据包指针2的发送状态寄存器2(TX Status Register II)<br />
<br />
同TSR_I<br />
<br />
略。<br />
<br />
RCR(05H):接收控制寄存器(RX Control Register )<br />
<br />
7:保留。<br />
<br />
6:WTDIS:看门狗定时器禁止。1禁止,0使能。<br />
<br />
5:DIS_LONG:丢弃长数据包。1为丢弃数据包长度超过1522字节的数据包。<br />
<br />
4:DIS_CRC:丢弃CRC校验错误的数据包。<br />
<br />
3:ALL:忽略所有多点传送。<br />
<br />
2:RUNT:忽略不完整的数据包。<br />
<br />
1:PRMSC:混杂模式(Promiscuous Mode)<br />
<br />
0:RXEN:接收使能。<br />
<br />
RSR(06H):接收状态寄存器(RX Status Register )<br />
<br />
7:RF:不完整数据帧。该位置位表示接收到小于64字节的帧。<br />
<br />
6:MF:多点传送帧。该位置位表示接收到帧包含多点传送地址。<br />
<br />
5:LCS:冲突延迟。该位置位表示在帧接收过程中发生冲突延迟。<br />
<br />
4:RWTO:接收看门狗定时溢出。该位置位表示接收到大于2048字节数据帧。<br />
<br />
3:PLE:物理层错误。该位置位表示在帧接收过程中发生物理层错误。<br />
<br />
2:AE:对齐错误(Alignment)。该位置位表示接收到的帧结尾处不是字节对齐,即不是以字节为边界对齐。<br />
<br />
1:CE:CRC校验错误。该位置位表示接收到的帧CRC校验错误。<br />
<br />
0:FOE:接收FIFO缓存溢出。该位置位表示在帧接收时发生FIFO溢出。<br />
<br />
ROCR(07H):接收溢出计数寄存器(Receive Overflow Counter Register)<br />
<br />
7:RXFU:接收溢出计数器溢出。该位置位表示ROC(接收溢出计数器)发生溢出。<br />
<br />
6-0:ROC:接收溢出计数器。该计数器为静态计数器,指示FIFO溢出后,当前接收溢出包的个数。<br />
<br />
BPTR(08H):背压门限寄存器(Back Pressure Threshold Register)<br />
<br />
7-4:BPHW:背压门限最高值。当接收SRAM空闲空间低于该门限值,则MAC将产生一个拥挤状态。1=1K字节。默认值为3H,即3K字节空闲空间。不要超过SRAM大小。<br />
<br />
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。<br />
FCTR(09H):溢出控制门限寄存器(Flow Control Threshold Register)<br />
<br />
7-4:HWOT:接收FIFO缓存溢出门限最高值。当接收SRAM空闲空间小于该门限值,则发送一个暂停时间(pause_time)为FFFFH的暂停包。若该值为0,则无接收空闲空间。1=1K字节。默认值为3H,即3K字节空闲空间。不要超过SRAM大小。<br />
<br />
3-0:LWOT:接收FIFO缓存溢出门限最低值。当接收SRAM空闲空间大于该门限值,则发送一个暂停时间(pause_time)为0000H的暂停包。当溢出门限最高值的暂停包发送之后,溢出门限最低值的暂停包才有效。默认值为8K字节。不要超过SRAM大小。<br />
<br />
RTFCR(0AH):接收/发送溢出控制寄存器(RX/TX Flow Control Register)<br />
<br />
7:TXP0:1发送暂停包。发送完成后自动清零,并设置TX暂停包时间为0000H。<br />
<br />
6:TXPF:1发送暂停包。发送完成后自动清零,并设置TX暂停包时间为FFFFH。<br />
<br />
5:TXPEN:强制发送暂停包使能。按溢出门限最高值使能发送暂停包。<br />
<br />
4:BKPA:背压模式。该模式仅在半双工模式下有效。当接收SRAM超过BPHW并且接收新数据包时,产生一个拥挤状态。<br />
<br />
3:BKPM:背压模式。该模式仅在半双工模式下有效。当接收SRAM超过BPHW并数据包DA匹配时,产生一个拥挤状态。<br />
<br />
2:RXPS:接收暂停包状态。只读清零允许。<br />
<br />
1:RXPCS:接收暂停包当前状态。<br />
<br />
0:FLCE:溢出控制使能。1设置使能溢出控制模式。<br />
<br />
EPCR/PHY_CR(0BH):EEPROM和PHY控制寄存器(EEPROM &amp; PHY Control Register)<br />
<br />
7-6:保留。<br />
<br />
5:REEP:重新加载EEPROM。驱动程序需要在该操作完成后清零该位。<br />
<br />
4:WEP:EEPROM写使能。<br />
<br />
3:EPOS:EEPROM或PHY操作选择位。0选择EEPROM,1选择PHY。<br />
<br />
2:ERPRR:EEPROM读,或PHY寄存器读命令。驱动程序需要在该操作完成后清零该位。<br />
<br />
1:ERPRW:EEPROM写,或PHY寄存器写命令。驱动程序需要在该操作完成后清零该位。<br />
<br />
0:ERRE:EEPROM或PHY的访问状态。1表示EEPROM或PHY正在被访问。<br />
<br />
EPAR/PHY_AR(0CH):EEPROM或PHY地址寄存器(EEPROM &amp; PHY Address Register)<br />
<br />
7-6:PHY_ADR:PHY地址的低两位(bit1,bit0),而PHY地址的bit[4:2]强制为000。如果要选择内部PHY,那么此2位强制为01,实际应用中要强制为01。<br />
<br />
5-0:EROA:EEPROM字地址或PHY寄存器地址。<br />
<br />
EPDRL/PHY_DRL(0DH):EEPROM或PHY数据寄存器低半字节(EEPROM &amp; PHY Low Byte Data Register)<br />
<br />
7-0:EE_PHY_L<br />
<br />
EPDRL/PHY_DRH(0EH):EEPROM或PHY数据寄存器高半字节(EEPROM &amp; PHY High Byte Data Register)<br />
<br />
7-0:EE_PHY_H<br />
<br />
WUCR(0FH):唤醒控制寄存器(Wake Up Control Register)<br />
<br />
7-6:保留。<br />
<br />
5:LINKEN:1使能“连接状态改变”唤醒事件。该位不受软件复位影响。<br />
<br />
4:SAMPLEEN:1使能“Sample帧”唤醒事件。该位不受软件复位影响。<br />
<br />
3:MAGICEN:1使能“Magic Packet”唤醒事件。该位不受软件复位影响。<br />
<br />
2:LINKST:1表示发生了连接改变事件和连接状态改变事件。该位不受软件复位影响。<br />
<br />
1:SAMPLEST:1表示接收到“Sample帧”和发生了“Sample帧”事件。该位不受软件复位影响。<br />
<br />
0:MAGICST:1表示接收到“Magic Packet”和发生了“Magic Packet”事件。该位不受软件复位影响。<br />
<br />
PAR(10H -- 15H):物理地址(MAC)寄存器(Physical Address Register)<br />
<br />
7-0:PAD0 -- PAD5:物理地址字节0 -- 字节5(10H -- 15H)。用来保存6个字节的MAC地址。<br />
<br />
MAR(16H -- 1DH):多点发送地址寄存器(Multicast Address Register )<br />
<br />
7-0:MAB0 -- MAB7:多点发送地址字节0 -- 字节7(16H --1DH)。<br />
<br />
GPCR(1FH):GPIO控制寄存器(General Purpose Control Register)<br />
<br />
7-4:保留。<br />
<br />
3-0:GEP_CNTL:GPIO控制。定义GPIO的输入输出方向。1为输出,0为输入。GPIO0默认为输出做POWER_DOWN功能。其它默认为输入。因此默认值为0001。<br />
<br />
GPR(1FH):GPIO寄存器(General Purpose Register)<br />
<br />
7-4:保留。<br />
<br />
3-1:GEPIO3-1:GPIO为输出时,相关位控制对应GPIO端口状态,GPIO为输入时,相关位反映对应GPIO端口状态。(类似于单片机对IO端口的控制)。<br />
<br />
0:GEPIO0:功能同上。该位默认为输出1到POWER_DEWN内部PHY。若希望启用PHY,则驱动程序需要通过写“0”将PWER_DOWN信号清零。该位默认值可通过EEPROM编程得到。参考EEPROM相关描述。<br />
<br />
TRPAL(22H):发送SRAM读指针地址低半字节(TX SRAM Read Pointer Address Low Byte)<br />
<br />
7-0:TRPAL<br />
<br />
TRPAH(23H):发送SRAM读指针地址高半字节(TX SRAM Read Pointer Address High Byte )<br />
<br />
7-0:TRPAH<br />
<br />
RWPAL(24H):接收SRAM指针地址低半字节(RX SRAM Write Pointer Address Low Byte)<br />
<br />
7-0:RWPAL<br />
<br />
RWPAH(25H):接收SRAM指针地址高半字节(RX SRAM Write Pointer Address High Byte)<br />
<br />
7-0:RWPAH<br />
<br />
VID(28H -- 29H):生产厂家序列号(Vendor ID)<br />
<br />
7-0:VIDL:低半字节(28H),只读,默认46H。<br />
<br />
7-0:VIDH:高半字节(29H),只读,默认0AH。<br />
<br />
PID(2AH --2BH):产品序列号(Product ID)<br />
<br />
7-0:PIDL:低半字节(2AH),只读,默认00H。<br />
<br />
7-0:PIDH:高半字节(2BH),只读,默认90H。<br />
<br />
CHIPR(2CH):芯片修订版本(CHIP Revision)<br />
<br />
7-0:PIDH:只读,默认00H。<br />
<br />
TCR2(2DH):传输控制寄存器2(TX Control Register 2)<br />
<br />
7:LED:LED模式。1设置LED引脚为模式1,0设置LED引脚为模式0或根据EEPROM的设定。<br />
<br />
6:RLCP:1重新发送有冲突延迟的数据包。<br />
<br />
5:DTU:1禁止重新发送“underruned”数据包。<br />
<br />
4:ONEPM:单包模式。1发送完成前发送一个数据包的命令能被执行,0发送完成前发送两个以上数据包的命令能被执行。<br />
<br />
3-0:IFGS:帧间间隔设置。0XXX为96bit,1000为64bit,1001为72bit,1010为80bit,1011为88bit,1100为96bit,1101为104bit,1110为112bit,1111为120bit。<br />
<br />
OCR(2EH):操作测试控制寄存器(Operation Control Register)<br />
<br />
7-6:SCC:设置内部系统时钟。00为50MHz,01为20MHz,10为100MHz,11保留。<br />
<br />
5:保留。<br />
<br />
4:SOE:内部SRAM输出使能始终开启。<br />
<br />
3:SCS:内部SRAM片选始终开启。<br />
<br />
2-0:PHYOP:为测试用内部PHY操作模式。<br />
<br />
SMCR(2FH):特殊模式控制寄存器(Special Mode Control Register)<br />
<br />
7:SM_EN:特殊模式使能。<br />
<br />
6-3:保留。<br />
<br />
2:FLC:强制冲突延迟。<br />
<br />
1:FB1:强制最长“Back-off”时间。<br />
<br />
0:FB0:强制最短“Back-off”时间。<br />
<br />
ETXCSR(30H):传输前(Early)控制、状态寄存器(Early Transmit Control/Status Register)<br />
<br />
7:ETE:传输前使能。<br />
<br />
6:ETS2:传输前状态2。<br />
<br />
5:ETS1:传输前状态1。<br />
<br />
4-2:保留。<br />
<br />
1-0:ETT:传输前门限。当写到发送FIFO缓存里的数据字节数达到该门限,则开始传输。00为12.5%,01为25%,10为50%,11为75%。<br />
<br />
TCSCR(31H):传输校验和控制寄存器(Transmit Check Sum Control Register)<br />
<br />
7-3:保留。<br />
<br />
2:UDPCSE:UDP校验和产生使能。<br />
<br />
1:TCPCSE:TCP检验和产生使能。<br />
<br />
0:IPCSE:IP校验和产生使能。<br />
<br />
RCSCSR(32H):接收校验和控制状态寄存器(Receive Check Sum Control Status Register )<br />
<br />
7:UDPS:UDP校验和状态。1表示UDP数据包校验失败。<br />
<br />
6:TCPS:TCP校验和状态。1表示TCP数据包校验失败。<br />
<br />
5:IPS:IP校验和状态。1表示IP数据包校验失败。<br />
<br />
4:UDPP:1表示UDP数据包。<br />
<br />
3:TCPP:1表示TCP数据包。<br />
<br />
2:IPP:1表示IP数据包。<br />
<br />
1:RCSEN:接收检验和检验使能。1使能校验和校验,将校验和状态位(bit7-2)存储到数据包的各自的报文头的第一个字节。<br />
<br />
0:DCSE:丢弃校验和错误的数据包。1使能丢弃校验和错误的数据包,若IP/TCP/UDP的校验和域错误,则丢弃该数据包。<br />
<br />
MRCMDX(F0H):存储器地址不变的读数据命令(Memory Data Pre-Fetch Read Command Without Address Increment Register)<br />
<br />
7-0:MRCMDX:从接收SRAM中读数据,读取之后,指向内部SRAM的读指针不变。<br />
<br />
MRCMDX1(F1H):存储器读地址不变的读数据命令(Memory Data Read Command With Address Increment Register<br />
<br />
同上。<br />
<br />
MRCMD(F2H):存储器读地址自动增加的读数据命令(Memory Data Read Command With Address Increment Register)<br />
<br />
7-0:MRCMD:从接收SRAM中读数据,读取之后,指向内部SRAM的读指针自动增加1、2或4,根据处理器的操作模式而定(8位、16位或32位)。<br />
<br />
MRRL(F4H):存储器读地址寄存器低半字节(Memory Data Read_ address Register Low Byte)<br />
<br />
7-0:MDRAL<br />
<br />
MRRH(F5H):存储器读地址寄存器高半字节Memory Data Read_ address Register High Byte<br />
<br />
7-0:MDRAH:若IMR的bit7=1,则该寄存器设置为0CH。<br />
<br />
MWCMDX(F6H):存储器读地址不变的读数据命令(Memory Data Write Command Without Address Increment Register)<br />
<br />
7-0:MWCMDX:写数据到发送SRAM中,之后指向内部SRAM的写地址指针不变。<br />
<br />
MWCMD(F8H):存储器读地址自动增加的读数据命令(Memory Data Write Command With Address Increment Register)<br />
<br />
7-0:MWCMD:写数据到发送SRAM中,之后指向内部SRAM的读指针自动增加1、2或4,根据处理器的操作模式而定(8位、16位或32位)。<br />
<br />
MWRL(FAH):存储器写地址寄存器低半字节(Memory Data Write_ address Register Low Byte)<br />
<br />
7-0:MDRAL<br />
<br />
MWRH(FBH):存储器写地址寄存器高半字节(Memory Data Write _ address Register High Byte)<br />
<br />
7-0:MDRAH<br />
<br />
TXPLL(FCH):发送数据包长度寄存器低半字节(TX Packet Length Low Byte Register)<br />
<br />
7-0:TXPLL<br />
<br />
TXPLH(FDH):发送数据包长度寄存器高半字节(TX Packet Length High Byte Register)<br />
<br />
7-0:TXPLH<br />
<br />
ISR(FEH):中断状态寄存器(Interrupt Status Register)<br />
<br />
7-6:IOMODE:处理器模式。00为16位模式,01为32位模式,10为8位模式,11保留。<br />
<br />
5:LNKCHG:连接状态改变。<br />
<br />
4:UDRUN:传输“Underrun”<br />
<br />
3:ROOS:接收溢出计数器溢出。<br />
<br />
2:ROS:接收溢出。<br />
<br />
1:PTS:数据包传输。<br />
<br />
0:PRS:数据包接收。<br />
<br />
ISR寄存器各状态写1清除<br />
<br />
IMR(FFH):中断屏蔽寄存器(Interrupt Mask Register)<br />
<br />
7:PAR:1使能指针自动跳回。当SRAM的读、写指针超过SRAM的大小时,指针自动跳回起始位置。需要驱动程序设置该位,若设置则REG_F5(MDRAH)将自动位0CH。<br />
<br />
6:保留。<br />
<br />
5:LNKCHGI:1使能连接状态改变中断。<br />
<br />
4:UDRUNI:1使能传输“Underrun”中断。<br />
<br />
3:ROOI:1使能接收溢出计数器溢出中断。<br />
<br />
2:ROI:1使能接收溢出中断。<br />
<br />
1:PTI:1使能数据包传输终端。<br />
<br />
0:PRI:1使能数据包接收中断。<br />
<br />
注释:其中“蓝色字体”表示在DM9000初始化中要用到的寄存器。<br />
<br />
&nbsp;&nbsp;&nbsp; 访问以上寄存器的方法是通过总线驱动的方式,即通过对IOR、IOW、AEN、CMD以及SD0--SD15等相关引脚的操作来实现。其中CMD引脚为高电平时为写寄存器地址,为低电平时为写数据到指定地址的寄存器中。详细过程请参考数据手册中“读写时序”部分。<br />
<br />
&nbsp;&nbsp;&nbsp; 在DM9000(A)中,还有一些PHY寄存器,也称之为介质无关接口MII寄存器,需要我们去访问。这些寄存器是字对齐的,即16位宽。下面列出三个常用的PHY寄存器。<br />
<br />
BMCR(00H):基本模式控制寄存器(Basic Mode Control Register)<br />
<br />
15:reset:1PHY软件复位,0正常操作。复位操作使PHY寄存器的值为默认值。复位操作完成后,该位自动清零。<br />
<br />
14:loopback:1Loop-back使能,0正常操作。<br />
<br />
13:speed selection:1为100Mbps,0为10Mbps。连接速度即可以根据该位选择,也可以根据第12位,即自动协商选择。当自动协商使能时,即第12位为1,该位将会返回自动协商后的速度值。<br />
<br />
12:auto-negotiation enable:1自动协商使能。使得第13位和第8位的值反应自动协商后的状态。<br />
<br />
11:power down:POWER_DOWN模式。1为POWER_DOWN,0为正常操作。在POWER_DOWN状态下,PHY应当响应操作处理。在转变到POWER_DOWN状态或已经运行在POWER_DOWN状态下时,PHY不会在MII上产生虚假信号。<br />
<br />
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被隔离,则它将响应操作处理。<br />
<br />
9:restart auto-aegotiation:1重新初始化自动协商协议,0为正常操作。当第12位禁止该功能,则该位无效。初始化后该位自动清零。<br />
<br />
8:duplex mode:1为全双工操作,0为正常操作。当第12位被禁止(置0)时该位被置位,若第12位被置位,则该位反应自动协商后的状态。<br />
<br />
7:collision test:1为冲突测试使能,0为正常操作。若该位置位,声明TX_EN将引起COL信号被声明。<br />
<br />
6-0:保留。<br />
<br />
ANAR(04H):自动协商广告寄存器(Auto-negotiation Advertisement Register)<br />
<br />
15:NP:0表示无有效的下一页,1表示下一页有效。PHY没有下一页,所以该位始终为0。<br />
<br />
14:ACK:1表示连接对象数据接收认证,0表示无认证。PHY的自动协商状态机会自动控制该位。<br />
<br />
13:RF:1表示本地设备处于错误状态,0为无错误检验。<br />
<br />
12-11:保留。<br />
<br />
10:FCS:1表示处理器支持溢出控制能力,0表示不支持。<br />
<br />
9:T4:1表示本地设备支持100BASE-T4,0表示不支持。PHY不支持100BASE-T4,所以该位永远是0。<br />
<br />
8:TX_FDX:1为本地设备支持100BASE-TX全双工模式,0为不支持。<br />
<br />
7:TX_HDX:1为本地设备支持100BASE-TX,0为不支持。<br />
<br />
6:10_FDX:1为本地设备支持100BASE-T全双工模式,0为不支持。<br />
<br />
5:10_HDX:1为本地设备支持100BASE-T,0为不支持。<br />
<br />
4-0:selecter:协议选择位,00001为默认值,表示设备支持IEEE802.3CSMA/CD,不用修改。<br />
<br />
DSCR(16H):DAVICOM详细配置寄存器(DAVICOM Specified Configuration Register)<br />
<br />
15:BP_4B5B:1为绕过4B5B编码和5B4B解码功能,0为正草4B5B和5B4B功能。<br />
<br />
14:BP_SCR:1为绕过扰频和解扰功能,0为正常操作。<br />
<br />
13:BP_ALIGN:1为绕过接收时的解扰、符号队列、解码功能和发送时的符号编码、扰频功能,0正常操作。<br />
<br />
12:BP_ADPOK:1为强制信号探测功能使能,0为正常操作。该位仅为调试使用<br />
<br />
11:保留。<br />
<br />
10:TX:1表示100BASE-TX操作,0保留。<br />
<br />
9-8:保留。<br />
<br />
7:F_LINK_100:0为正常100Mbps,1为强制100Mbps良好连接状态。<br />
<br />
6-5:保留,强制为0.<br />
<br />
4:RPDCTR-EN:1为使能自动简化POWER_DOWN,0为禁止。<br />
<br />
3:SMRST:1为重新初始化PHY的状态机,初始化后该位自动清零。<br />
<br />
2:MFPSC:1表示MII帧引导抑制开启,0表示关闭。<br />
<br />
1:SLEEP:睡眠模式。该位置位将导致PHY进入睡眠模式,通过将该位清零唤醒睡眠模式,其中配置将还原为睡眠模式之前的状态,但状态机将重新初始化。<br />
<br />
0:RLOUT:该位置位将使接收到的数据放入发送通道中。<br />
<br />
&nbsp;&nbsp;&nbsp; 访问PHY寄存器的方法是:<br />
<br />
(1)寄存器地址写到EPAR/PHY_AR(0CH)寄存器中,注意将寄存器地址的第6位置1(地址与0x40或运算即可),以表明写的是PHY地址,而不是EEPROM地址。<br />
<br />
(2)将数据高字节写到PHY_DRH(0EH)寄存器中。<br />
<br />
(3)将数据低字节写到PHY_DRL(0DH)寄存器中。<br />
<br />
(4)发送PHY命令(0x0a)到EPCR/PHY_CR(0BH)寄存器中。<br />
<br />
(5)延时5us,发送命令0x08到EPCR/PHY_CR(0BH)寄存器中,清除PHY写操作。<br />
<br />
&nbsp;&nbsp;&nbsp; 以上为DM9000(A)常用寄存器功能的详细介绍,通过对这些寄存器的操作访问,我们便可以实现对DM9000的初始化、数据发送、接收等相关操作。而要实现ARP、IP、TCP等功能,则需要对相关协议的理解,由编写相关协议或移植协议栈来实现。
vfdff(作者)
2009-02-18 08:10
2
RTL8019AS--补遗<br />
<br />
内部RAM地址空间分配 <br />
RTL8019AS内部有两块RAM区。一块16K字节,地址为0x4000~0x7fff;一块32字节,地址为0x0000~0x001f。RAM按页存储,每256字节为一页。一般将RAM的前12页(即0x4000~0x4bff)存储区作为发送缓冲区;后52页(即0x4c00~0x7fff)存储区作为接收缓冲区。第0页叫Prom页,只有32字节,地址为0x0000~0x001f,用于存储以太网物理地址。<br />
<br />
要接收和发送数据包就必须通过DMA读写RTL8019AS内部的16KB RAM。它实际上是双端口的RAM,是指有两套总线连接到该RAM,一套总线RTL8019AS读或写该RAM,即本地DMA;另一套总线是单片机读或写该RAM,即远程DMA。<br />
<br />
内部结构<br />
<br />
RTL8019AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。<br />
<br />
远程DMA接口是指单片机对RTL8019AS内部RAM进行读写的总线,即ISA总线的接口部分。单片机收发数据只需对远程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线的数据交换。<br />
<br />
MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;当RTL8019AS完成了上帧的发送后,再开始此帧的发送。RTL819接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作16字节的缓冲,以减少对本地DMA请求的频率。<br />
<br />
I/O地址分配<br />
<br />
RTL8019AS具有32位输入输出地址,地址偏移量为00H~1FH。其中00H~0FH共16个地址,为寄存器地址。寄存器分为4页:PAGE0、PAGE1、PAGE2、PAGE3,由RTL8019AS的CR(Command Register命令寄存器)中的PS1、PS0位来决定要访问的页。但与NE2000兼容的寄存器只有前3页,PAGE3是RTL8019AS自己定义的,对于其他兼容NE2000的芯片如DM9008无效。远程DMA地址包括10H~17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复位端口包括18H~1FH共8个地址,功能一样,用于RTL8019AS复位。 <br />
<br />
初始化RTL8019AS<br />
<br />
初始化页0与页1的相关寄存器,页2的寄存器是只读的,不可以设置,页3的寄存器不是NE2000兼容的,不用设置。<br />
<br />
(1)CR=0x21,选择页0的寄存器;<br />
<br />
(2)TPSR=0x45,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40; <br />
<br />
<br />
(3)PSTART=0x4c,PSTOP=0x80,构造缓冲环:0x4c~0x80;<br />
<br />
(4)BNRY=0x4c,设置指针;<br />
<br />
(5)RCR=0xcc,设置接收配置寄存器,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃,校验错的数据包不接收;<br />
<br />
(6)TCR=0xe0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;<br />
<br />
(7)DCR=0xc8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;<br />
<br />
(8)IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;<br />
<br />
(9)CR=0x61,选择页1的寄存器;<br />
<br />
(10)CURR=0x4d,CURR是RTL8019AS写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4c+1=0x4d;<br />
<br />
(11)设置多址寄存器MAR0~MAR5,均设置为0x00;<br />
<br />
(12)设置网卡地址寄存器PAR0~PAR5;<br />
<br />
(13)CR=0x22,选择页1的寄存器,进入正常工作状态。<br />
<br />
发送帧<br />
<br />
将待发送的数据按帧格式封装,通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令,完成帧的发送。需要设置以太网目的地址、以太网源地址、协议类型,再按所设置的协议类型来设置数据段。之后启动远程DMA,数据写入RTL8019AS的RAM,再启动本地DMA,将数据发送网上。<br />
<br />
RTL8019AS无法将整个数据包通过DMA通道一次存入FIFO,则在构成一个新的数据包之前必须先等待前一数据包发送完成。为提高发送效率,设计将12页的发送缓存区分为两个6页的发送缓存区,一个用于数据包发送,另一个用于构造端的数据包,交替使用。<br />
<br />
2、RTL8019的配置<br />
RTL8019是一款高度集成的以太网控制芯片,它有两种工作模式:一种是跳线模式<br />
jumper,一种是非跳线模式 jumperless,后者也支持Plug and Play。在单片机中<br />
一般都采用跳线模式选项。I/O端口的基地址IO_BASE_ADDRESS由单片机和8019之间<br />
的接线决定。此外8019还具有8个IRQ接口,本系统中没用到IRQ,采用查询方式。<br />
<br />
8019输入输出地址共32个,地址偏移量为00H――1FH:<br />
其中00H--0FH共16个地址,为寄存器地址,寄存器分成4页PAGE0――PAGE3,与<br />
NE2000兼容的寄存器只有3页(Page0-Page2),为了保证驱动程序对所有Ne2000的<br />
网卡有效,不要去操作第四页的寄存器。<br />
<br />
10H--17H共8个地址,为DMA地址。<br />
18H--1FH共8个地址,为软复位端口。8019的硬件复位很简单,只需在上电时对<br />
RSTDRV输出一高电平就可以了。8019复位的过程将执行一些操作,比如将93c46读<br />
入,将内部寄存器初始化等,至少需要2毫秒的时间。推荐等待更久的时间之后才<br />
对网卡操作,比如100毫秒之后才对它操作,以确保完全复位。<br />
<br />
ICS16B=LOW时采用8位DMA操作模式,上面的地址中只有18个是有用的: 00H--<br />
0FH共16个寄存器地址。10H DMA地址 (10H--17H的8个地址是一样的,都可以用<br />
来做DMA端口,只要用其中的一个就可以了)。1FH 复位地址(18H到1FH共8个地址<br />
都是复位地址,每个地址的功能都是一样的,只要其中的一个就可以了,但实际上<br />
只有18H、1AH、1CH、1EH这几个复位端口是有效的,其他不要使用,有些兼容卡不<br />
支持19H、1BH、1DH等奇数地址的复位)。 <br />
<br />
<br />
网卡驱动及TCP/IP协议栈的简化<br />
<br />
从程序员的角度来说,对8019的操作是比较简单的,驱动程序只需要将要发送的数<br />
据按一定的格式写入芯片并启动发送命令,8019会自动添加接收状态、下一页指针<br />
、以太网帧长度和校验FCS段,并将数据包转换成物理帧格式在物理信道上传输。<br />
反之,8019收到物理信号后将其还原成数据,按指定格式存放在芯片RAM中以便主<br />
机程序取用。简言之就是8019完成数据包和电信号之间的相互转换:数据包&lt;===&gt;<br />
电信号。以太网协议由芯片硬件自动完成,对程序员透明。驱动程序有3种功能:<br />
芯片初始化、收包、发包。发送数据包是先将待发送的数据包通过DMA写操作存入<br />
网卡芯片RAM,并给出发送缓冲区首地址(TPSR0、TPSR1)和数据包长度(TBCR0,<br />
TBCR1),启动发送命令,网卡芯片会自动按以太网协议完成发送并将结果写入状态<br />
寄存器。接收数据包时,采用查询的方式,根据CURR==BNRY+1?可以判断是否收<br />
到新的数据包,如果有则通过DMA读操作从网卡芯片RAM读出数据。发送、接收子程<br />
序如下所示:<br />
<br />
1发送子程序<br />
bit Transmit(void)<br />
{<br />
CardCopyDown();<br />
XBYTE[IO_BASE_ADDRESS + NIC_COMMAND] = CR_NO_DMA|CR_STOP|CR_PAGE0;//停止<br />
8019<br />
XBYTE[IO_BASE_ADDRESS + NIC_INTR_STATUS] = 0xFF;//清中断标志<br />
XBYTE[IO_BASE_ADDRESS + NIC_XMIT_START] = XMIT_START;//设置发送开始地址<br />
XBYTE[IO_BASE_ADDRESS + NIC_XMIT_CONFIG] = TCR_NO_LOOPBACK;//设置为一般<br />
模式<br />
XBYTE[IO_BASE_ADDRESS+NIC_DATA_CONFIG]=DCR_FIFO_8_BYTE|DCR_NORMAL|DCR_BY<br />
TE_WIDE;//设置8位DMA模式<br />
XBYTE[IO_BASE_ADDRESS + NIC_XMIT_COUNT_LSB] = 100;//设置发送数据长度<br />
XBYTE[IO_BASE_ADDRESS + NIC_XMIT_COUNT_MSB] = 0;<br />
XBYTE[IO_BASE_ADDRESS + NIC_COMMAND] = CR_START|CR_XMIT|CR_PAGE0;//启动<br />
8019<br />
return (TRUE);<br />
} <br />
2接收子程序<br />
bit Receive(void)<br />
{<br />
uint TempShort;<br />
uchar Temp;<br />
uchar CURR;<br />
uchar BNRY;<br />
uint i;<br />
//停止网卡<br />
XBYTE[IO_BASE_ADDRESS + NIC_COMMAND] = CR_STOP|CR_NO_DMA|CR_PAGE1;<br />
//读取当前CURRENT的值<br />
CURR= XBYTE[IO_BASE_ADDRESS + NIC_CURRENT];<br />
//读取当前BOUNDARY的值<br />
XBYTE[IO_BASE_ADDRESS + NIC_COMMAND] = CR_STOP|CR_NO_DMA|CR_PAGE0;<br />
BNRY= XBYTE[IO_BASE_ADDRESS + NIC_BOUNDARY];<br />
if(CURR==0)<br />
return (FAULSE);<br />
if((++BNRY)&gt; PAGE_STOP)<br />
BNRY=PAGE_START;<br />
if(CURR!=BNTY)//表示有包收到<br />
{<br />
//设置远端DMA地址和长度<br />
XBYTE[IO_BASE_ADDRESS + NIC_RMT_ADDR_LSB] = 0x00;<br />
XBYTE[IO_BASE_ADDRESS + NIC_RMT_ADDR_MSB] = BOUNDARY;<br />
XBYTE[IO_BASE_ADDRESS+NIC_RMT_COUNT_LSB]=__dread&amp;0xFF;<br />
XBYTE[IO_BASE_ADDRESS + NIC_RMT_COUNT_MSB] = (__dread&gt;&gt;8)&amp;0xFF;<br />
//设置DMA读<br />
XBYTE[IO_BASE_ADDRESS + NIC_COMMAND] = CR_START|CR_DMA_READ|CR_PAGE0;<br />
//重复读DMA端口<br />
for (i=0;i&lt;__dread;i++)<br />
{<br />
Receive_data[i] = XBYTE[IO_BASE_ADDRESS + NIC_RACK_NIC];<br />
}<br />
//等待DMA停止<br />
TempShort = 0xFFFF;<br />
while(TempShort)<br />
{<br />
Temp = XBYTE[IO_BASE_ADDRESS + NIC_INTR_STATUS];<br />
if (Temp&amp;ISR_DMA_DONE) break;<br />
TempShort --;<br />
}<br />
return (TRUE);<br />
}<br />
else<br />
return(FAULSE);<br />
}<br />
<br />
3协议栈的精简<br />
<br />
单片机中TCP/IP的实现与PC机不同,在PC里可支持比较完整的TCP/IP协议组,但在<br />
单片机里无法做到,这是因为单片机根本没有足够的代码空间来支持这些协议。一<br />
般在单片机里实现与需要有关的部分,而不使用的协议则一概不支持。例如文件共<br />
享SMB协议,在UNIX、WINDOWS都支持,但单片机上却没有必要。一般只能在单片机<br />
中实现:ARP、IP,ICMP、TCP/UDP这些协议,而更高层的协议,HTTP、SMTP、FTP<br />
一般是不需要支持的。虽然有些单片机例如AVR上网方案实现了这些协议,但实用<br />
性不大。因为单片机应用的TCP/IP协议大多是为了完成数据采集和数据传输,而不<br />
是网页浏览、文件传输这些功能。另外由于单片机资源的有限性,对某一协议而言<br />
,也有可能要作简化。本系统中实现的协议只有ARP、IP、ICMP、UDP。在选择传输<br />
层协议时我们放弃了面向链接的TCP,因为TCP为了保证数据的可靠性采用一问一答<br />
的方式,这在数据量并不大的嵌入式系统中,反而增加了网络的负担;另外TCP的<br />
很多机制,如分段机制、窗口机制等都适合于数据量大、处理能力强的PC机网络,<br />
并不适合于嵌入式系统。UDP虽然不提供面向链接的、可靠的服务,但是协议简单<br />
,实时性更强,应用层也可以做相应的定时等待、重发处理等辅助性的操作来弥补<br />
它的缺陷。<br />
<br />
a.ARP:ARP的本质就是实现IP地址到MAC地址的转换,抓住了这一点实现就比较简<br />
单。嵌入式系统中没有必要实现PC机网络中地址表的更新功能,只需完成地址转换<br />
。管理中心机在初始化CDT时发送ARP请求,CDT只需响应中心对它的ARP请求,但不<br />
主动发送ARP请求。<br />
<br />
b.ICMP:ICMP的种类很多,在本系统中只要实现ICMP信息回显功能。管理中心在<br />
执行PING命 令 时,发送ICMP请求信息,CDT中只需实现ICMP回应信息。<br />
<br />
c.IP:IP包最大可达65k,单片机中无法存放如此大的数据包,因此一般不支持分<br />
段,以发送小数据的方式来避免分段。另外IP层的选项功能都可以完全忽略,IP层<br />
只需要根据协议类型分包。<br />
d.应用层:应用层采用自己的数据协议格式为:
vfdff(作者)
2009-02-18 08:51
3
单片机的以太网开发<br />
http://www.91tech.net/Article/HardTech/SCMicrocomputer/200606/3930.html<br />
<br />
如今社会以太网已经发展的相当成熟了,做为我们电子工程师,了解一下以太网是有相当的必要了,我以我在仪器仪表接入以太网方面的工作的一点经验与大家交流。<br />
<br />
我比较熟悉的网卡是10M的网卡,主芯片是51单片机和网卡芯片RTL8019AS。老实说,我做的网卡速度并不快,但用于一些简单仪表,智能设备(在速度要求并不是很高的情况下)中,却是很管用的。速度快不起来,原因有几点:<br />
<br />
1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用的是51单片机,<br />
<br />
2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网卡芯片也只有10M。<br />
<br />
3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由以太网协议本身的要求所决定的(TCP传的慢,UDP传相对要快)。<br />
<br />
&nbsp;&nbsp;&nbsp; 现在我将自己的一点经验和来自网上大侠的资料(比如老古的网站会更详细)。给大家参考。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;一,以太网数据包的结构&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。<br />
<br />
PR<br />
 SD<br />
 DA<br />
 SA<br />
 TYPE<br />
 DATA<br />
 PAD<br />
 FCS<br />
 <br />
56BIT <br />
 8 BIT<br />
 48 BIT<br />
 48 BIT<br />
 16 BIT<br />
 46~1500BYTE<br />
 不定<br />
 32 BIT<br />
 <br />
<br />
<br />
——PR:用于同步位,是收发双方的时钟同步,也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010.....<br />
——SD:分隔位,表示下面跟着的是真正的数据,为8位的10101011,跟同步位不同的是最后2位是11而不是10.<br />
——DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡. <br />
——SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节.<br />
----TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。如:0800H 表示数据为IP包,0806H 表示数据为ARP包,814CH是SNMP包,8137H为IPX/SPX包,(小于0600H的值是用于IEEE802的,表示数据包的长度。)<br />
----DATA:数据段 ,该段数据不能超过1500字节。因为以太网规定整个传输包的最大长度不能超过1514字节。(14字节为DA,SA,TYPE)<br />
----PAD:填充位。由于以太网帧传输的数据包最小不能小于60字节, 除去(DA,SA,TYPE 14字节),还必须传输46字节的数据,当数据段的数据不足46字节时,后面补000000.....(当然也可以补其它值)<br />
----FCS:32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,自动在数据段后面填入.对于数据的校验算法,我们无需了解.<br />
----事实上,PR,SD,PAD,FCS这几个数据段我们不用理它 ,它是由网卡自动产生的,我们要理的是DA,SA,TYPE,DATA四个段的内容.<br />
----所有数据位的传输由低位开始(但传输的位流是用曼彻斯特编码的) <br />
----以太网的冲突退避算法就不介绍了,它是由硬件自动执行的.<br />
DA+SA+TYPE+DATA+PAD最小为60字节,最大为1514字节.<br />
<br />
二,网卡芯片RTL8019AS的介绍<br />
<br />
由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。主要性能:<br />
<br />
1、符号Ethernet II与IEEE802.3(10Base5、10Base2、10BaseT)标准;<br />
<br />
2、全双工,收发可同时达到10Mbps的速率;<br />
<br />
3、内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求;<br />
<br />
4、支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择;<br />
<br />
5、支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;<br />
<br />
6、允许4个诊断LED引脚可编程输出;<br />
<br />
7、100脚的PQFP封装。<br />
<br />
网卡芯片RTL8019AS内部结构为:<br />
<br />
RTL8019AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。、<br />
<br />
远程DMA接口是指单片机对RTL8019AS内部RAM进行读写的总线。单片机收发数据只需对远程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线的数据交换。<br />
<br />
MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;当RTL8019AS完成了上一帧的发送后,再开始此帧的发送。而RTL8019接收到数据时通过MAC比较、CRC校验后,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知单片机。<br />
<br />
RTL8019AS内部有两块RAM区。一块16K字节,地址为0x4000~0x7fff;一块小区32字节单元(即输入输出地址),地址为0x0000~0x001f。:(对应于240H--25FH,240H的地址偏移量为0,241H的地址偏移量为1,。。。25FH的地址偏移量为1FH)。<br />
<br />
其中00H--0FH共16个地址单元,为寄存器地址。<br />
10H--17H共8个单元,为DMA地址。<br />
18H--1FH共8个单元,为复位端口。<br />
对于8位的操作方式,上面的地址中只有18个是有用的:<br />
00H--0FH共16个寄存器地址。<br />
10H DMA地址 (10H--17H的8个地址是一样的,都可以用来做DMA端口,只用其中之一)<br />
1FH 复位地址。(18H到1FH共8个地址都是复位地址,每个地址的功能都是一样的,只用其中之一就OK了,但实际上只有18H,1AH,1CH,1EH这几个复位端口是有效的,其他不要使用,有些兼容卡不支持19H,1BH,1DH等奇数地址的复位)<br />
<br />
寄存器介绍:<br />
<br />
a, 命令寄存器CR的各位介绍:<br />
<br />
——PS1和PS0这两个位用来选择寄存器页,PS1 PS0=00时选择寄存器页0,=01时选择寄存器页1, =10时选择寄存器页2,=11时选择寄存器页3.<br />
<br />
--RD2,RD1,RD0这3个位代表要执行的功能。<br />
=001 读网卡内存<br />
=010 写网卡内存<br />
=011 发送网卡数据包<br />
=1** 完成或结束DMA的读写操作<br />
<br />
--TXP这个位写入1时发送数据包,发完自动清零<br />
<br />
--STA,STP这两个位用来启动命令或停止命令<br />
<br />
=10 启动命令<br />
=01 停止命令<br />
<br />
b,PSTART 指定开始接收页<br />
<br />
c,PSTOP指定结束页。(该页不用于接收)<br />
<br />
d,BNRY 指向最后一个已经读取的页(读指针)<br />
<br />
e,TPSR为发送页的起始页地址。<br />
<br />
f,ISR,中断寄存器,为FF则清除所有标志位<br />
<br />
g,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RCR 接收配置寄存器,设置为使用接收缓冲区,仅接收自己的地址的数据包&nbsp;&nbsp;&nbsp;(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃(这是协议的&nbsp;&nbsp;&nbsp;规定,设置成接收是用于网络分析),校验错的数据包不接收<br />
<br />
h,TCR 发送配置寄存器,启用crc自动生成和自动校验,工作在正常模式<br />
<br />
i,DCR 数据配置寄存器,设置为使用FIFO缓存,普通模式,8位数据传输模式,<br />
<br />
j,IMR 中断屏蔽寄存器,设置成0x00,屏蔽所有的中断<br />
<br />
k,CURR 当前的接收结束页地址<br />
<br />
其中b,c,d,k,用于接收的设置<br />
<br />
三,对网卡初始操作步骤:<br />
<br />
1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先要对网卡进行复位,对网卡复位有两种,<br />
<br />
a,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是泠启动,对RTL8019的33脚RSTDRV进行发送一个高电平,网卡是高电平复位的。<br />
<br />
b,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是热启动,对RTL8019内部寄存器操作,对复位端口进行任意读写。<br />
<br />
2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对寄存器进行设置,主要有以下操作<br />
<br />
a,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先停止网卡工作,设置发送和接收的单元。设置是否要屏蔽中断,设置网卡工作在8位总线还是16位总线工作方式等。<br />
<br />
b,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后设置网卡的MAC地址到MAR寄存器。等,然后让网卡开始工作<br />
<br />
c,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初始化完成。<br />
<br />
四,补充几点<br />
<br />
1,&nbsp;&nbsp;以太网卡可以接收三种地址的数据,一个是广播地址,一个是多播地址(我们用不上),一个是它自已的地址.但网卡也可以设置为接收任何数据包(用于网络分析和监控).<br />
&nbsp;&nbsp;&nbsp;任何网卡的物理地址都应该是不一样的,是世界上唯一的,网卡地址由IEEE专门机构分配.(申请购买网卡地址的网址)https://standards.ieee.org/regauth/oui/forms/OUI-form.shtml)<br />
<br />
不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的. 所以你需要向他们购买。<br />
<br />
2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP协议采用统一的校验算法:<br />
<br />
初始校验和为0,然后对数据每16位求异或,结果取反,便得到校验和。校验时将数据(含校验和)按同样的算法求和,结果为0,则数据正确。不为零则出错。<br />
<br />
3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网卡LED脚<br />
<br />
网卡有四个LED脚,分别为60、61、62、63脚,默认状态下其中60脚在连接网络是为低电平,没有连网线是为高电平;61脚连线时为高电平,没有连线是为低电平;62脚没有数据通讯是为为低电平输出,有数据传输时为脉冲电平,我做的网卡用了60、62脚。<br />
<br />
4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我的程序没有用到93C46,如果要掉电存储MAC地址等。可以用别的<br />
<br />
EEPROM代替。<br />
<br />
5,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(补充当中)<br />
<br />
 <br />
<br />
五、本人开发当中碰到的问题及经验<br />
<br />
&nbsp;&nbsp;&nbsp;说不清楚,反正仔细是最重要的,因为随便哪里出点问题,都可能导致协议不通,出错。(
vfdff(作者)
2009-02-18 09:42
4
以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。<br />
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。<br />
网卡具有如下的几种工作模式:<br />
1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。<br />
2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。<br />
3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。<br />
4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。<br />
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。<br />
这四种工作模式 由RCR (Receive Configuration Register :reg0c in page0)设置
vfdff(作者)
2009-02-18 16:09
5
(1) RTL8019中的DMA传输可以配置成 8 或者 16位传输模式,以 DCR [0EH]控制,eg:DCR=0xc8时按8位字节传输,DCR=0xc9时按16位字传输
游客请输入验证码
浏览1943158次