dm9000a翻译
1。1一般说明
DM9000A是完全一体化的、强大的、具有成本效益带有一般处理器界面的快速以太网控制器, 一个EEPROM界面,它的设计功率低,单电压和高性能支持3。3V工作电压,能承受5V电压的I/O。此外,DM9000A支持8/16位处理器接口处理器内存以应用不同的处理器。 它集成有10、100Mbps的AUTO-MDIX和IP/TCP/UDP协仪校验和的收发器。
这份文件的目的是供嵌入式设计工程师使用的,为DM9000ALAN芯片能够快速成功的应用任何处理的体系结构,提供了许多有关嵌入式系统准确的信息和参考。软件编程很简单,可让使用者容易的对任何系统进行软件驱动通讯。
。1DM9000A内部方框图 1
本章旨在帮助设计工程师DM9000A连接器微型处理器或微控制器,详细讨论将包括引脚功能
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
控制信号和个人使用的DM9000A连接器及相关的微型处理器/微控制器 。
SD0~SD7 (18~10) EECK (20) EEPROM SD8~SD15 (31~22) 93C46/ LC46 CMD (32) X2 (43)
INT (34)
IOR# (35) EEDIO (19)
IOW# (36)
CS# (37)
DM9000A
PWRST# (40) AUOT-MDIX
X1 (44) TXO+ (7) Transformer RJ-45TXO- (8)
RXI+ (3)
X2 (43) RXI- (4)
2。1 与处理器界面的信号连接 2。1。1引脚功能表
处理器DM9000A 引脚号 I/O 描述
总线信信号
号
nRD IOR# 35 I 处理器读指令,默认值为低电平; 极性可通
EEPROM 设定改变 nWR IOW# 36 I 处理器写指令,默认值为低电平;极性可通
EEPROM 设定改变 nCS / CS# 37 I 芯片选择,低电平用于选择DM9000A; 极性nAEN 可通EEPROM 设定改变 SD0 ~ 7 SD0 ~ 7 18,17,16、I/O 数据总线 0 ~ 7
14,13,12
,11,10
SD8 ~ SD8 ~ 15 I/O 数据总线8 ~ 15 ( 16位模式) 15
CMD CMD 32 I 指令类型:低时,索引口访问;高时,数据
口访问
INT INT 34 O 中断申请,默认值为高;极性可通EEPROM
设定改变
表2。1处理器界面引脚功能表
2。1。2 8/16位元模式
DM9000A内存中有两种数据总线宽度设置方式,8位或16位, 这两种方式选择如下表:
EECS (引脚21) 数据宽度
0 16位
1 8位
如,"1"是指接入10K的欧姆高电阻,"0"指悬空。
数据宽度运行方式的情况可以通过中断服务程序的Bit[7]检查。 中断服务程序 (REG。 FEH) I/O 模式 (数据宽度)
Bit [7] 运行
0 16-位 模式
1 8-位 模式
2。1。3指令类型
在DM9000A,只有两个寄存器,并命名索引口和数据口,可直接存取。 这两个口是由指令周期的CMD引脚来区别的。 当CMD是低指令周期,索引口被存取; 否则,数据口被存取。
在DM9000A中所有这些控制和状态寄存器由指数/数据口存取。 指令按顺序存取控制/状态寄存器:第一, 写寄存器的地址到索引口,然后通过数据口读/写那些寄存器的数据。 下图(图2。2)就是其中一例为DM9000A CMD 引脚与嵌入式系统相连的例子。
DM9000A索引口值= nCS 地址 + 0x0
DM9000A数据口值= nCS 地址 +0x4
SA2 CMD
nCS CS
DM9000A
图2。2cmd引脚和处理器界面
3 系统硬件设置
3。1 如何选择芯片
在指令周期中,cs引脚与I/O读或写引脚配合来存取DM9000A的内容。 这些引脚的默认值是低电平, 为适应各种应用型处理器它们的极性可通过EEPROM设定。
cs引脚和I/O读写引脚主动通过索引或数据口区读写数据值。 所以,系统中I/O读或写信号只能由DM9000A处理。
3。2 引脚设置
DM9000A 提供了一下绑定引脚:
引脚控制列表
引脚 名称 Strap Description
20 EECK INT 极性类型 0: INT 高 1: INT 低
21 EECS 数据总线宽度 0: 16位数据模式
1: 8位数据模式
25 GP6 INT 输出类型 只对8位模式有效
0: INT 被迫输出模式
1: INT 开启模式
3。3 串行 EEPROM 运行
DM9000A支持串行EEPROM的界面。
绑定引脚>默认设定。 3。3。1 EEPROM格式
名字 地址编程值(16进定义
(字) 制)
以太网结0~2 xx 6字节以太网结点地址 点地址 xx
xx
xx
xx
xx
自动加载3 5445 Bit [1:0] = 00: 买主 ID 和产品ID 失效,*01:
控制 接受
Bit [3:2] = 00:字6 Bit [8:0]。设定失效 *01:接
受
Bit [5:4]: Reserved = 0。
Bit [7:6] = 00:字7 Bit [3:0]无效;*01:字7 Bit
[3:0]有效
Bit [9:8]: Reserved = 0;
Bit [11:10] = 00:字7 Bit [7]无效;*01: 字 7
Bit [7]有效
Bit [13:12] = 00:字 7 Bit [8]无效;*01:字7 Bit
[8]有效
Bit [15:14] = 00:字 7 Bit [15:12]无效;*01:字7
Bit[15:12]有效
注意:标志“*”表示现在编程值
厂家 ID 4 0A46 2字节厂家 ID。
生产 ID 5 9000 2字节生产 ID。
引脚控制 6 01E7 字 3 Bit [3:2] = 01,可控制 CS, IOR,
IOW ,
INT, IOWAIT和 IO16个引脚的极性:
Bit [0] = 0: 处理器引脚CS 是高;*1: 是低。
Bit [1] = 0: 处理器引脚 IOR是高;*1: IOR
是低
Bit [2] = 0: 处理器引脚 IOW 是高;*1: IOW
是低
Bit [3] = *0: 处理器引脚INT是高;1: INT是低
Bit [4] = *0: 处理器引脚 INT 被迫输出
1: 处理器引脚INT 被迫开集
Bit [5] = 0: 处理器引脚r IOWAIT是高
*1: 处理器引脚 IOWAIT 是低
Bit [6] = 0: 处理器引脚 IOWAIT被迫输出。
*1: 处理器引脚 IOWAIT被迫开集
Bit [7] = 0: 处理器引脚IO16 是高;*1: IO16
是低
Bit [8] = 0: 处理器引脚IO16被迫输出;*1:
IO16 被迫开集
Bit [15:9]: Reserved = 0。
激活控制7 4180 设置字3 Bit [15:6] 来设置自动装载控制: 模式 Bit [0] = *0: 引脚WAKE为高 ;1: WAKE 为
低
Bit [1] = *0: WAKE 电平模式。。;1: WAKE
脉冲模式
Bit [2] = *0: Magic 数据包激活是无效的;1:
有效
Bit [3] = *0: Link_change wake-up event是无
效的。
1: Link_change wake-up event有效。
Bit [6:4]: Reserved = 0。
Bit [7] = 0: LED 模式0。
*1: LED 模式1。
Bit [8] = 0: 掉电后内部 PHY 是无效的;*1:
有效
GPR REG。 1FH Bit [0] 通过 Bit [8]。Bit
[13:9]: Reserved = 0。改变
Bit [14] = 0: AUTO-MDIX 关, *1:
AUTO-MDIX开。
Bit [15]: Reserved = 0。
表 3。2 EEPROM 8位模式格式 注意: EEPROM的数据只用于16位值得参考
"XX:XX:XX:XX:XX:XX, 5445, 0A46, 9000, 01E7, 4180"。
名称 地址 编程值 定义
以太网0~2 XX 6字节以太网结点地址 结点地XX
址 XX
XX
XX
XX
自动加3 5405
载控制 Bit [1:0] = 00:厂家ID和生产
ID编程实效;*01:接受
Bit [3:2] = 00: 字6 Bit [8:0]设
置无效;*01:字 6 Bit [8:0]有
效
Bit [5:4]: Reserved = 0。
Bit [7:6] = 00: 7 Bit [3:0] 设
置无效
*01: 字7 Bit [3:0]和字7 Bit
[13:12]
= 10 ,LED2只在16位模式中
用作 WAKE
Bit [9:8]: Reserved = 0。 Bit [11:10] = 00: 字7 Bit [7]
设置无效。
*01: 字7 Bit [7]有效
Bit [13:12] = 00: 字7 Bit [8]
设置无效。
*01:字7 Bit [8] 有效
Bit [15:14] = 00: 字7 Bit设置无效[15:12]。
*01:字7 Bit [15:12] 有效
厂家 ID 4 0A46 2字节厂家 ID。
生产 ID 5 9000 2字节生产 ID
引脚控6 01E7 字 3 Bit [3:2] = 01,可控制
制 CS, IOR, IOW ,
INT, IOWAIT和 IO16个引脚的极性:
Bit [0] = 0: 处理器引脚CS 是高;*1: 是低。
Bit [1] = 0: 处理器引脚 IOR是高;*1: IOR 是低
Bit [2] = 0: 处理器引脚 IOW 是高;*1: IOW是低
Bit [3] = *0: 处理器引脚INT是高;1: INT是低
Bit [4] = *0: 处理器引脚 INT 被迫输出
1: 处理器引脚INT 被迫开集 Bit [5] = 0: 处理器引脚r IOWAIT是高
*1: 处理器引脚 IOWAIT 是低
Bit [6] = 0: 处理器引脚 IOWAIT被迫输出。
*1: 处理器引脚 IOWAIT被迫开集
Bit [7] = 0: 处理器引脚IO16 是高;*1: IO16是低
Bit [8] = 0: 处理器引脚IO16被迫输出;*1: IO16 被迫开集 Bit [15:9]: Reserved = 0。
激活控7 4180
制模式 设置字3 Bit [15:6] 来设置自
动装载控制:
Bit [0] = *0: 引脚WAKE为
高 ;1: WAKE 为低
Bit [1] = *0: WAKE 电平模
式。。;1: WAKE脉冲模式
Bit [2] = *0: Magic 数据包激
活是无效的;1:有效
Bit [3] = *0: Link_change
wake-up event是无效的。
1: Link_change wake-up event
有效。
Bit [6:4]: Reserved = 0。
Bit [7] = 0: LED 模式0。
*1: LED 模式1。
Bit [8] = 0: 掉电后内部 PHY
是无效的;*1:有效
GPR REG。 1FH Bit [0] 通过
Bit [8]。Bit [13:9]: Reserved =
0。改变
Bit [14] = 0: AUTO-MDIX
关, *1: AUTO-MDIX开。
Bit [15]: Reserved = 0。
表 3。3 EEPROM 16为模式格式
注意: 16位模式
"XX:XX:XX:XX:XX:XX, 5405, 0A46, 9000, 01E7, C180" 当LED1引脚39用作"IO16"。
"XX:XX:XX:XX:XX:XX, 5405, 0A46, 9000, 01E7, 5180" 当LED2 引脚38用作"IOWAIT"。
, 0A46, 9000, 01E7, 6180" 当LED2引脚"XX:XX:XX:XX:XX:XX, 5445
38用作"WAKE"。
"XX:XX:XX:XX:XX:XX, 5405, 0A46, 9000, 01E7, D180" 当LED1引脚39用作"IO16"和
LED2引脚38用作"IOWAIT" pin used。
"XX:XX:XX:XX:XX:XX, 5445, 0A46, 9000, 01E7, E180" if LED1引脚39用作"IO16"和
LED2引脚38用作"WAKE" 。
3。4 GPIO 引脚设置
如果DM9000A操作是8位模式,有6个通用引脚,GP1~GP6,可用。 I/O类型是由GPCR REG 1EH控制。 并且它们的I/O数据可以由GPR REG 1FH。
GPCR的默认值Bit〔3:1〕全是"0" ,GP1~GP3为输入方式 。 但是, GPC Bit[6:4]都被迫设为"1",仅供GP6~GP4引脚作为输出模式。
GPCR (REG。 1EH) GPIO 界面控制:
位 名称 默认值 定义
7 保留 0, RO 保留
6:4 GPC64 111, RO Forced to "1"s only as the output ports
of GP6 ~ 4 引脚 25, 26, 27。 3:1 GPC31 000, RW GP3~1 引脚 28, 29, 31 置为 输
入/输出口:
"1": 输出;"0": 输入。 0 保留 1, RO 保留
Table 3。4 General Purpose Control Register (GPCR) Table GPR (REG。 1FH) GPIO interface control:
位 名称 默认值 定义
7 保留 0,RO 保留
6:4 GPO64 000,GP6~4引脚25,26,27被迫只做输出口。置“1”:
RW 输出高电平,设“0”:引脚输出低点平 3 GPIO3 0, RW 如果GP3 是输出口, GPR Bit [3] 置 "1"来使能引
脚28 输出高或清"0" 来使能引脚28 输出低
如果GP3 是输入口, GPR Bit [3] 的值是"1" 代表
接受到高信号 相反, GPR Bit [3] 是 "0" 就代表接
受到低信号
2 GPIO2 0, RW 如果GP2是输出口, GPR Bit [2]置 "1"来使能引脚
29 输出高或清"0" 来使能引脚29 输出低
如果GP2 是输入口, GPR Bit [2] 的值是"1" 代表
接受到高信号 相反, GPR Bit [2] 是 "0" 就代表接
受到低信号
1 0, RW 如果GP1是输出口, GPR Bit [1] 置 "1"来使能引脚
GPIO1 28 输出高或清"0" 来使能引脚28 输出低
如果GP1是输入口, GPR Bit [1] 的值是"1" 代表
接受到高信号 相反, GPR Bit [1] 是 "0" 就代表接
受到低信号
0 PHYPD 1, RW "1":内部PHY掉电
"0":内部PHY通电
表 3。5 GPR寄存器
3。5 参考设计示意图
3。5。1 8位或16位参考设计使用
Figure 3。1 Schematic for 8-Bit Processor。
Figure 3。2 Schematic for 16-Bit Processor。 4 复位与物理层断电模式
硬件或软件复位都可以令DM9000A复位。 硬件复位可以由通电复位引脚
PWRST# 40来完成。
软件复位可由网络控制寄存器来设定。RST Bit〔0〕=1。
DM9000A的内部物理层可以通过对PHYPD置“1”来断电,或通过断电位Bit[11]来设定,或设定功率下在掉电状态,功耗减至最低21MW以下/3。3V工作。
4。1 通电复位
能起作用的低信号用来设DM9000A芯片。引脚PWRST# 40显示低至少20ms。所有物理地址和物理层寄存器将被设为默认值并且硬件的绑定引脚将被封锁。当这个引脚再起作用时经过5us,DM9000A就准备好,然后将数据从有关的EEPROM下载。
4。2 软件复位
软件复位可由设定网络控制器的RST Bit[0]=1来设定。复位后,将改写他们有的登录值。而我们只有10us的时间令DM9000A软件复位。 4。3 物理层掉电模式
在掉电(节电)方式,将失去所有DM9000A的TX&RX功能。 而那几乎相同与物理睡眠模式下所有电路动能,除振荡器和时钟发生电路。 4。3。1 GPR PHYPD
在物理寄存器中,phypd比特用于内部供电、 它的默认值是高电平"1"。 如果内部物理层被启用,系统驱动 需要清通电位通过写“0”到GPR REG。1FH中的 PHYPD。
4。3。2 PHY Register 设置
在物理寄存器中, Bit[11]掉电基本模式控制寄存器能设为"1"来使能物理掉电模式。
5 如何编辑 DM9000A
5.1 如何读写 DM9000A 寄存器
通过主界面现在只有两个进出口。 一个口是索引口,另一个口是数据口。 索引口通过引脚CMD=0来编码。 数据口通过引脚CMD=1来编码。索引口的内容是寄存器通过数据口的地址。在存取任何寄存器8位数据之前或8/16位的RX/TXF IFO SRAM的数据之前,寄存器的地址要写进索引口。
下面是读写DM9000A寄存器的例子
( CMD引脚与处理器 SA2的联接)
UINT16 IOaddr; /* UINT32 IOaddr=0x19000000; for example defined in ARM-base
HPI BANK3*/
void iow ( UINT16 reg, UINT8 dataB )
{
outb(reg,IOaddr); /* I/O output a byte to INDEX port,select the register*/
UINT8 ior ( UINT16 reg )
outb (reg, IOaddr); /* I/O output a byte to INDEX port,select the register*/
return inb(IOaddr + 4); /*I/O input a byte from DATA port,READ the register data*/
}
5.2 驱动安装步骤
1 内部物理层通电
I/O(0x1f,0x00); 来设置GPR(REG.1fh)Bit[0]: phypd=0
物理层断电即为默认值。通电程序通过对使能对I/O写0到 PHY(GP0=0)。 2 做一个软件复位来初始化DM9000A (见章节4.2):
1. iow(0x00,0x01); 置NCR(REG.00)RST Bit[0]=1,设周期为10us。 2. iow(0x00,0x00); 清NCR(REG.00)RST Bit[0]=0,或让它自动清除。 3.编辑NCR寄存器。 通过设置NCR(REG。00)LBK Bit[2:1]=00b来选择正常模式。系统编辑器可以选择网络的运行,如物理地址/物理层环回模式强迫外部物理层全/半双工模式,或被迫冲突,并且激活事件使能。 请参考6.1章有寄存器的数据表设置。
4.设IMR寄存器(REG.FFH)Bit[7]=1让索引自动返回功能使能。 这是记忆读/写RX/TX FIFO地址索引
5.读3字的EEPROM数据,为个体以太网节点地址(如有必要)。 6.写6字节以太网节点地址到物理地址寄存器(REG.10H~15H)。 7.写哈希表8字节地址到多点传送地址寄存器(REG.16H~1DH)。 8.通过读写NSR REG. 01和 ISR REG. FEH寄存器清TX & INTR的状态。 TX1END, Bit [3] TX2END位和 Bit [5] WAKEST读后能被自动清除或写“1” 清除。请参章6.2及6.33 NSR & ISR设置的数据表
9.处理网卡中断或检测服务程序。
10.编辑IMR寄存器(REG. FFH) Bit [0]/ Bit [1]让RX/ TX中断使能。 11.编辑RCR寄存器,使能RX。 RX的使能RXEN Bit [0] = 1 RX RCR REG. 05
6.6 RCR。
12.正在启动网卡和准备RX / TX完毕。
5.3 如何读写 EEPROM 数据
DM9000A支持串行EEPROM界面,并提供一个非常容易的方法存取。 它
只需通过读写EEPROM&PHY控制/地址/数据寄存器(REG. 0BH~REG .0EH),
该寄存器是用来读写EEPROM的地址和数据的。
93c46是64字(1024位)的EEPROM并且字地址映射到到EEPROM 例如 芯片
&PHY地址寄存器的 EROA Bit[5:0] EPAR REG. 0CH。除此之外,EPAR
PHY_ADR Bit [7:6] 必须设成 "00"b
为EEPROM来使能字地址。 并且EPAR中PHY_ADR Bit [7:6] = 01 的设定是
为了物理地址的的选择。请参照表6.12~6.14来设置EEPROM&PHY寄存器。
5.3.1 如何读 EEPROM数据
以下步骤,从数据显示读串行EEPROM(SROM)的数据:
第一步:写字地址 到EPAR REG.0CH。
第二步:写指令=0x04到EEPROM&PHY控制寄存器 开始SROM +READ的运
行:
1. EPCR (REG.0BH) EPOS Bit [3] = 0: 选择SROM 模式 (默认值: 0)。
2. EPCR (REG.0BH) ERPRR Bit [2] = 1: 发出读指令。
第三步:读EPCR REG. 0BH 且等待直到 ERRE Bit [0] = 0 ,或下面执行第四部。
第四步:等至少40 us , 然后写"0" EPCR REG. 0BH 清读指令。
第五步:读 SROM 从EEPHYH REG. 0EH读取数据高字节, 且在
EEPROM&PHY 数据寄存器中EE_PHY_L REG. 0DH中读取低字节。
如何读取 SROM 字 0x03, 自动下载控制l, 列出如下:
1. write word address 0x03 into EPAR REG. 0CH
iow ( 0x0C, 0x03 );
2. write the SROM + READ command = 0x04 into EPCR REG.0BH
iow ( 0x0B, 0x04 );
3. wait until EPCR REG. 0BH Bit [0] = 0 ok, or just following Step 4
do { udelay ( 10 ); i++; } while ( ( i < 500 ) && ( inb ( IOaddr + 4 ) & 1 ) );
4. delay 40 us at least, then write "0" into EPCR REG.0BH
udelay ( 40 );
iow ( 0x0B, 0 );
5. EEPHYH REG.0EH for the high-byte of the SROM data,and(UINT8)
e2prom[i*2+1] = ior ( 0x0E );EEPHYL REG. 0DH for the low-byte
(UINT8) e2prom[i*2] = ior( 0x0D );
For example, to read the MAC address from the SROM word address 0& 1& 2:
for ( i = 0; i < 3; i++ )
{ /* read Ethernet MAC address from SROM */
iow ( 0x0C, i );
iow ( 0x0B, 0x04 );
udelay ( 40 );
iow ( 0x0B, 0 );
/* read the SROM word data from EPDR to device address */
(UINT8) dev_addr[i*2+1] = ior ( 0x0E );/* the high byte of this 16-bit word */
(UINT8) dev_addr[i*2] = ior ( 0x0D ); /* the low byte of this 16-bit word */
}
5.3.2 如何读写 EEPROM 数据
下面是写数据到SROM:
1. 写字地址 到EPAR REG.0CH。
2. 写数据的高字节到 EEPHYH REG.0EH, 写低字节到 EEPHYL。
3. 写指令= 0x12 到 EPCR REG。 来启动SROM + WRITE 的操作:
i. EPCR REG. 0BH WEP Bit [4] = 1: 使能SROM WRITE的操作。
ii. EPCR REG. 0BH EPOS Bit [3] = 0: 选择 SROM 模式 (默认值: 0)。
iii. EPCR (REG. 0BH) ERPRW Bit [1] = 1: 发出写指令。
4。读 EPCR REG.0BH 且等到 ERRE Bit [0] = 0 , 或紧跟5。
5。等至少500 us, 然后, 写 "0" 到 EPCR REG. 0BH清写指令.
引脚控制, 列表如下: 如何写 0x1E7 SROM字 0x06,
1. write word address = 0x06 to EPAR REG. 0CH
iow ( 0x0C, 0x06 );
2. write the high-byte 0x01 into EE_PHY_H, and the low-byte 0xE7 into EE_PHY_L
iow ( 0x0E, 0x01 );
iow ( 0x0D, 0xE7 );
3. write the SROM + WRITE command = 0x12 into EPCR REG. 0BH
iow ( 0x0B, ( 0x02 | 0x10 ) );
4. wait until EPCR (REG. 0BH) ERRE Bit [0] = 0 ok, or just following Step 5
do { udelay ( 10 ); i++; } while ( ( i < 500 ) && ( inb ( IOaddr + 4 ) & 1 ) );
5. delay 500 us at least, then write "0" into EPCR REG. 0BH
udelay ( 60000 );
iow ( 0x0B, 0 );
例如 t把以太网地址 00:E0:63:0E:56:78 写进SROM字 0& 1& 2:
srom_write ( 0x00, 0xE000 ); /* Word 0: low-byte = 00, high-byte = E0 */ srom_write ( 0x01, 0x0E63 ); /* Word 1: low-byte = 63, high-byte = 0E */ srom_write ( 0x02, 0x7856 ); /* Word 2: low-byte = 56, high-byte = 78 */ void srom_write ( int offset, UINT16 dataW )
{
UINT16 i, tmpv;
/* write the SROM word address into EPAR REG. 0CH */ iow ( 0x0C, offset );
/* write the high-byte to EE_PHY_H REG. 0EH, low-byte to EEPHYL REG。
0DH */
iow ( 0x0D, dataW & 0xff ); /* the low-byte of this 16-bit word */ iow ( 0x0E, (dataW >> 8) & 0xff ); /* the high-byte of this 16-bit word */ /* issue the SROM + WRITE command = 0x12 into EPCR REG. 0BH */ iow ( 0x0B, 0x02 | 0x10 );
/* wait >500 us for SROM + WRITE completed then write "0" to clear command */
do { udelay (10); tmpv= inb (IOaddr+4); i++; } while ( (i < 500) && (tmpv & 1) );
udelay ( 60000 );
iow( 0x0B, 0 );
}
5.4 如何读写 PHY 寄存器
DM9000A物理层只支持32个寄存器, 它可以被映射到 EPAR (REG. 0CH) Bit
[4:0]。 EPAR (REG. 0CH) PHY_ADR Bit [7:6] 的默认值是"01" 来选择物理层的
模式。
5.4.1如何读 PHY 寄存器
以下步骤,从PHY寄存器读取数据:
1.读物理寄存器的偏移量(弥补)到 EPAR REG. 0CH Bit [4:0],并且读物理层的
地址
"01"b 到EPAR REG. 0CH Bit [7:6]。
2.写指令= 0x0C 到 EPCR REG. 0BH来启动物理层和读操作:
I.EPCR (REG. 0BH) EPOS Bit [3] = 1: 选择 PHY 模式 (0: 选择 SROM,
参见 ch.5.3)
ii. EPCR (REG. 0BH) ERPRR Bit [2] = 1: 发出读指令。
3.读 EPCR REG. 0BH 且等到 ERRE Bit [0] = 0,或紧跟 4步。
4.最多等 5 us , 然后写 "0x08" 到 EPCR REG. 0BH 来清读指令。
5.从EEPHYH REG. 0EH中读物理层数据高字节并从EEPROM&PHY 寄存器的
EEPHYL REG. 0DH 中读取低字节。。
例如,读地址偏移量= 0x00的BMCR的物理层寄存器。
1. write offset = 0 into EPAR REG. 0CH Bit [4:0], and "01"b into EPAR REG。
0CH Bit[7:6]
iow ( 0x0C, ( 0x00 | 0x40 ) );/* issue PHY address+ 40H (EPAR PHY_ADR = "01"b) */
2. write the PHY + READ command = 0x0C into EPCR REG. 0BH iow ( 0x0B, ( 0x04 | 0x08 ) );
3. wait until EPCR REG. 0B ERRE Bit [0] = 0 ok, or just following Step 4
do { udelay ( 1 ); i++; } while ( ( i < 50 ) && ( inb ( IOaddr + 4 ) & 1 ) ); 4. delay 5 us maximum, then write "0x8" into EPCR REG. 0BH to clear it and keep PHY
udelay ( 5 ); /* wait 1~5 us for the PHY+ READ command completion */ iow ( 0x0B, 0x08 ); /* clear this PHY "READ" command */
5. read the high byte from EE_PHY_H REG. 0EH, and the low byte from
EE_PHY_L
(UINT8) phy[offset*2+1] = ior ( 0x0E ); /* the high byte of this 16-bit word */
(UINT8) phy[offset*2] = ior ( 0x0D ); /* the low byte of this 16-bit word */
5.4.2如何写物理层寄存器
以下是读取物理寄存器数据的步骤:
1. 写物理寄存器偏移量到 EPAR REG. 0CH Bit [4:0], 并且写物理地址"01"b 到
EPAR REG. 0CH Bit [7:6]。
写低字节到 EEPHYL。 2.写物理地址高字节到EEPHYH REG. 0EH,
3. 写指令= 0x0A 到 EPCR REG. 0BH 来开启 PHY + READ 操作。:
i. EPCR (REG. 0BH) EPOS Bit [3] = 1: 选择 PHY 模式 (0: 选择 SROM, 参见ch.5.3)
ii. EPCR (REG. 0BH) ERPRR Bit [2] = 1: 发送读指令。
4. 读EPCR REG. 0BH 并且等到 ERRE Bit [0] = 0 , 接下5步。 5. 最多等 5 us, 然后写 "0x08" 到 EPCR REG. 0BH 清读指令。 5.5 如何传送数据包
在传送数据包之前,数据包的数据必须保存在TX FIFO SRAM, 且首先写 F8H
TX FIFO SRAM是内部 SRAM ,在(MWCMD REG. F8H 端口封锁)到索引口,
DM9000A的物理地址中,地址为0 ~ 0xBFF 。然后数据包的长度的高字节存入MDRAH REG. FDH 且低字节存入MDRAL REG. FCH 。最后一步是设TCR REG. 02中的TXREQ (传送请求), Bit [0], 以达到传送数据包的目的。 如果置IMR REG. FFH中的Bit [1] = 1,DM9000A 将会在ISR REG. FEH,中的PTS Bit [1] = 1时,产生一个中断且在NSR REG. 01中发出完成标志 TX1END Bit [2] =
1或 TX2END Bit[3] = 1来表明数据包发送完毕。
5.5.1 数据包传送
1. 检查存储器8/16 数据宽度
2. 写数据包的数据到TX FIFO SRAM
3. 向MDRAL REG. FCH 和MDRAH REG. FDH写传送长度。
4. 传送数据包
5.5.2 检查完成标志
如果驱动程序用作检测/中断,程序段可以插入到TX程序来检测数据包传送完成甚至检测中断。
IMR PTM Bit [1] = 1时,中断程序断如下
5.6 如何接收数据包
数据包的接收应保存于RX FIFO,它在DM9000A的物理地址中, 是内部SRAM的地址0x0c00~0x3fff(13K字大小)。 RX FIFO的SRAM中有4字节用来存放数据包头地址, 有两个寄存器MRCMDX REG. F0H 和 MRCMD REG。 F2H 来获得数据包来临的信息。
首字节是用来检查是否收到数据包或在SRAM中过滤数据包。 如果这个字节是"01",意思是接收到数据包。 如果这个字节是"00",意思是没有收到数据包。 阅读其它字节之前,确信物理地址的头字节是"01"或LSB Bit [0] = 1。 但是,如果Bit [1:0] 既不是 "01"b 也不是 "00"b, DM9000A物理地址/物理必须做一个软件复位以达到系统总线和DM9000A芯片之间稳态。 第二字节保存接收数据包
的"状况"信息。 状况格式"高字节"与RSR (REG. 06)是一样的。 请参ch.6.7的数
据表。 按照这种方式,可以验证或者接收到的数据包正确或错误。 第三和第四
字节存包的"长度"。其他字节用来接收数据包的数据或命名RX有效载荷。
5.6.1接收中断服务程序
当驱动程序被编辑成中断驱动或检测等待数据包接收准备时,下列程序段可以插
入到中断处理器:
u8 INT_status = ior ( 0xFE ); /* got DM9000A interrupt status in ISR */
.2 */ /* check if PRS Bit [0]=1, RX ok if ( INT_status & 0x01 ) { /* doing ch.5.6
*/
iow ( 0xFE, 0x01 ); } /* clear PRS latched in ISR Bit [0] (see ch.5.5.2) */ 5.6.2 数据包接收
mrcmdx(REG. F0H)的定义是没有地址增量存储器的数据存储器读命令。 mrcmdx
只是用来读接收数据包标志"01"或来自RXFIFO的SRAM的LSB Bit [0] = 1 和
Bit [7:5] & Bit [4:2] 表明 IP/TCP/UDP 寄存状况和类型。
5.6.3 检查数据包的状态及大小
MRCMD (REG. F2H):内存数据读指令加RX读索引偏移量。 该索引在读过内存
读指令MRCMD (REG .F2H)后将增加。RX索引的大小,增量取决于系统应用软
件,而I/O总线宽度是字节/字而相应增加一或两字节。 MRCMD (REG. F2H) 只
是用来读RX的状态,长度和来自RX的SRAM数据包的数据。
(u8) RX_ready = ior ( 0xF0 ); /* dummy READ the packet RX ready flag */ RX_ready = (u8) inb( IOaddr + 4 ); /* got the most updated data */ if ( (RX_ready & 0x01)==1 )
{ /* RX ready check: this byte must be "01" or "00" */
/* check the RX status & length (see ch.5.6.3) and income packets (see ch.5.6.4)
*/
}
else if ( (RX_ready & 0x2)!=0 ) { /* stop interface and wait to *reset device */
iow ( 0xFF, 0x80 ); /* stop INT request */
iow ( 0xFE, 0x0F ); /* clear ISR status */
iow ( 0x05, 0x00 ); /* stop RX function */
(u8) device_wait_reset = TRUE; /* raise the MAC/ PHY software-reset flag */
/* iow ( 0x00, 0x01 ); // it’s quick software-reset to replace above*
udelay ( 10 );
iow ( 0x00, NCR_set );
iow ( 0xFF, 0x80 );
iow ( 0x05, RCR_set | 1 );
/* then, re-new system variables and counters for dropped and queued packets.。。 */
}
5.6.4 接收数据包数据
读索引在读过内。读指令MRCMD REG .F2。后将增加。 根据收到的数据包的长度,送出RX的有效载荷和4字节循环冗余码校验。
6 其他
6.1 如何传送或接收大于2048字节的数据包
如果一个系统传送或接收大于2048字节的数据包,虽然大小超过802.3规格,TCR (REG. 02) Bit [6] TJDIS 和 RCR Bit [6] WTDIS 将被置为 "1"。 例如 , #define TCR 0x02
#define RCR 0x05
iow ( TCR , ior ( TCR ) | 0x40 ); iow ( RCR , ior ( RCR ) | 0x40 ); 6.2 DM9000A的性能
DM9000A的性能是靠微处理器/微控制器的容量,如果微处理器/魏控制器是如此之快,能够匹配最快时间,用于DM9000A IOR#/ IOW#,则其性能将为10ns + 10ns = 20ns -> 50Mbps 6.3接通兰线
该芯片还支持局域网功能及引脚22 WAKE(或引脚38、 如果设定EEPROM字7 Bit [13:12] = 10是16位模式)对嵌入式系统输出唤醒信号。 有三种方法产生WOL信号,本节将讨论如何执行DM9000A物理地址的WOL功能。 (1) 虚拟数据包
如果DM9000A收到一个数据包其中内容是" "FF:FF:FF:FF:FF:FF"+"16倍的节点地址" 那么唤醒引脚针将启动。 请注意,节点地址必须与PAR REG。 10H~REG。 15H中的物理地址相同。例 (2) 连接变化
如果连接内部的物理状态已发生改变,唤醒引脚将启动。 (3) 抽样帧
抽样帧由6个数据包组成并且每个数据包最大可为2048字节。当DM9000A只收到一套抽样帧时, 唤醒引脚就会被启动。 下面详细的描述了怎样设定抽样帧。 1. 首先关闭 DM9000A 接收器功能并使RCR REG. 05中的Bit [0] = "0"。 2. 停止自恢复功能。 令IMR REG. FFH中的Bit [7] ="0"。
3. 把 6个数据包保存于 DM9000A FIFO SRAM。当条件是 "00" 或 "01",不用在。字节;如果是 "10",检查字节匹配与否,如果是 "11",DM9000A MAC停止检查抽样帧。
"1" 重启抽样帧功能i.通过设定WCR REG. 0FH 中的Bit [4] SAMPLEEN为
并且通过设定NCR (REG. 00)中的 WAKEEN Bit [6]=1 来使能 WOL 功能。 ii.通过设定RCR REG. 05 中的Bit [0] 为"1",来重启DM9000A 的接收器功能。
6。4 IP/TCP/UDP 校验
该芯片支持IP/TCP/UDP
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
校验产生。当设定它的IP/TCP/UDP协议校验产生和检查时,让它使能嵌入式操作系统上层TCP/IP协议的IP/TCP/UDP校验和功能。
6。5 AUTO-MDIX 和作用电路
图 6。1 AUTO-MDIX 10Base-T/100Base-TX应用