1

我正在尝试使用环回(对于 Windows 7 平台)从 Realtek 8168E 发送和接收(写入 tx 缓冲区并从 rx 缓冲区读取)读取 rx 缓冲区给出 0。在检查中断状态寄存器时,TDU 和 RDU 位设置为 1( Tx/Rx 描述符不可用)

网络适​​配器:Realtek 8168E

参考数据表:Realtek 8168B

发送端配置 - 根据数据表(第 55 页)中给出的规范为 TX 描述符分配内存。将描述符对齐到 256 字节对齐。

  • 还分配了一个单独的缓冲区(TXBuffer)来存储要传输的数据。

  • 将 TXBuffer 的地址放入 TX 描述符中的指定字段。

  • 启用 TX 配置寄存器 (40h) 中的 MAC 环回位。

  • 然后我们启用了 TxPoll 寄存器 (38h) 中的 NPQ 位。

  • 之后,我们通过偏移量 37h 完成了 NIC 重置。

  • 然后我们启用了 BMCR 寄存器中的环回位。

  • 在中断屏蔽寄存器 (3Ch) 中启用 Tx OK 和 Tx Descriptor Unavailable 中断。

  • 将 Tx 描述符地址放入 MAC 寄存器 TNPDS (20h)。

  • 然后最后启用命令寄存器(37h)中的 TE 位。

同样,我在 Rx 端做了必要的配置。

下面是我给的缓冲区

    //TX Buffer desriptor
typedef struct _TMP_TBD_STRUC {
    ULONG       ulFrameLength;
    ULONG            VLAN_TAG;
       ULONG         TX_Buffer_Add_Low;
       ULONG         TX_Buffer_Add_High;
} TBD_TMP_STRUC, *PTBD_TMP_STRUC;

//RX Buffer desriptor
typedef struct _RMP_RBD_STRUC {
    ULONG       ulBufferSize;
    ULONG            VLAN_TAG;
       ULONG         RX_Buffer_Add_Low;
       ULONG         RX_Buffer_Add_High;
} RBD_RMP_STRUC, *PRBD_RMP_STRUC;

* PL。建议如何调试这种情况。Tx & Rx 描述符配置的正确顺序,请共享。*

4

0 回答 0