我正在尝试使用环回(用于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寄存器中的NPQ位(38h)。
之后,我们通过偏移37h完成NIC重置。
然后我们启用了BMCR寄存器中的环回位。
在中断屏蔽寄存器(3Ch)中启用Tx OK和Tx描述符不可用中断。
将Tx描述符地址放入MAC寄存器TNPDS(20h)。
然后最后启用命令寄存器中的TE位(37h)。
同样,我确实需要在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& amp; Rx描述符配置,pl共享。 *