本文轉(zhuǎn)自公眾號歡迎關(guān)注
https://mp.weixin.qq.com/s/SU4xDurm-y-PFIE-3y_-hw
一.描述符格式
1.1 前言
前面我們介紹了描述符鏈表的工作模式,重點(diǎn)是了解環(huán)形鏈表是如何環(huán)形的,以及相關(guān)的寄存器。驅(qū)動編寫就需要更進(jìn)一步,了解描述符的具體內(nèi)容,即4個(gè)描述符的每個(gè)字段的含義。
描述符包含兩個(gè)緩沖區(qū)指針和長度信息,以及一些其他的控制信息。
下面的讀取格式指的是硬件讀,軟件寫的格式,回寫格式相反。
1.2發(fā)送描述符
讀取格式
這里的讀取指的硬件去讀取,即軟件寫硬件讀。
TDES0
位 | 名字 | 描述 |
---|---|---|
31:0 | BUF1AP | 緩沖區(qū)1地址指針或TSO頭地址指針這些位表示緩沖區(qū)1的物理地址。當(dāng)設(shè)置以下位時(shí),這些位指示TSO標(biāo)頭地址指針:■ TSE bit of TDES3■ FD bit of TDES3 |
TDES1
位 | 名字 | 描述 |
---|---|---|
31:0 | BUF2AP | 緩沖區(qū)2或緩沖區(qū)1地址指針.當(dāng)使用描述符環(huán)結(jié)構(gòu)時(shí),該位指示緩沖區(qū)2的物理地址。緩沖區(qū)地址對齊沒有限制。在40或48位尋址模式中,這些位表示緩沖區(qū)1地址指針的最高有效8或16位. |
TDES2
位 | 名字 | 描述 |
---|---|---|
31 | IOC | 本描述符處理完產(chǎn)生中斷 |
30 | TTSE/TMWD | 傳輸時(shí)間戳啟用或外部TSO內(nèi)存寫入禁用,如果TSE位未置位,則此位啟用描述符引用的傳輸數(shù)據(jù)包的IEEE1588時(shí)間戳如果TSE位被置位并且外部TSO存儲器被啟用,則設(shè)置該位將禁用該數(shù)據(jù)包的外部TSO內(nèi)存寫入。 |
29:16 | B2L | 緩沖區(qū)2長度,驅(qū)動程序設(shè)置此字段。設(shè)置后,此字段指示緩沖區(qū)2的長度。 |
15:14 | VTIR | VLAN標(biāo)記插入或替換這些位請求MAC在傳輸數(shù)據(jù)包之前執(zhí)行VLAN標(biāo)記或取消標(biāo)記。當(dāng)為數(shù)據(jù)包啟用VLAN標(biāo)簽插入、替換或刪除時(shí),應(yīng)用程序必須適當(dāng)設(shè)置CRC填充控制位。以下列表描述了這些位的值:■ 2'b00:不要添加VLAN標(biāo)記。■ 2'b01:在傳輸之前從數(shù)據(jù)包中刪除VLAN標(biāo)簽。此選項(xiàng)應(yīng)僅用于VLAN數(shù)據(jù)包。■ 2'b10:插入一個(gè)VLAN標(biāo)簽,標(biāo)簽值編程在MAC_VLAN_Incl寄存器或上下文描述符中。■ 2'b11:用MAC_VLAN_Incl寄存器或上下文描述符中編程的標(biāo)簽值替換數(shù)據(jù)包中的VLAN標(biāo)簽。此選項(xiàng)應(yīng)僅用于VLAN數(shù)據(jù)包。當(dāng)在配置核心時(shí)選擇啟用SA和VLAN插入Tx選項(xiàng)時(shí),這些位有效 |
13:0 | HL或B1L | 標(biāo)頭長度或緩沖區(qū)1長度對于標(biāo)頭長度,只取位[9:0]。大小13:0僅適用于解釋緩沖區(qū)1長度時(shí)。如果通過TDES3的TSE位啟用TCP分段卸載功能,則此字段等于標(biāo)頭長度。當(dāng)TSE位在TDES3中設(shè)置時(shí),報(bào)頭長度包括從以太網(wǎng)源地址到TCP報(bào)頭結(jié)束的長度(以字節(jié)為單位)。TSO功能支持的最大標(biāo)頭長度為1023字節(jié)。TSO功能支持的最大標(biāo)頭長度為1023字節(jié)。如果未啟用TCP分段卸載功能,則此字段等于緩沖區(qū)1長度。 |
TDES3
位 | 名字 | 描述 |
---|---|---|
31 | OWN | 軟件準(zhǔn)備完描述符后,置位該位,表示DMA擁有該描述符,DMA處理完該描述符后清零該位,此時(shí)軟件擁有該描述符。注意該位軟件要在描述符準(zhǔn)備完后最后置位。該位實(shí)際是硬件和軟件的讀寫互斥量,硬件和軟件都是R-M-W的操作次序。 |
30 | CTXT | 設(shè)置為1表示Context類型的描述符,正常設(shè)置為0. |
29 | FD | 設(shè)置為1表示本描述符對應(yīng)的緩沖區(qū)數(shù)據(jù)是MAC幀的第一段。 |
28 | LD | 設(shè)置為1表示本描述符對應(yīng)的緩沖區(qū)數(shù)據(jù)是MAC幀的最后段。此時(shí)B1L或B2L不能為0. |
27:26 | CPC | CRC和填充控制該字段控制Tx數(shù)據(jù)包的CRC和填充插入。僅當(dāng)設(shè)置了第一個(gè)描述符位(TDES3[29])FD時(shí),此字段才有效。以下列表描述了位[27:26]的值:■ 2’b00:CRC和填充插入,MAC在長度大于或等于60字節(jié)的傳輸數(shù)據(jù)包的末尾附加循環(huán)冗余校驗(yàn)(CRC)。MAC自動將填充和CRC附加到長度小于60字節(jié)的數(shù)據(jù)包中。■ 2'b01:CRC插入(禁用填充插入)MAC在傳輸數(shù)據(jù)包的末尾附加CRC,但不附加填充。應(yīng)用程序應(yīng)確保從傳輸緩沖區(qū)傳輸?shù)臄?shù)據(jù)包中存在填充字節(jié),也就是說,從傳輸緩沖區(qū)時(shí)傳輸?shù)臄?shù)據(jù)包包長大于或等于60字節(jié)。■ 2’b10:禁用CRC插入MAC不會在傳輸數(shù)據(jù)包的末尾附加CRC。應(yīng)用程序應(yīng)確保填充和CRC字節(jié)存在于從傳輸緩沖區(qū)傳輸?shù)臄?shù)據(jù)包中。■ 2'b11:CRC替換MAC用重新計(jì)算的CRC字節(jié)替換傳輸數(shù)據(jù)包的最后四個(gè)字節(jié)。應(yīng)用程序應(yīng)確保填充和CRC字節(jié)存在于從傳輸緩沖區(qū)傳輸?shù)臄?shù)據(jù)包中。此字段僅對第一個(gè)描述符有效。注意:設(shè)置TSE位時(shí),MAC會忽略此字段,因?yàn)镃RC和填充插入總是用于分段。 |
25:23 | SAIC | SA源MAC地址插入控制這些位請求MAC將以太網(wǎng)數(shù)據(jù)包中的源地址字段添加或替換為MAC地址0寄存器中給定的值。當(dāng)為數(shù)據(jù)包啟用SA插入控制時(shí),應(yīng)用程序必須適當(dāng)設(shè)置CRC填充控制位。位25指定用于插入或替換源地址的MAC地址寄存器(1或0)值。以下列表描述了位[24:23]的值:■ 2'b00:不包括源地址■ 2'b01:包括或插入源地址。為了實(shí)現(xiàn)可靠的傳輸,應(yīng)用程序必須提供沒有源地址的幀。■ 2'b10:替換源地址。為了實(shí)現(xiàn)可靠的傳輸,應(yīng)用程序必須為幀提供源地址。■ 2'b11:保留當(dāng)在配置核心時(shí)選擇Enable SA and VLAN Insertion on Tx(啟用SA和VLAN插入Tx)選項(xiàng)并且設(shè)置了First Segment control bit(TDES3[29])時(shí),這些位在EQOS-DMA、EQOS-AXI和EQOS-AHB配置中有效。此字段僅對第一個(gè)描述符有效。 |
22:19 | SOLTNUM或THL | SOLTNUM:AV模式下的插槽號控制位這些位指示應(yīng)從TDES0或TDES1尋址的相應(yīng)緩沖器中取出數(shù)據(jù)的時(shí)隙間隔當(dāng)提取傳輸描述符時(shí),DMA將該字段中的時(shí)隙號值與RSN字段DMA_CH#_slot_Function_Control_Status中保持的時(shí)隙間隔進(jìn)行比較。只有當(dāng)值匹配時(shí),它才會從緩沖區(qū)中獲取數(shù)據(jù)。這些位僅對AV頻道有效THL:TCP標(biāo)頭長度如果設(shè)置了TSE位,則此字段包含TCP標(biāo)頭的長度。此字段的最小值必須為5。此字段僅對第一個(gè)描述符有效。 |
18 | TSE | TCP分段啟用當(dāng)該位被設(shè)置時(shí),DMA對數(shù)據(jù)包執(zhí)行TCP分段。僅當(dāng)FD位被設(shè)置時(shí),此位才有效 |
17:16 | CIC/TPL | 校驗(yàn)和插入控制或TCP有效負(fù)載長度這些位控制校驗(yàn)和計(jì)算和插入。以下列表描述了位編碼:■2'b00:校驗(yàn)和插入已禁用。■ 2'b01:僅啟用IP標(biāo)頭校驗(yàn)和計(jì)算和插入。■ 2'b10:啟用IP標(biāo)頭校驗(yàn)和和有效負(fù)載校驗(yàn)和計(jì)算和插入,但硬件中不計(jì)算偽標(biāo)頭校驗(yàn)和。■ 2'b11:IP報(bào)頭校驗(yàn)和和有效載荷校驗(yàn)和計(jì)算和插入啟用,偽報(bào)頭校驗(yàn)和在硬件中計(jì)算。當(dāng)選擇Enable Transmit TCP/IP Checksum Offload(啟用傳輸TCP/IP校驗(yàn)和卸載)選項(xiàng)并重置TSE位時(shí),此字段有效。設(shè)置TSE位時(shí),此字段包含TCP有效負(fù)載長度的高位[17:16]。這允許TCP數(shù)據(jù)包長度字段跨越TDES3[17:0],以提供256KB的數(shù)據(jù)包長度支持。此字段僅對第一個(gè)描述符有效。 |
15 | TPL | 保留或TCP有效負(fù)載長度當(dāng)TSE位被重置時(shí),該位被保留。設(shè)置TSE位時(shí),這是TCP有效載荷長度[17:0]的第15位只有在配置核心時(shí)選擇了Enable TCP Segmentation Offloading for TCP/IP Packets(為TCP/IP數(shù)據(jù)包啟用TCP分段卸載)選項(xiàng)時(shí),此字段才有效。 |
14:0 | FL/TPL | 數(shù)據(jù)包長度或TCP有效負(fù)載長度此字段等于要傳輸?shù)臄?shù)據(jù)包的長度(以字節(jié)為單位)。當(dāng)TSE位未設(shè)置時(shí),此字段等于要發(fā)送的數(shù)據(jù)包的總長度:Ethernet Header Length + TCP /IP Header Length – Preamble Length –SFD Length + Ethernet Payload Length當(dāng)TSE位被設(shè)置時(shí),該字段等于TCP有效載荷長度的低15位。此長度不包括以太網(wǎng)標(biāo)頭或TCP/IP標(biāo)頭長度。 |
回寫格式
這里的回寫指的硬件回寫,即軟件讀硬件寫。
注意:回寫格式僅適用于相應(yīng)數(shù)據(jù)包的最后一個(gè)描述符。即LD位(TDES3[28])置位的描述符中,DMA在描述符中回寫相應(yīng)傳輸數(shù)據(jù)包的狀態(tài)和時(shí)間戳信息
TDES0
位 | 名字 | 描述 |
---|---|---|
31:0 | TTSL | 傳輸數(shù)據(jù)包時(shí)間戳低DMA使用為相應(yīng)傳輸數(shù)據(jù)包捕獲的時(shí)間戳的最低有效32位來更新此字段。只有在數(shù)據(jù)包的第一個(gè)描述符中設(shè)置了TDES2的TTSE位時(shí),DMA才會寫入時(shí)間戳。僅當(dāng)描述符中的Last Segment位(LS)已設(shè)置并且timestamp status(TTSS)位已設(shè)置時(shí),此字段才具有時(shí)間戳。 |
TDES1
位 | 名字 | 描述 |
---|---|---|
31:0 | TTSH | 傳輸數(shù)據(jù)包時(shí)間戳高DMA使用為相應(yīng)接收數(shù)據(jù)包捕獲的時(shí)間戳的最高有效32位來更新此字段。只有當(dāng)TDES2的TTSE位設(shè)置在數(shù)據(jù)包的第一個(gè)描述符中時(shí),DMA才寫入時(shí)間戳。僅當(dāng)描述符中的Last Segment位(LS)已設(shè)置并且timestamp status(TTSS)位已設(shè)置時(shí),此字段才具有時(shí)間戳。 |
TDES2
保留
TDES3
位 | 名字 | 描述 |
---|---|---|
31 | OWN | 見讀取格式 |
30 | CTXT | |
29 | FD | |
28 | LD | |
27:16 | 保留 | |
17 | TTSS | Tx時(shí)間戳狀態(tài)此狀態(tài)位指示已捕獲對應(yīng)傳輸數(shù)據(jù)包的時(shí)間戳。當(dāng)設(shè)置該位時(shí),TDES2和TDES3具有為傳輸數(shù)據(jù)包捕獲的時(shí)間戳值。僅當(dāng)描述符中的最后一段控制位(TDES3[28])設(shè)置時(shí),此字段才有效。此位僅在啟用IEEE1588時(shí)間戳功能時(shí)有效;否則,它將被保留。 |
16 | 保留 | |
15 | ES | 錯(cuò)誤摘要,此位表示以下位的邏輯或:■ 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超時(shí)此位表示MAC發(fā)送器已經(jīng)歷Jabber暫停。僅當(dāng)未設(shè)置MAC_Configuration寄存器的JD位時(shí),才設(shè)置該位。 |
13 | FF | 數(shù)據(jù)包刷新此位表示DMA或MTL由于CPU給出的軟件刷新命令而刷新了數(shù)據(jù)包。 |
12 | PCE | 有效負(fù)載校驗(yàn)和錯(cuò)誤此位表示校驗(yàn)和卸載引擎出現(xiàn)故障,并且沒有將任何校驗(yàn)和插入封裝的TCP、UDP或ICMP有效負(fù)載中。此故障可能是由于字節(jié)不足,如IP標(biāo)頭的有效負(fù)載長度字段所示,或者M(jìn)TL在存儲和轉(zhuǎn)發(fā)模式下開始將數(shù)據(jù)包轉(zhuǎn)發(fā)到MAC發(fā)送器,但尚未計(jì)算校驗(yàn)和。第二種錯(cuò)誤情況僅在傳輸FIFO深度小于正在傳輸?shù)囊蕴W(wǎng)數(shù)據(jù)包的長度時(shí)發(fā)生,以避免死鎖,MTL在FIFO滿時(shí)開始轉(zhuǎn)發(fā)數(shù)據(jù)包,即使在存儲和轉(zhuǎn)發(fā)模式下也是如此。當(dāng)未啟用完全校驗(yàn)和卸載引擎時(shí),保留此位 |
11 | LOC | 載波丟失該比特表示在分組傳輸期間發(fā)生載波丟失(即,在分組傳輸過程中,gmii_crs_i信號在一個(gè)或多個(gè)傳輸時(shí)鐘周期內(nèi)不活動)。這僅對在沒有沖突的情況下發(fā)送的分組有效,并且當(dāng)MAC在半雙工模式下操作時(shí)有效。 |
10 | NC | 無載波該位表示在傳輸期間沒有斷言來自PHY的載波感測信號 |
9 | LC | 延遲沖突該位表示由于在沖突窗口之后發(fā)生沖突而中止了分組傳輸(在MII模式中包括Preamble的64字節(jié)時(shí)間和在GMII模式中包括Preamble和Carrier Extension的512字節(jié)時(shí)間)。如果設(shè)置了“欠流錯(cuò)誤”,則此位無效 |
8 | EC | 過度沖突此位表示在嘗試傳輸當(dāng)前數(shù)據(jù)包時(shí),在連續(xù)發(fā)生16次沖突后,傳輸被中止。如果在MAC_Configuration寄存器中設(shè)置了DR位,則在第一次沖突之后設(shè)置該位,并且中止數(shù)據(jù)包的傳輸 |
7:4 | CC | 沖突計(jì)數(shù)此4位計(jì)數(shù)器值表示在傳輸數(shù)據(jù)包之前發(fā)生的沖突數(shù)。設(shè)置EC位時(shí),計(jì)數(shù)無效。 |
3 | ED | 過度延遲此位表示如果在MAC_Configuration寄存器中設(shè)置了DC位,則由于超過24288位時(shí)間的過度延遲(在1000Mbps模式或Jumbo Packet enabled模式下為155680位時(shí)間),傳輸結(jié)束。 |
2 | UF | 欠流錯(cuò)誤此位表示MAC中止了數(shù)據(jù)包,因?yàn)閿?shù)據(jù)從系統(tǒng)內(nèi)存延遲到達(dá)。下溢錯(cuò)誤可能是由于以下任一情況而發(fā)生的:■ DMA在傳輸數(shù)據(jù)包時(shí)遇到空的傳輸緩沖區(qū)■ 應(yīng)用程序填充MTL Tx FIFO的速度慢于MAC傳輸速率。傳輸過程進(jìn)入暫停狀態(tài),并設(shè)置與MTL_Interrupt_Status寄存器中的隊(duì)列相對應(yīng)的下溢位。 |
1 | DB | 延遲位此位表示MAC由于載波的存在而在發(fā)送之前延遲。此位僅在半雙工模式下有效。 |
0 | IHE | IP標(biāo)頭錯(cuò)誤設(shè)置IP標(biāo)頭錯(cuò)誤時(shí),此位表示校驗(yàn)和卸載引擎檢測到IP標(biāo)頭錯(cuò)誤。此位僅在啟用Tx校驗(yàn)和卸載時(shí)有效。否則,它將被保留。如果COE檢測到IP標(biāo)頭錯(cuò)誤,如果以太網(wǎng)類型字段指示IPv4有效負(fù)載,它仍然插入IPv4標(biāo)頭校驗(yàn)和。 |
傳輸上下文描述符
見手冊21.5.2
1.3接收描述符
讀取格式
在接收描述符(讀取格式)中,如果緩沖區(qū)地址字段全部為0,則DWC_ether_qos不會將數(shù)據(jù)傳輸?shù)皆摼彌_區(qū),并跳到下一個(gè)緩沖區(qū)或下一個(gè)描述符。
RDES0
位 | 名字 | 描述 |
---|---|---|
31:0 | BUF1AP | 標(biāo)題或緩沖器1地址指針.當(dāng)通道的控制寄存器的SPH位被復(fù)位時(shí),這些位指示緩沖器1的物理地址。當(dāng)SPH位被設(shè)置時(shí),這些位指示報(bào)頭緩沖器的物理地址,Rx DMA在該物理地址寫入接收到的分組的L2/L3/L4報(bào)頭字節(jié)。應(yīng)用程序可以為該緩沖器編程一個(gè)字節(jié)對齊的地址,這意味著該字段的LS位可以是非零的。然而,在傳輸數(shù)據(jù)包的開始時(shí),DMA執(zhí)行RDES0[1:0](或者在64-/128位配置的情況下,RDES0[2:0]/[3:0])為零的寫入操作。然而,分組數(shù)據(jù)按照緩沖區(qū)地址指針給出的實(shí)際偏移量進(jìn)行移位。如果地址指針指向存儲數(shù)據(jù)包中間或最后部分的緩沖區(qū),DMA將忽略偏移地址并寫入數(shù)據(jù)寬度所指示的完整位置 |
RDES1
位 | 名字 | 描述 |
---|---|---|
31:0 | BUF1AP | 64位地址模式的BUF1AP的高32位,32位不使用 |
RDES2
位 | 名字 | 描述 |
---|---|---|
31:0 | BUF2AP | 緩沖器2地址指針這些位表示緩沖器2的物理地址。當(dāng)設(shè)置DMA_CH#_Control寄存器的SPH位時(shí),緩沖區(qū)地址指針必須與總線寬度對齊,即RDES2[3:0、2:0或1:0]=0,對應(yīng)于128、64或32總線寬度。LSB在內(nèi)部被忽略。當(dāng)DMA_CH#_Control寄存器的SPH位復(fù)位時(shí),RDES2值沒有限制。然而,RxDMA僅在傳輸數(shù)據(jù)包的起始字節(jié)時(shí)使用指針地址的LS位。如果BUF2AP給出了存儲數(shù)據(jù)包中間或最后部分的緩沖器的地址,DMA將忽略BUF2AP[3:0或2:0或1:0](對應(yīng)于128或64或32位數(shù)據(jù)總線)并寫入完整位置。 |
RDES3
位 | 名字 | 描述 |
---|---|---|
31:0 | OWN | 同TX描述符 |
30 | IOC | 同TX描述符 |
29:26 | 保留 | |
25 | BUF2V | 緩沖區(qū)2地址有效當(dāng)設(shè)置此位時(shí),它向DMA指示RDES2中指定的緩沖區(qū)2的地址有效。應(yīng)用程序必須設(shè)置此位,以便DMA可以使用RDES2中的緩沖區(qū)2地址所指向的地址來寫入接收到的數(shù)據(jù)包數(shù)據(jù)。 |
24 | BUF1V | 緩沖區(qū)1地址有效設(shè)置后,向DMA指示RDES1中指定的緩沖區(qū)1的地址有效。如果DMA可以使用RDES1中緩沖區(qū)1地址所指向的地址來寫入接收到的數(shù)據(jù)包數(shù)據(jù),則應(yīng)用程序必須設(shè)置此值。 |
23:0 | 保留 |
回寫格式
RDES0
位 | 名字 | 描述 |
---|---|---|
31:16 | IVT | 內(nèi)部VLAN標(biāo)記如果設(shè)置了RDES3的RS0V位,則此字段包含接收到的數(shù)據(jù)包的內(nèi)部VLAN標(biāo)記。僅當(dāng)啟用了雙VLAN標(biāo)記處理和VLAN標(biāo)記剝離時(shí),此選項(xiàng)才有效。 |
15:0 | OVT | 外部VLAN標(biāo)記如果設(shè)置了RDES3的RS0V位,則此字段包含接收到的數(shù)據(jù)包的外部VLAN標(biāo)記 |
RDES1
僅對最后一個(gè)描述符有效(設(shè)置了RDES3[28])
位 | 名字 | 描述 |
---|---|---|
31:16 | OPC | OAM Sub-Type Code:RDES3的比特[18:16]被設(shè)置為3’b111時(shí);MAC Control Packet opcode:RDES3的比特[18:16]被設(shè)置為3’b110時(shí) |
15 | TD | 丟棄的時(shí)間戳。此位表示捕獲了此數(shù)據(jù)包的時(shí)間戳,但由于溢出,它在MTL Rx FIFO中被丟棄。只有選擇時(shí)間戳功能時(shí),此位才可用。否則,保留此位 |
14 | TSA | 可用時(shí)間戳當(dāng)存在時(shí)間戳?xí)r,此位指示時(shí)間戳值在上下文描述符字2(RDES2)和字1(RDES1)中可用。只有當(dāng)設(shè)置了最后一個(gè)描述符位(RDES3[28])時(shí),這才有效。上下文描述符被寫入下一個(gè)描述符中,剛好在數(shù)據(jù)包的最后一個(gè)正常描述符之后。 |
13 | PV | PTP版本該比特指示所接收的PTP消息具有IEEE 1588版本2格式。當(dāng)該位被重置時(shí),它指示IEEE 1588版本1格式。只有當(dāng)您選擇時(shí)間戳功能時(shí),此位才可用。否則,該位被保留。 |
12 | PFT | PTP數(shù)據(jù)包類型此位表示PTP消息直接通過以太網(wǎng)發(fā)送。只有當(dāng)您選擇時(shí)間戳功能時(shí),此位才可用。否則,該位被保留。 |
11:8 | PMT | PTP Message Type只有選擇時(shí)間戳功能時(shí),這些位才可用。■ 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有效負(fù)載錯(cuò)誤)當(dāng)設(shè)置此位時(shí),它指示以下情況之一:■ MAC計(jì)算的16位IP有效載荷校驗(yàn)和(即TCP、UDP或ICMP校驗(yàn)和)與接收段中相應(yīng)的校驗(yàn)和字段不匹配。■ TCP、UDP或ICMP段長度與IP標(biāo)頭字段中的有效負(fù)載長度值不匹配。■ TCP、UDP或ICMP段長度小于TCP、UDP和ICMP允許的最小段長度。當(dāng)RDES3的位15(ES)被設(shè)置時(shí),該位未被設(shè)置 |
6 | IPCB | IP校驗(yàn)和旁路此位表示校驗(yàn)和卸載引擎被旁路。當(dāng)您選擇啟用接收TCP/IP校驗(yàn)和檢查功能時(shí),此位可用 |
5 | IPV6 | IPv6標(biāo)頭存在此位表示檢測到IPv6標(biāo)頭。當(dāng)選擇Enable Split Header Feature(啟用拆分標(biāo)頭功能)選項(xiàng)并設(shè)置通道控制寄存器的SPH位時(shí),IPV6標(biāo)頭在RDES0所指向的標(biāo)頭緩沖區(qū)中可用。 |
4 | IPV4 | IPV4標(biāo)頭存在此位表示檢測到IPV4標(biāo)頭。當(dāng)RDES3的SPH位被設(shè)置時(shí),IPV4報(bào)頭在RDES0所指向的報(bào)頭緩沖區(qū)中可用。 |
3 | IPHE | IP標(biāo)頭錯(cuò)誤當(dāng)設(shè)置此位時(shí),表示以下情況之一:■ MAC計(jì)算的16位IPv4標(biāo)頭校驗(yàn)和與接收到的校驗(yàn)和字節(jié)不匹配。■ IP數(shù)據(jù)報(bào)版本與以太網(wǎng)類型值不一致。■ 以太網(wǎng)數(shù)據(jù)包沒有預(yù)期的IP標(biāo)頭字節(jié)數(shù)。當(dāng)位5或位4被設(shè)置時(shí),該位是有效的。當(dāng)您選擇啟用接收TCP/IP校驗(yàn)和檢查功能時(shí),此位可用。 |
2:0 | PT | 有效載荷類型這些比特指示由接收校驗(yàn)和卸載引擎(COE)處理的IP數(shù)據(jù)報(bào)中封裝的有效載荷的類型:■ 3'b0000:未知類型或未處理IP/AV有效負(fù)載■ 2001年3月:UDP■ 2010年3月:TCP■ 2011年3月:ICMP■ 3'b110:AV標(biāo)記數(shù)據(jù)包■ 3'b111:帶AV標(biāo)簽的控制包■ 3'b101:AV未標(biāo)記控制數(shù)據(jù)包■ 3'b100:IGMP如果IPV4標(biāo)頭存在位被設(shè)置為else DCB(LLDP)控制包如果COE由于存在IP標(biāo)頭錯(cuò)誤或碎片IP而不處理IP數(shù)據(jù)報(bào)的有效載荷,則將這些位設(shè)置為3'b000。 |
RDES2
位 | 名字 | 描述 |
---|---|---|
31:29 | L3L4FM | 匹配的第3層和第4層濾波器數(shù)量這些比特指示與接收到的分組匹配的第三層和第四層濾波器的數(shù)量:只有當(dāng)位28或位27被設(shè)置為高時(shí),該字段才有效。當(dāng)多個(gè)濾波器匹配時(shí),這些位給出最低濾波器的數(shù)目 |
28 | L4FM | 第4層過濾器匹配當(dāng)設(shè)置此位時(shí),它表示接收到的數(shù)據(jù)包與啟用的第4層端口號字段之一匹配。只有當(dāng)下列條件之一成立時(shí),才會給出此狀態(tài)第3層字段未啟用,所有啟用的第4層字段匹配,所有啟用的第3層和第4層篩選器字段匹配當(dāng)不止一個(gè)過濾器匹配時(shí),該位給出由位[31:29]指示的過濾器的第4層過濾器狀態(tài) |
27 | L3FM | 第3層篩選器匹配設(shè)置此位時(shí),表示接收到的數(shù)據(jù)包與啟用的第3層IP地址字段之一匹配。只有當(dāng)下列條件之一成立時(shí),才會給出此狀態(tài):■ 所有啟用的第3層字段匹配,所有啟用的“第4層”字段被繞過■ 所有啟用的過濾器字段匹配當(dāng)多個(gè)過濾器匹配時(shí),該位給出由位[31:29]指示的過濾器的第3層過濾器狀態(tài)。 |
26:19 | MADRM | MAC地址匹配或哈希值當(dāng)HF位重置時(shí),此字段包含與接收到的數(shù)據(jù)包的目標(biāo)地址匹配的MAC地址寄存器號。僅當(dāng)DAF位被重置時(shí),此字段才有效。設(shè)置HF位時(shí),此字段包含MAC計(jì)算的哈希值。當(dāng)與哈希值相對應(yīng)的比特被設(shè)置在哈希過濾器寄存器中時(shí),數(shù)據(jù)包通過哈希過濾器。 |
18 | HF | 哈希過濾器狀態(tài)設(shè)置此位時(shí),表示數(shù)據(jù)包通過了MAC地址哈希過濾器。比特[26:19]表示散列值。 |
17 | DAF | 當(dāng)設(shè)置此位時(shí),目標(biāo)地址過濾器失敗,這表明數(shù)據(jù)包在Mac上的DA過濾器失敗。 |
16 | SAF | SA地址篩選器失敗設(shè)置此位時(shí),表示數(shù)據(jù)包未通過MAC中的SA篩選器。 |
15 | OTS | VLAN篩選器狀態(tài)設(shè)置時(shí),此位指示接收數(shù)據(jù)包的VLAN標(biāo)記通過VLAN篩選器。此位僅在未啟用DWC-EQOS-ERVFE時(shí)有效。如果啟用了DWC-EQOS-ERVFE,則該位將重新定義為外部VLAN標(biāo)記篩選器狀態(tài)(OTS)。有關(guān)詳細(xì)信息,請參閱第235頁的“過濾器狀態(tài)”。此位對單個(gè)和雙VLAN標(biāo)記幀都有效。 |
14 | ITS | 內(nèi)部VLAN標(biāo)記篩選器狀態(tài)(ITS)此位僅在啟用DWC_EQOS_ERVFE時(shí)有效。有關(guān)更多詳細(xì)信息,請參閱第235頁的“過濾器狀態(tài)”。當(dāng)啟用雙VLAN處理時(shí),此位僅對雙VLAN標(biāo)記幀有效。 |
13:11 | 保留 | |
10 | ARPNR | 未生成ARP應(yīng)答當(dāng)設(shè)置此位時(shí),表示MAC沒有為接收到的ARP請求數(shù)據(jù)包生成ARP應(yīng)答。當(dāng)MAC忙于發(fā)送對早期ARP請求的ARP回復(fù)時(shí)(一次只處理一個(gè)ARP請求),設(shè)置此位。當(dāng)未選擇Enable IPv4 ARP Offload(啟用IPv4 ARP卸載)選項(xiàng)時(shí),保留此位。 |
9:0 | HL | L3/L4報(bào)頭長度該字段包含由MAC在L3或L4報(bào)頭邊界處分割的分組的報(bào)頭的長度,如MAC接收器所識別的。僅當(dāng)?shù)谝幻枋龇槐辉O(shè)置(FD=1)時(shí),該字段才有效。頭數(shù)據(jù)被寫入相應(yīng)描述符的緩沖器1地址。如果標(biāo)頭長度為零,則此字段無效。這意味著MAC沒有識別和分割報(bào)頭。選擇“啟用拆分標(biāo)頭功能”選項(xiàng)時(shí),此字段有效。 |
RDES3
位 | 名字 | 描述 |
---|---|---|
31 | OWN | |
30 | CTXT | |
29 | FD | |
28 | LD | |
27 | RS2V | 接收狀態(tài)RDES2有效設(shè)置此位時(shí),表示RDES2中的狀態(tài)有效,并且由DMA寫入。僅當(dāng)RDES3的LD位被設(shè)置時(shí),該位才有效。 |
26 | RS1V | 接收狀態(tài)RDES1有效設(shè)置此位時(shí),表示RDES1中的狀態(tài)有效,并且由DMA寫入。僅當(dāng)RDES3的LD位被設(shè)置時(shí),該位才有效。 |
25 | RS0V | 接收狀態(tài)RDES0有效設(shè)置此位時(shí),表示RDES0中的狀態(tài)有效,并且由DMA寫入。僅當(dāng)RDES3的LD位被設(shè)置時(shí),該位才有效。 |
24 | CE | CRC錯(cuò)誤設(shè)置此位時(shí),表示在接收到的數(shù)據(jù)包上發(fā)生了循環(huán)冗余校驗(yàn)(CRC)錯(cuò)誤。僅當(dāng)RDES3的LD位設(shè)置時(shí),此字段才有效 |
23 | GP | 巨型數(shù)據(jù)包設(shè)置此位時(shí),表示數(shù)據(jù)包長度超過指定的最大以太網(wǎng)大小1518、1522或2000字節(jié)(如果設(shè)置了巨型數(shù)據(jù)包啟用,則為9018或9022字節(jié))。注:巨型數(shù)據(jù)包僅表示數(shù)據(jù)包的長度。它不會導(dǎo)致任何數(shù)據(jù)包截?cái)?/td> |
22 | RWT | 接收看門狗超時(shí)設(shè)置此位時(shí),表示接收看門狗計(jì)時(shí)器在接收當(dāng)前數(shù)據(jù)包時(shí)已過期。看門狗超時(shí)后,當(dāng)前數(shù)據(jù)包被截?cái)唷?/td> |
21 | OE | 溢出錯(cuò)誤設(shè)置此位時(shí),表示接收到的數(shù)據(jù)包由于Rx FIFO中的緩沖區(qū)溢出而損壞。注意:此位僅在DMA將部分?jǐn)?shù)據(jù)包傳輸?shù)綉?yīng)用程序時(shí)設(shè)置。只有當(dāng)Rx FIFO在閾值模式下操作時(shí)才會發(fā)生這種情況。在存儲轉(zhuǎn)發(fā)模式中,所有部分?jǐn)?shù)據(jù)包都會完全丟棄在Rx FIFO中 |
20 | RE | 接收錯(cuò)誤當(dāng)設(shè)置此位時(shí),它指示在分組接收期間斷言gmii_rxer_i信號,而斷言gmii_rxdv_i信號。該錯(cuò)誤還包括GMII和半雙工模式中的載波擴(kuò)展錯(cuò)誤。錯(cuò)誤可以是較少擴(kuò)展名或沒有擴(kuò)展名,也可以是擴(kuò)展期間的錯(cuò)誤(rxd!=0f) |
19 | DE | 漂移位錯(cuò)誤設(shè)置此位時(shí),表示接收到的數(shù)據(jù)包具有非整數(shù)倍的字節(jié)(奇數(shù)半字節(jié))。此位僅在MII模式下有效。 |
18:16 | LT | 長度/類型字段此字段指示接收到的數(shù)據(jù)包是長度數(shù)據(jù)包還是類型數(shù)據(jù)包。這3個(gè)比特的編碼如下:■ 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 | 錯(cuò)誤摘要設(shè)置此位時(shí),表示以下位的邏輯或:僅當(dāng)RDES3的LD位被設(shè)置時(shí),此字段才有效。■ 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 | 數(shù)據(jù)包長度這些比特指示被傳送到系統(tǒng)存儲器(包括CRC)的接收數(shù)據(jù)包的字節(jié)長度。當(dāng)RDES3的LD位被設(shè)置和/或溢出錯(cuò)誤位被重置時(shí),此字段有效。當(dāng)啟用IP校驗(yàn)和計(jì)算并且接收到的分組不是MAC控制分組時(shí),分組長度還包括附加到以太網(wǎng)分組的兩個(gè)字節(jié)。當(dāng)設(shè)置RDES3的LD位時(shí),此字段有效。當(dāng)未設(shè)置Last Descriptor和Error Summary位時(shí),此字段指示當(dāng)前數(shù)據(jù)包已傳輸?shù)睦塾?jì)字節(jié)數(shù)。 |
接收****上下文描述符
見手冊21.6.3
只有DMA能寫,提供最后一個(gè)包的擴(kuò)展?fàn)顟B(tài)信息,
RDES3的b30 CTXT標(biāo)記該類型
1.4Split Header Support模式
DMA可以分別處理接收到的包的報(bào)頭和有效載荷。支持MAC幀,IP包,TCP/UDP包三個(gè)級別的包類型。
見手冊21.3
1.5總結(jié)
以上信息來源手冊的簡單整理,以備查詢,實(shí)際調(diào)試過程中以對照手冊為準(zhǔn)。
一些關(guān)鍵的字段可以幫助調(diào)試等需要了解,重點(diǎn)了解OWN位的互斥作用,即硬件和軟件的R-M-W操作。
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5068文章
19014瀏覽量
303229 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5374瀏覽量
171093 -
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120001 -
緩沖器
+關(guān)注
關(guān)注
6文章
1917瀏覽量
45450 -
驅(qū)動開發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12062
發(fā)布評論請先 登錄
相關(guān)推薦
評論