基于DWC_ether_qos的以太网驱动开发-描述符格式介绍
一
.
描述符格式
1.1
前言
前面我们介绍了描述符链表的工作模式,重点是了解环形链表是如何环形的,以及相关的寄存器。驱动编写就需要更进一步,了解描述符的具体内容,即
4
个描述符的每个字段的含义。
描述符包含两个缓冲区指针和长度信息
,
以及一些其他的控制信息。
下面的读取格式指的是硬件读,软件写的格式,回写格式相反。
1.2
发送描述符
读取格式
这里的读取指的硬件去读取,即软件写硬件读。
TDES0
位
|
名字
|
描述
|
31:0
|
BUF1AP
|
缓冲区
1
地址指针或
TSO
头地址指针这些位表示缓冲区
1
的物理地址。当设置以下位时,这些位指示
TSO
标头地址指针:
■ TSE bit of TDES3
■ FD bit of TDES3
|
TDES1
位
|
名字
|
描述
|
31:0
|
BUF2AP
|
缓冲区
2
或缓冲区
1
地址指针
.
当使用描述符环结构时,该位指示缓冲区
2
的物理地址。缓冲区地址对齐没有限制。在
40
或
48
位寻址模式中,这些位表示缓冲区
1
地址指针的最高有效
8
或
16
位
.
|
TDES2
位
|
名字
|
描述
|
31
|
IOC
|
本描述符处理完产生中断
|
30
|
TTSE/TMWD
|
传输时间戳启用或外部
TSO
内存写入禁用
,
如果
TSE
位未
置位
,则此位启用描述符引用的传输数据包的
IEEE1588
时间戳
如果
TSE
位被
置位
并且外部
TSO
存储器被启用,则设置该位将禁用该数据包的外部
TSO
内存写入
。
|
29:16
|
B2L
|
缓冲区
2
长度
,
驱动程序设置此字段。设置后,此字段指示缓冲区
2
的长度。
|
15:14
|
VTIR
|
VLAN
标记插入或替换这些位请求
MAC
在传输数据包之前执行
VLAN
标记或取消标记。当为数据包启用
VLAN
标签插入、替换或删除时,应用程序必须适当设置
CRC
填充控制位。以下列表描述了这些位的值:
■ 2'b00:
不要添加
VLAN
标记。
■ 2'b01:
在传输之前从数据包中删除
VLAN
标签。此选项应仅用于
VLAN
数据包。
■ 2'b10
:插入一个
VLAN
标签,标签值编程在
MAC_VLAN_Incl
寄存器或上下文描述符中。
■ 2'b11
:用
MAC_VLAN_Incl
寄存器或上下文描述符中编程的标签值替换数据包中的
VLAN
标签。此选项应仅用于
VLAN
数据包。
当在配置核心时选择启用
SA
和
VLAN
插入
Tx
选项时,这些位有效
|
13:0
|
HL
或
B1L
|
标头长度或缓冲区
1
长度对于标头长度,只取位
[9:0]
。大小
13:0
仅适用于解释缓冲区
1
长度时。
如果通过
TDES3
的
TSE
位启用
TCP
分段卸载功能,则此字段等于标头长度。当
TSE
位在
TDES3
中设置时,报头长度包括从以太网源地址到
TCP
报头结束的长度(以字节为单位)。
TSO
功能支持的最大标头长度为
1023
字节。
TSO
功能支持的最大标头长度为
1023
字节。
如果未启用
TCP
分段卸载功能,则此字段等于缓冲区
1
长度。
|
TDES3
位
|
名字
|
描述
|
31
|
OWN
|
软件准备完描述符后,置位该位,表示
DMA
拥有该描述符,
DMA
处理完该描述符后清零该位,此时软件拥有该描述符。
注意该位软件要在描述符准备完后最后置位。该位实际是硬件和软件的读写互斥量,硬件和软件都是
R-M-W
的操作次序。
|
30
|
CTXT
|
设置为
1
表示
Context
类型的描述符,正常设置为
0.
|
29
|
FD
|
设置为
1
表示本描述符对应的缓冲区数据是
MAC
帧的第一段。
|
28
|
LD
|
设置为
1
表示本描述符对应的缓冲区数据是
MAC
帧的最后段。此时
B1L
或
B2L
不能为
0.
|
27:26
|
CPC
|
CRC
和填充控制
该字段控制
Tx
数据包的
CRC
和
填充
插入。仅当设置了第一个描述符位(
TDES3[29]
)
FD
时,此字段才有效。以下列表描述了位
[27:26]
的值:
■ 2’b00:CRC
和填充插入
,
MAC
在长度大于或等于
60
字节的传输数据包的末尾附加循环冗余校验(
CRC
)。
MAC
自动将填充和
CRC
附加到长度小于
60
字节的数据包中。
■ 2'b01:CRC
插入(禁用填充插入)
MAC
在传输数据包的末尾附加
CRC
,但不附加填充。应用程序应确保从传输缓冲区传输的数据包中存在填充字节,也就是说,从传输缓冲区时传输的数据包包长大于或等于
60
字节。
■ 2’b10
:禁用
CRC
插入
MAC
不会在传输数据包的末尾附加
CRC
。应用程序应确保填充和
CRC
字节存在于从传输缓冲区传输的数据包中。
■ 2'b11:CRC
替换
MAC
用重新计算的
CRC
字节替换传输数据包的最后四个字节。应用程序应确保填充和
CRC
字节存在于从传输缓冲区传输的数据包中。
此字段仅对第一个描述符有效。注意:设置
TSE
位时,
MAC
会忽略此字段,因为
CRC
和
填充
插入总是用于分段。
|
25:23
|
SAIC
|
SA
源
MAC
地址插入控制
这些位请求
MAC
将以太网数据包中的源地址字段添加或替换为
MAC
地址
0
寄存器中给定的值。当为数据包启用
SA
插入控制时,应用程序必须适当设置
CRC
填充控制位。位
25
指定用于插入或替换源地址的
MAC
地址寄存器(
1
或
0
)值。以下列表描述了位
[24:23]
的值:
■ 2'b0
0
:不包括源地址
■ 2'b01
:
包括或插入源地址。为了实现可靠的传输,应用程序必须提供没有源地址的帧。
■ 2'b10
:替换源地址。为了实现可靠的传输,应用程序必须为帧提供源地址。
■ 2'b
11
:保留
当在配置核心时选择
Enable SA and VLAN Insertion on Tx
(启用
SA
和
VLAN
插入
Tx
)选项并且设置了
First Segment control bit
(
TDES3[29]
)时,这些位在
EQOS-DMA
、
EQOS-AXI
和
EQOS-AHB
配置中有效。此字段仅对第一个描述符有效。
|
22:19
|
SOLTNUM
或
THL
|
SOLTNUM:
AV
模式下的插槽号控制位
这些位指示应从
TDES0
或
TDES1
寻址的相应缓冲器中取出数据的时隙间隔
当提取传输描述符时,
DMA
将该字段中的时隙号值与
RSN
字段
DMA_CH#_slot_Function_Control_Status
中保持的时隙间隔进行比较。只有当值匹配时,它才会从缓冲区中获取数据。这些位仅对
AV
频道有效
THL:TCP
标头长度如果设置了
TSE
位,则此字段包含
TCP
标头的长度。此字段的最小值必须为
5
。此字段仅对第一个描述符有效。
|
18
|
TSE
|
TCP
分段启用
当该位被设置时,
DMA
对数据包执行
TCP
分段。仅当
FD
位被设置时,此位才有效
|
17:16
|
CIC/TPL
|
校验和插入控制或
TCP
有效负载长度这些位控制校验和计算和插入。以下列表描述了位编码:
■2'b00:
校验和插入已禁用。
■ 2'b01:
仅启用
IP
标头校验和计算和插入。
■ 2'b10
:启用
IP
标头校验和和有效负载校验和计算和插入,但硬件中不计算伪标头校验和。
■ 2'b11:IP
报头校验和和有效载荷校验和计算和插入启用,伪报头校验和在硬件中计算。
当选择
Enable Transmit TCP/IP Checksum Offload
(启用传输
TCP/IP
校验和卸载)选项并重置
TSE
位时,此字段有效。设置
TSE
位时,此字段包含
TCP
有效负载长度的高位
[17:16]
。这允许
TCP
数据包长度字段跨越
TDES3[17:0]
,以提供
256KB
的数据包长度支持。此字段仅对第一个描述符有效。
|
15
|
TPL
|
保留或
TCP
有效负载长度当
TSE
位被重置时,该位被保留。设置
TSE
位时,这是
TCP
有效载荷长度
[17:0]
的第
15
位
只有在配置核心时选择了
Enable TCP Segmentation Offloading for TCP/IP Packets
(为
TCP/IP
数据包启用
TCP
分段卸载)选项时,此字段才有效。
|
14:0
|
FL/TPL
|
数据包长度或
TCP
有效负载长度此字段等于要传输的数据包的长度(以字节为单位)。当
TSE
位未设置时,此字段等于要发送的数据包的总长度:
Ethernet Header Length + TCP /IP Header Length – Preamble Length –
SFD Length + Ethernet Payload Length
当
TSE
位被设置时,该字段等于
TCP
有效载荷长度的低
15
位。此长度不包括以太网标头或
TCP/IP
标头长度。
|
回写格式
这里的回写指的硬件回写,即软件读硬件写。
注意
:
回写格式仅适用于相应数据包的最后一个描述符。
即
LD
位(
TDES3[28]
)
置位的
描述符中,
DMA
在描述符中回写相应传输数据包的状态和时间戳信息
TDES0
位
|
名字
|
描述
|
31:0
|
TTSL
|
传输数据包时间戳低
DMA
使用为相应传输数据包捕获的时间戳的最低有效
32
位来更新此字段。只有在数据包的第一个描述符中设置了
TDES2
的
TTSE
位时,
DMA
才会写入时间戳。仅当描述符中的
Last Segment
位(
LS
)已设置并且
timestamp status
(
TTSS
)位已设置时,此字段才具有时间戳。
|
TDES1
位
|
名字
|
描述
|
31:0
|
TTSH
|
传输数据包时间戳高
DMA
使用为相应接收数据包捕获的时间戳的最高有效
32
位来更新此字段。只有当
TDES2
的
TTSE
位设置在数据包的第一个描述符中时,
DMA
才写入时间戳。仅当描述符中的
Last Segment
位(
LS
)已设置并且
timestamp status
(
TTSS
)位已设置时,此字段才具有时间戳。
|
TDES2
保留
TDES3
位
|
名字
|
描述
|
31
|
OWN
|
见读取格式
|
30
|
CTXT
|
|
29
|
FD
|
|
28
|
LD
|
|
27
:
16
|
保留
|
|
17
|
TTSS
|
Tx
时间戳状态此状态位指示已捕获对应传输数据包的时间戳。当设置该位时,
TDES2
和
TDES3
具有为传输数据包捕获的时间戳值。仅当描述符中的最后一段控制位(
TDES3[28]
)设置时,此字段才有效。此位仅在启用
IEEE1588
时间戳功能时有效;否则,它将被保留。
|
16
|
保留
|
|
15
|
ES
|
错误摘要
,
此位表示以下位的逻辑或:
■ TDES3[0]: IP Header Error
■ TDES3[14]: Jabber Timeout
■ TDES3[13]: Packet Flush
■ TDES3[12]: Payload Checksum Error
■ TDES3[11]: Loss of Carrier
■ TDES3[10]: No Carrier
■ TDES3[9]: Late Collision
■ TDES3[8]: Excessive Collision
■ TDES3[3]: Excessive Deferral
■ TDES3[2]: Underflow Error
|
14
|
JT
|
Jabber
超时此位表示
MAC
发送器已经历
Jabber
暂停。仅当未设置
MAC_Configuration
寄存器的
JD
位时,才设置该位。
|
13
|
FF
|
数据包刷新此位表示
DMA
或
MTL
由于
CPU
给出的软件刷新命令而刷新了数据包。
|
12
|
PCE
|
有效负载校验和错误此位表示校验和卸载引擎出现故障,并且没有将任何校验和插入封装的
TCP
、
UDP
或
ICMP
有效负载中。此故障可能是由于字节不足,如
IP
标头的有效负载长度字段所示,或者
MTL
在存储和转发模式下开始将数据包转发到
MAC
发送器,但尚未计算校验和。第二种错误情况仅在传输
FIFO
深度小于正在传输的以太网数据包的长度时发生,以避免死锁,
MTL
在
FIFO
满时开始转发数据包,即使在存储和转发模式下也是如此。当未启用完全校验和卸载引擎时,保留此位
|
11
|
LOC
|
载波丢失该比特表示在分组传输期间发生载波丢失(即,在分组传输过程中,
gmii_crs_i
信号在一个或多个传输时钟周期内不活动)。这仅对在没有冲突的情况下发送的分组有效,并且当
MAC
在半双工模式下操作时有效。
|
10
|
NC
|
无载波该位表示在传输期间没有断言来自
PHY
的载波感测信号
|
9
|
LC
|
延迟冲突该位表示由于在冲突窗口之后发生冲突而中止了分组传输(在
MII
模式中包括
Preamble
的
64
字节时间和在
GMII
模式中包括
Preamble
和
Carrier Extension
的
512
字节时间)。如果设置了
“
欠流错误
”
,则此位无效
|
8
|
EC
|
过度冲突此位表示在尝试传输当前数据包时,在连续发生
16
次冲突后,传输被中止。如果在
MAC_Configuration
寄存器中设置了
DR
位,则在第一次冲突之后设置该位,并且中止数据包的传输
|
7:4
|
CC
|
冲突计数此
4
位计数器值表示在传输数据包之前发生的冲突数。设置
EC
位时,计数无效。
|
3
|
ED
|
过度延迟此位表示如果在
MAC_Configuration
寄存器中设置了
DC
位,则由于超过
24288
位时间的过度延迟(在
1000Mbps
模式或
Jumbo Packet enabled
模式下为
155680
位时间),传输结束。
|
2
|
UF
|
欠流错误此位表示
MAC
中止了数据包,因为数据从系统内存延迟到达。下溢错误可能是由于以下任一情况而发生的:
■ DMA
在传输数据包时遇到空的传输缓冲区
■
应用程序填充
MTL Tx FIFO
的速度慢于
MAC
传输速率。传输过程进入暂停状态,并设置与
MTL_Interrupt_Status
寄存器中的队列相对应的下溢位。
|
1
|
DB
|
延迟位此位表示
MAC
由于载波的存在而在发送之前延迟。此位仅在半双工模式下有效。
|
0
|
IHE
|
IP
标头错误设置
IP
标头错误时,此位表示校验和卸载引擎检测到
IP
标头错误。此位仅在启用
Tx
校验和卸载时有效。否则,它将被保留。如果
COE
检测到
IP
标头错误,如果以太网类型字段指示
IPv4
有效负载,它仍然插入
IPv4
标头校验和。
|
传输上下文描述符
见手册
21.5.2
1.3
接收描述符
读取格式
在接收描述符(读取格式)中,如果缓冲区地址字段全部为
0
,则
DWC_ether_qos
不会将数据传输到该缓冲区,并跳到下一个缓冲区或下一个描述符。
RDES0
位
|
名字
|
描述
|
31:0
|
BUF1AP
|
标题或缓冲器
1
地址指针
.
当通道的控制寄存器的
SPH
位被复位时,这些位指示缓冲器
1
的物理地址。当
SPH
位被设置时,这些位指示报头缓冲器的物理地址,
Rx DMA
在该物理地址写入接收到的分组的
L2/L3/L4
报头字节。应用程序可以为该缓冲器编程一个字节对齐的地址,这意味着该字段的
LS
位可以是非零的。然而,在传输数据包的开始时,
DMA
执行
RDES0[1:0]
(或者在
64-/128
位配置的情况下,
RDES0[2:0]/[3:0]
)为零的写入操作。然而,分组数据按照缓冲区地址指针给出的实际偏移量进行移位。如果地址指针指向存储数据包中间或最后部分的缓冲区,
DMA
将忽略偏移地址并写入数据宽度所指示的完整位置
|
RDES1
位
|
名字
|
描述
|
31:0
|
BUF1AP
|
64
位地址模式的
BUF1AP
的高
32
位,
32
位不使用
|
RDES2
位
|
名字
|
描述
|
31:0
|
BUF2AP
|
缓冲器
2
地址指针这些位表示缓冲器
2
的物理地址。当设置
DMA_CH#_Control
寄存器的
SPH
位时,缓冲区地址指针必须与总线宽度对齐,即
RDES2[3:0
、
2:0
或
1:0]=0
,对应于
128
、
64
或
32
总线宽度。
LSB
在内部被忽略。当
DMA_CH#_Control
寄存器的
SPH
位复位时,
RDES2
值没有限制。然而,
RxDMA
仅在传输数据包的起始字节时使用指针地址的
LS
位。如果
BUF2AP
给出了存储数据包中间或最后部分的缓冲器的地址,
DMA
将忽略
BUF2AP[3:0
或
2:0
或
1:0]
(对应于
128
或
64
或
32
位数据总线)并写入完整位置。
|
RDES3
位
|
名字
|
描述
|
31:0
|
OWN
|
同
TX
描述符
|
30
|
IOC
|
同
TX
描述符
|
29:26
|
保留
|
|
25
|
BUF2V
|
缓冲区
2
地址有效当设置此位时,它向
DMA
指示
RDES2
中指定的缓冲区
2
的地址有效。应用程序必须设置此位,以便
DMA
可以使用
RDES2
中的缓冲区
2
地址所指向的地址来写入接收到的数据包数据。
|
24
|
BUF1V
|
缓冲区
1
地址有效设置后,向
DMA
指示
RDES1
中指定的缓冲区
1
的地址有效。如果
DMA
可以使用
RDES1
中缓冲区
1
地址所指向的地址来写入接收到的数据包数据,则应用程序必须设置此值
。
|
23:0
|
保留
|
|
回写格式
RDES0
位
|
名字
|
描述
|
31:16
|
IVT
|
内部
VLAN
标记如果设置了
RDES3
的
RS0V
位,则此字段包含接收到的数据包的内部
VLAN
标记。仅当启用了双
VLAN
标记处理和
VLAN
标记剥离时,此选项才有效。
|
15:0
|
OVT
|
外部
VLAN
标记如果设置了
RDES3
的
RS0V
位,则此字段包含接收到的数据包的外部
VLAN
标记
|
RDES1
仅对最后一个描述符有效(设置了
RDES3[28]
)
位
|
名字
|
描述
|
31:16
|
OPC
|
OAM Sub-Type Code
:
RDES3
的比特
[18:16]
被设置为
3’b111
时
;
MAC Control Packet opcode
:
RDES3
的比特
[18:16]
被设置为
3’b110
时
|
15
|
TD
|
丢弃的时间戳
。
此位表示捕获了此数据包的时间戳,但由于溢出,它在
MTL Rx FIFO
中被丢弃。只有选择时间戳功能时,此位才可用。否则,保留此位
|
14
|
TSA
|
可用时间戳当存在时间戳时,此位指示时间戳值在上下文描述符字
2
(
RDES2
)和字
1
(
RDES1
)中可用。只有当设置了最后一个描述符位(
RDES3[28]
)时,这才有效。上下文描述符被写入下一个描述符中,刚好在数据包的最后一个正常描述符之后。
|
13
|
PV
|
PTP
版本该比特指示所接收的
PTP
消息具有
IEEE 1588
版本
2
格式。当该位被重置时,它指示
IEEE 1588
版本
1
格式。只有当您选择时间戳功能时,此位才可用。否则,该位被保留。
|
12
|
PFT
|
PTP
数据包类型此位表示
PTP
消息直接通过以太网发送。只有当您选择时间戳功能时,此位才可用。否则,该位被保留。
|
11:8
|
PMT
|
PTP Message Type
只有选择时间戳功能时,这些位才可用。
■ 0000: No PTP message received
■ 0001: SYNC (all clock types)
■ 0010: Follow_Up (all clock types)
■ 0011: Delay_Req (all clock types)
■ 0100: Delay_Resp (all clock types)
■ 0101: Pdelay_Req (in peer-to-peer transparent clock)
■ 0110: Pdelay_Resp (in peer-to-peer transparent clock)
■ 0111: Pdelay_Resp_Follow_Up (in peer-to-peer transparent clock)
■ 1000: Announce
■ 1001: Management
■ 1010: Signaling
■ 1011–1110: Reserved
■ 1111: PTP packet with Reserved message type
|
7
|
IPCE
|
IP Payload Error
(
IP
有效负载错误)当设置此位时,它指示以下情况之一:
■ MAC
计算的
16
位
IP
有效载荷校验和(即
TCP
、
UDP
或
ICMP
校验和)与接收段中相应的校验和字段不匹配。
■ TCP
、
UDP
或
ICMP
段长度与
IP
标头字段中的有效负载长度值不匹配。
■ TCP
、
UDP
或
ICMP
段长度小于
TCP
、
UDP
和
ICMP
允许的最小段长度。当
RDES3
的位
15
(
ES
)被设置时,该位未被设置
|
6
|
IPCB
|
IP
校验和旁路此位表示校验和卸载引擎被旁路。当您选择启用接收
TCP/IP
校验和检查功能时,此位可用
|
5
|
IPV6
|
IPv6
标头存在此位表示检测到
IPv6
标头。当选择
Enable Split Header Feature
(启用拆分标头功能)选项并设置通道控制寄存器的
SPH
位时,
IPV6
标头在
RDES0
所指向的标头缓冲区中可用。
|
4
|
IPV4
|
IPV4
标头存在此位表示检测到
IPV4
标头。当
RDES3
的
SPH
位被设置时,
IPV4
报头在
RDES0
所指向的报头缓冲区中可用。
|
3
|
IPHE
|
IP
标头错误当设置此位时,表示以下情况之一:
■ MAC
计算的
16
位
IPv4
标头校验和与接收到的校验和字节不匹配。
■ IP
数据报版本与以太网类型值不一致。
■
以太网数据包没有预期的
IP
标头字节数。当位
5
或位
4
被设置时,该位是有效的。当您选择启用接收
TCP/IP
校验和检查功能时,此位可用。
|
2:0
|
PT
|
有效载荷类型这些比特指示由接收校验和卸载引擎(
COE
)处理的
IP
数据报中封装的有效载荷的类型:
■ 3'b0000:
未知类型或未处理
IP/AV
有效负载
■ 2001
年
3
月:
UDP■ 2010
年
3
月:
TCP■ 2011
年
3
月:
ICMP■ 3'b110
:
AV
标记数据包
■ 3'b111:
带
AV
标签的控制包
■ 3'b101:AV
未标记控制数据包
■ 3'b100:IGMP
如果
IPV4
标头存在位被设置为
else DCB
(
LLDP
)控制包如果
COE
由于存在
IP
标头错误或碎片
IP
而不处理
IP
数据报的有效载荷,则将这些位设置为
3'b000
。
|
RDES2
位
|
名字
|
描述
|
31:29
|
L3L4FM
|
匹配的第
3
层和第
4
层滤波器数量这些比特指示与接收到的分组匹配的第三层和第四层滤波器的数量:只有当位
28
或位
27
被设置为高时,该字段才有效。当多个滤波器匹配时,这些位给出最低滤波器的数目
|
28
|
L4FM
|
第
4
层过滤器匹配
当设置此位时,它表示接收到的数据包与启用的第
4
层端口号字段之一匹配。只有当下列条件之一成立时,才会给出此状态
第
3
层字段未启用,所有启用的第
4
层字段匹配
,
所有启用的第
3
层和第
4
层筛选器字段匹配
当不止一个过滤器匹配时,该位给出由位
[31:29]
指示的过滤器的第
4
层过滤器状态
|
27
|
L3FM
|
第
3
层筛选器匹配设置此位时,表示接收到的数据包与启用的第
3
层
IP
地址字段之一匹配。只有当下列条件之一成立时,才会给出此状态:
■
所有启用的第
3
层字段匹配,所有启用的
“
第
4
层
”
字段被绕过
■
所有启用的过滤器字段匹配当多个过滤器匹配时,该位给出由位
[31:29]
指示的过滤器的第
3
层过滤器状态。
|
26:19
|
MADRM
|
MAC
地址匹配或哈希值当
HF
位重置时,此字段包含与接收到的数据包的目标地址匹配的
MAC
地址寄存器号。仅当
DAF
位被重置时,此字段才有效。设置
HF
位时,此字段包含
MAC
计算的哈希值。当与哈希值相对应的比特被设置在哈希过滤器寄存器中时,数据包通过哈希过滤器。
|
18
|
HF
|
哈希过滤器状态设置此位时,表示数据包通过了
MAC
地址哈希过滤器。比特
[26:19]
表示散列值。
|
17
|
DAF
|
当设置此位时,目标地址过滤器失败,这表明数据包在
Mac
上的
DA
过滤器失败。
|
16
|
SAF
|
SA
地址筛选器失败设置此位时,表示数据包未通过
MAC
中的
SA
筛选器。
|
15
|
OTS
|
VLAN
筛选器状态设置时,此位指示接收数据包的
VLAN
标记通过
VLAN
筛选器。此位仅在未启用
DWC-EQOS-ERVFE
时有效。如果启用了
DWC-EQOS-ERVFE
,则该位将重新定义为外部
VLAN
标记筛选器状态(
OTS
)。有关详细信息,请参阅第
235
页的
“
过滤器状态
”
。此位对单个和双
VLAN
标记帧都有效。
|
14
|
ITS
|
内部
VLAN
标记筛选器状态(
ITS
)此位仅在启用
DWC_EQOS_ERVFE
时有效。有关更多详细信息,请参阅第
235
页的
“
过滤器状态
”
。当启用双
VLAN
处理时,此位仅对双
VLAN
标记帧有效。
|
13:11
|
保留
|
|
10
|
ARPNR
|
未生成
ARP
应答当设置此位时,表示
MAC
没有为接收到的
ARP
请求数据包生成
ARP
应答。当
MAC
忙于发送对早期
ARP
请求的
ARP
回复时(一次只处理一个
ARP
请求),设置此位。当未选择
Enable IPv4 ARP Offload
(启用
IPv4 ARP
卸载)选项时,保留此位。
|
9:0
|
HL
|
L3/L4
报头长度该字段包含由
MAC
在
L3
或
L4
报头边界处分割的分组的报头的长度,如
MAC
接收器所识别的。仅当第一描述符位被设置(
FD
=
1
)时,该字段才有效。
头数据被写入相应描述符的缓冲器
1
地址。如果标头长度为零,则此字段无效。这意味着
MAC
没有识别和分割报头。选择
“
启用拆分标头功能
”
选项时,此字段有效。
|
RDES3
位
|
名字
|
描述
|
31
|
OWN
|
|
30
|
CTXT
|
|
29
|
FD
|
|
28
|
LD
|
|
27
|
RS2V
|
接收状态
RDES2
有效设置此位时,表示
RDES2
中的状态有效,并且由
DMA
写入。仅当
RDES3
的
LD
位被设置时,该位才有效。
|
26
|
RS1V
|
接收状态
RDES1
有效设置此位时,表示
RDES1
中的状态有效,并且由
DMA
写入。仅当
RDES3
的
LD
位被设置时,该位才有效。
|
25
|
RS0V
|
接收状态
RDES0
有效设置此位时,表示
RDES0
中的状态有效,并且由
DMA
写入。仅当
RDES3
的
LD
位被设置时,该位才有效。
|
24
|
CE
|
CRC
错误设置此位时,表示在接收到的数据包上发生了循环冗余校验(
CRC
)错误。仅当
RDES3
的
LD
位设置时,此字段才有效
|
23
|
GP
|
巨型数据包设置此位时,表示数据包长度超过指定的最大以太网大小
1518
、
1522
或
2000
字节(如果设置了巨型数据包启用,则为
9018
或
9022
字节)。注:巨型数据包仅表示数据包的长度。它不会导致任何数据包截断
|
22
|
RWT
|
接收看门狗超时设置此位时,表示接收看门狗计时器在接收当前数据包时已过期。看门狗超时后,当前数据包被截断。
|
21
|
OE
|
溢出错误设置此位时,表示接收到的数据包由于
Rx FIFO
中的缓冲区溢出而损坏。注意:此位仅在
DMA
将部分数据包传输到应用程序时设置。只有当
Rx FIFO
在阈值模式下操作时才会发生这种情况。在存储转发模式中,所有部分数据包都会完全丢弃在
Rx FIFO
中
|
20
|
RE
|
接收错误当设置此位时,它指示在分组接收期间断言
gmii_rxer_i
信号,而断言
gmii_rxdv_i
信号。该错误还包括
GMII
和半双工模式中的载波扩展错误。错误可以是较少扩展名或没有扩展名,也可以是扩展期间的错误(
rxd
!
=0f
)
|
19
|
DE
|
漂移位错误设置此位时,表示接收到的数据包具有非整数倍的字节(奇数半字节)。此位仅在
MII
模式下有效。
|
18:16
|
LT
|
长度
/
类型字段此字段指示接收到的数据包是长度数据包还是类型数据包。这
3
个比特的编码如下:
■ 3'b000: The packet is a length packet
■ 3'b001: The packet is a type packet.
■ 3'b011: The packet is a ARP Request packet type
■ 3'b100: The packet is a type packet with VLAN Tag
■ 3'b101: The packet is a type packet with Double VLAN Tag
■ 3'b110: The packet is a MAC Control packet type
■ 3'b111: The packet is a OAM packet type
■ 3'b010: Reserved
|
15
|
ES
|
错误摘要设置此位时,表示以下位的逻辑或:
仅当
RDES3
的
LD
位被设置时,此字段才有效。
■ RDES3[24]: CRC Error
■ RDES3[19]: Dribble Error
■ RDES3[20]: Receive Error
■ RDES3[22]: Watchdog Timeout
■ RDES3[21]: Overflow Error
■ RDES3[23]: Giant Packet
|
14:0
|
PL
|
数据包长度这些比特指示被传送到系统存储器(包括
CRC
)的接收数据包的字节长度。当
RDES3
的
LD
位被设置和
/
或溢出错误位被重置时,此字段有效。当启用
IP
校验和计算并且接收到的分组不是
MAC
控制分组时,分组长度还包括附加到以太网分组的两个字节。当设置
RDES3
的
LD
位时,此字段有效。当未设置
Last Descriptor
和
Error Summary
位时,此字段指示当前数据包已传输的累计字节数。
|
接收
上下文描述符
见手册
21.6.3
只有
DMA
能写,提供最后一个包的扩展状态信息,
RDES3
的
b30 CTXT
标记该类型
1
.
4
Split Header Support
模式
DMA
可以分别处理接收到的包的报头和有效载荷。支持
MAC
帧,
IP
包,
TCP/UDP
包三个级别的包类型。
见手册
21.3
1.5
总结
以上信息来源手册的简单整理,以备查询,实际调试过程中以对照手册为准。
一些关键的字段可以帮助调试等需要了解,重点了解
OWN
位的互斥作用,即硬件和软件的
R-M-W
操作。