发送描述符在存储器中的规划发送描述符存放在存储器的一个数组中。发送描述符数组的最低地址存放在TxDescriptor寄存器中,并且该地址必须与4字节地址边界对齐。数组中描述符的个数存放在TxDescriptorNumber寄存器中,该寄存器使用减1编码,如果数组有8个元素,则寄存器的值为7。还有一个与描述符平行的“状态数组”。对于描述符数组中的每个元素,“状态数组”中均有一个相关的状态区域。状态数组的基址存放在TxStatus寄存器中,并且该地址也必须是4字节地址边界对齐。在操作过程中(当发送通道使能时),不可以对TxDescriptor、TxStatus和TxDescriptorNumber寄存器进行修改。另有两个寄存器TxConsumeIndex和TxProduceIndex,用于定义下一个将被硬件和软件使用的描述符单元索引。这两个寄存器可充当计数器,从0开始计数并在计数值到达TxDescriptorNumber寄存器中的值时回到0。TxProduceIndex表示的是将被软件驱动程序填充的下一个描述符的索引。TxConsumeIndex表示的是将被硬件发送的下一个描述符的索引。当TxProduceIndex==TxConsumeIndex时,发送缓冲区为空。当TxProduceIndex==TxConsumeIndex-1时(考虑到它是一个封包设计),发送缓冲区满,软件驱动程序不能添加新的描述符,直到硬件发送了一个或多个帧来将描述符释放。

是不是觉得这些寄存器让人眼花缭乱?不妨试试了解更多相关工具来帮助您处理这些数据包。这个发送数据包工具或许能给您提供一些灵感。如果您对USB数据包描述符的生成感兴趣,点击这里了解USB数据包描述符生成工具

每个发送描述符在存储器中占据两个字(8个字节)。同样,每个状态区域在存储器中占据1个字(4个字节)。每个发送描述符均由一个指针和一个控制字组成,指针(发送描述符区域中的数据包PACKET)指向发送数据的数据缓冲区,控制字包含的是控制信息。数据包区域有一个零地址偏移量,控制区域有一个4字节地址偏移量。

对于TCP数据包的发送,不妨参考一下这个发送TCP数据包的工具。或者,看看UDP数据包发送是如何实现的吧!如果您在用DELPHI进行数据包发送,可能会发现这个DELPHI发送数据包资源很有帮助。

是否觉得网络上的资源太多无从下手?别担心,这些精选工具和指南会让您事半功倍!