目录
- 一、以太网DMA描述符简介
- 二、以太网DMA描述符结构
- 三、如何追踪描述符
- 总结
一、以太网DMA描述符简介
发送:不需要CPU的参与下,把描述符指向的缓冲区数据传输到Tx FIFO当中
接收:不需要CPU的参与下,将Rx FIFO中的数据传输到描述符指向的缓冲区当中
常规描述符结构
/* stm32f4/f7/h7xx_hal_eth.h */
typedef struct
{
__IO uint32_t Status; /* 状态 */
uint32_t ControlBufferSize; /* 缓冲区1和2的大小 */
uint32_t Buffer1Addr; /* 缓冲区1的地址 */
uint32_t Buffer2NextDescAddr; /* 缓冲区2的地址/指向下一个描述符 */
/* 以下成员变量为增强描述符的 */
/* ……………………*/
}
ETH_DMADescTypeDef;
TX DMA描述符成员变量
● TDES0[31]置0:CPU可将数据拷贝到描述符中,拷贝完成之后把该位置1,告诉DMA可以发送数据
● TDES0[20]置1:描述符中的第二个地址是下一个描述符地址
● TDES1[28:16]:如果TDES0[20] 位置1,则该字段无效
● TDES3[31:0]:取决于TDES0[20]的值,为1,则指向下一个描述符地址
RX DMA描述符成员变量
● RDES0[31]置1:MAC将数据从RX FIFO传输到RX描述符中,拷贝完成之后该位置0,告诉CPU可以接收数据
● RDES0[14]置1:描述符中的第二个地址是下一个描述符地址
● RDES1[28:16]:如果RDES0[14] 位置1,则该字段无效
● RDES3[31:0]:取决于RDES0[14]的值,为1,则指向下一个描述符地址
二、以太网DMA描述符结构
以太网DMA描述符注意细节
三、如何追踪描述符
ETH_HandleTypeDef中定义了RxDesc和TxDesc指针,它们是用来追踪Rx/Tx的DMA描述符(旧)
ETH_InitTypeDef中定义了RxDesc和TxDesc指针,它们是用来追踪Rx/Tx的DMA描述符(新)