我想利用网卡中的eeprom存储我的一点内容,如何实现?

解决方案 »

  1.   

    看网卡芯片的说明书
    我做过用8139网卡制作89c51编程器的东西,可以去驱动开发网找AthlonxpX86的网络硬盘,里面放着开发文档
      

  2.   

    给你一段,希望对你有用
    //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 7typedef 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); //&#65405;
    NdisRawWritePortUchar(ioaddr, EE_ENB); //select chip for(i = addrlen; i >= 0; i --){//&#65396;&#65390;&#65424;&#65424;&#65424;&#65396;&#65416;&#12539;
    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
    //&#65398;&#65409;&#65421;&#65384;&#65397;&#65432;&#65430;&#65399;
    USHORT addr[3];for(i = 0; i < 3; i ++)
    addr[i] = opEEPROM(
    ioaddr,//93c46 port addr
    NET_ADDR_ID + i, //&#65403;&#65430;&#65411;
    OP_READ, //
    0//&#65398;&#65409;&#65417;&#65406;&#65394;&#65433;&#65431;&#65393;&#65402;&#65428;
    );
      

  3.   

    如果我在windows环境下实现呢?
      

  4.   

    我那个就是WINDOWS的啊.8139的..