PCI网卡上扩展ROM编程 4.利用8139C网卡读写EPROM

利用8139C网卡读写EPROM

 最后编辑:2010-5-25(修改错别字)

 

一.        27C256引脚和模式

只读存储器随着技术的发展,主要经历了ROMPROMEPROMEEPROM等。EPROM的擦除只能借助于长时间暴露于紫外线,使用不太方便,常用于产品开发阶段。常用的EPROM大小有:128K位、256K位、512K位等等。由于我手上只有128K256K大小的EPROM,所以本文主要以256KEPROM来讲述的。

 

所谓256K位的EPROM,是指它有256*1024位(BIT),也就是32K字节的EPROM。它是一个28插脚的芯片。DIP封装的27C256的管脚图如下:

 

 

 

9 27C256

 

Q0~Q7:数据脚

A0~A14:地址线

VSS:接地端

VPP:编程电压+12V

VCC+5V电压

E:片选线

G:输出允许

 

 

下面是它的操作模式:

 

模式

E

G

A9

VPP

Q7~Q0

读出

VIL

VIL

任意

VCC

数据输出

禁止输出

VIL

VIH

任意

VCC

高阻

编程

VIL脉冲

VIH

任意

VPP

输入数据

校验

VIH

VIL

任意

VPP

输出数据

禁止编程

VIH

VIH

任意

VPP

高阻

维持

VIH

任意

任意

VCC

高阻

电子标志

VIL

VIL

VPP

VCC

标志

 

二.        8139C引脚和ROM插槽

我们在前言部分看到了8139C网卡的实物图,根据网卡的核心部件就是中间部分的8139C芯片(如图10)。

 

10 8139C

 

8139C共有128脚,这些引脚中与网卡上扩展ROM插槽连接的情况如下:

 

插槽(27C256)

网卡上28针插座与8139C的连接

插槽(27C256)

1(VPP)

69( MA15)

46(VDD)+3.3V

28(VCC)+5V

2(A12)

66(MA12)

68(MA14)

27(A14)

3(A7)

60(MA7)

67(MA13)

26(A13)

4(A6)

57(MA6)

61(MA8)

25(A8)

5(A5)

53(MA5)

63(MA9)

24(A9)

6(A4)

52(MA4)

65(MA11)

23(A11)

7(A3)

51(MA3)

接地

22(G)

8(A2)

49(MA2)

64(MA10)

21(A10)

9(A1)

48(MA1)

110(CS)

20(E)

10(A0)

47(MA0)

100(MD7)

19(D7)

11(Q0)

108(MD0)

101(MD6)

18(D6)

12(Q1)

107(MD1)

102(MD5)

17(D5)

13(Q2)

105(MD2)

103(MD4)

16(D4)

14(VSS)GND

接地

104(MD3)

15(D3)

 

8139C利用一个32位寄存器来读写和扩展ROM有关的引脚,该寄存器地址在存储器空间的偏移00D4H~00D7H。所以寄存器读写地址为存储器基地址加00D4H。寄存器格式如下:

/

定义

描述

31-24

R/W

Q7-Q0

反映数据线状态,当外部高阻时为输出,否则为输入

23-21

-

-

保留

20

W(只写)

CS

设置CS线,8139C110线

19

W

OE

设置OE线,8139C88线。很多8139C网卡并没有将其和插槽相连。

18

W

WR

设置WR线,8139C89线。很多8139C网卡并没有将其和插槽相连。

17

W

SWRWEn

准许软件访问flash memory:

0: 不准许通过软件访问flash memory

1: 准许通过软件访问flash memory并且在通过软件访问flash memory期间不准许访问EEPROM(我也不太懂什么意思,不过似乎没什么用,下面是原文)

 

16-0

W

A16-A0

设置地址线

 

好了,有了上面的资料,我们下面就开始来利用PCI网卡上的扩展ROM插槽来读写EPROM吧。

 

三.        27C256的读操作

GE脚都为低电平,而VCCVPP脚都接5V电压时,27C256便进入到读操作模式下。由于网卡插槽上G总是低电平(接地),所以只需要E进入低电平即可。图1127C256的读时序图:

 

11 27C256读时序图

 

从读时序图中我们可以看到:在地址A0~A14有效tAVQV时间后、在E低电平tELQV时间后、在G低电平tGLQV时间后,输出脚Q0~Q7开始输出有效数据。

 

根据这个时序关系,我们写出写出了自己的读27C256程序(见附件R256.asm),这些读ROM并不是通过PCI的地址映射,而是直接通过ROM寄存器直接读写。需要注意的是:在我机器上扩展ROM的基地址为0EC00H,所以ROM的寄存器地址为0ECD4H,而读者在编译该程序之前,需要更新上自己机器上ROM寄存器的地址,千万不要忘了

 

四.        27C256的写/编程操作

写操作的时序图如图12

 

 

12 27C256/编程时序图

 

27C256的写操作最特别的一点是要在引脚1VPP)上加上+12V的编程电压。而插槽中该引脚是对应在8139C的第69引线的,该引线是不会产生+12V电压的。所以我们必须手工给VPP加上+12V电压了。

 

我们知道,电脑的电压输出线中,黄色线输出电压就是12V,而红线为+5V。两条黑线为接地(如图13)。

 

13 电源电压图

 

我们可以直接设计一个简单的连线,将电源上的+12V电压引向VPP引脚,于是我就设计了下面的电路(图14):

 

 

14 27C256写电路图

 

根据上图连好线之后,再根据写时序图,便可以进行写了(源代码见附件W256.ASM)。有一点要注意:当一块EPROM经过紫外线擦除后,其内部所有的位都为“1”。写的过程只能是将需要改变的位从“1”变成“0”;而若想将“0”变成“1”,只能通过紫外线来擦除来实现。

 

五.        27128 EPROM的读写不同点

128KEPROM读写由于其地址线比256K的少一条线,所以有稍许不同。图1527128的插脚图。

 

15 27128引脚图

 

将此引脚图和27C256的比较会发现:27128P引脚在27C256上是A14引脚。而P脚专门来控制是否可以写(可编程):在读模式时,P脚是高电平;在写模式时,P脚是低电平。于是乎,8139CROM寄存器在读时需要第14位为1;在写时需要其为0。其实这也是我们第三章中用基址寄存器映射来访问ROM时,为什么说不能正确读128K EPROM的原因了。在读128K EPROM时,R256.ASM程序在偏移地址4000H后面的数据才是EPROM开始的数据呢利用8139C27128的源代码见附件R128.ASM,至于写27128的代码由读者自己完成吧。

 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值