如何读写网卡中的eeprom?

tomasmao 2005-04-10 03:21:54
我想利用网卡中的eeprom存储我的一点内容,如何实现?
...全文
471 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhjie374 2005-04-12
  • 打赏
  • 举报
回复
我那个就是WINDOWS的啊.8139的..
AthlonxpX86 2005-04-12
  • 打赏
  • 举报
回复
winio
tomasmao 2005-04-12
  • 打赏
  • 举报
回复
如果我在windows环境下实现呢?
AthlonxpX86 2005-04-11
  • 打赏
  • 举报
回复
看网卡芯片的说明书
我做过用8139网卡制作89c51编程器的东西,可以去驱动开发网找AthlonxpX86的网络硬盘,里面放着开发文档
zhjie374 2005-04-11
  • 打赏
  • 举报
回复
给你一段,希望对你有用
//written by jason zhang
//eed usts
//READ eepromコッハ

/* EEPROM_Ctrl bits. */
#define EE_CS 0x08 /* EEPROM chip select. */
#define EE_CLK 0x04 /* EEPROM shift clock. */
#define EE_DI 0x02 /* EEPROM chip data in. */
#define EE_DO 0x01 /* EEPROM chip data out. */
#define EE_ENB (0x80 | EE_CS)

#define EE_WRITE_CMD 5
#define EE_READ_CMD 6
#define EE_ERASE_CMD 7

typedef enum _OP_ENUM{
OP_WRITE = EE_WRITE_CMD,
OP_READ = EE_READ_CMD,
OP_ERASE = EE_ERASE_CMD,
}OP_ENUM;


#define EIGHT_BIT_MODE 0//カィメ・93C46 カチミエト」ハス

#if (EIGHT_BIT_MODE)
#define FLAG 0x0
#define VID 0x2
#define DID 0x4
#define NET_ADDR_ID 0xe
#else
#define FLAG 0x0
#define VID 0x1
#define DID 0x2
#define NET_ADDR_ID 0x7
#endif


USHORT
opEEPROM(
PUCHAR ioaddr,//93c46 port addr
ULONG locate, //サヨテ
OP_ENUM op, //
USHORT data//カチノセイルラアコヤ
)
{
int i, addrlen;
UCHAR TmpVal;
USHORT retval = 0;

switch(op){
case OP_WRITE:

#if (EIGHT_BIT_MODE) //8BIT MODE
locate = (op << 15) | (locate << 8) | ((UCHAR)data);
addrlen = 18;
#else //16BIT MODE
locate = (op << 22) | (locate << 16) | data;
addrlen = 25;
#endif

break;
case OP_READ:
case OP_ERASE:

#if (EIGHT_BIT_MODE) //8BIT MODE
locate = (op << 7) | locate;
addrlen = 10;
#else //16BIT MODE
locate = (op << 6) | locate;
addrlen = 9;
#endif

break;
default:
return 0;
}


NdisRawWritePortUchar(ioaddr, EE_ENB & ~EE_CS); //ス
NdisRawWritePortUchar(ioaddr, EE_ENB); //select chip

for(i = addrlen; i >= 0; i --){//エョミミミエネ・
TmpVal = (locate & (1 << i)) ? EE_DI : 0;
NdisRawWritePortUchar(ioaddr, EE_ENB | TmpVal);
NdisRawWritePortUchar(ioaddr, EE_ENB | TmpVal | EE_CLK); //raise clk
}

NdisRawWritePortUchar(ioaddr, EE_ENB); //low clk

//read result
for(i = 0; i < 16; i ++){
NdisRawWritePortUchar(ioaddr, EE_ENB | EE_CLK); //raise clk
NdisRawReadPortUchar(ioaddr, &TmpVal);
TmpVal &= EE_DO;
retval = (retval << 1) | TmpVal;
NdisRawWritePortUchar(ioaddr, EE_ENB); //low clk
}
NdisRawWritePortUchar(ioaddr, ~EE_CS);

DbgPrint("retval=%x\n", retval);
return retval;
}//finish


//カチヘィオリヨキ
USHORT addr[3];

for(i = 0; i < 3; i ++)
addr[i] = opEEPROM(
ioaddr,//93c46 port addr
NET_ADDR_ID + i, //サヨテ
OP_READ, //
0//カチノセイルラアコヤ
);

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧