> 文章列表 > 【lwIP(第二章)】以太网DMA

【lwIP(第二章)】以太网DMA

【lwIP(第二章)】以太网DMA

目录

  • 一、以太网DMA描述符简介
  • 二、以太网DMA描述符结构
  • 三、如何追踪描述符
  • 总结

一、以太网DMA描述符简介

发送:不需要CPU的参与下,把描述符指向的缓冲区数据传输到Tx FIFO当中
接收:不需要CPU的参与下,将Rx FIFO中的数据传输到描述符指向的缓冲区当中

【lwIP(第二章)】以太网DMA
常规描述符结构

/* 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描述符成员变量
【lwIP(第二章)】以太网DMA
● TDES0[31]置0:CPU可将数据拷贝到描述符中,拷贝完成之后把该位置1,告诉DMA可以发送数据

● TDES0[20]置1:描述符中的第二个地址是下一个描述符地址

● TDES1[28:16]:如果TDES0[20] 位置1,则该字段无效

● TDES3[31:0]:取决于TDES0[20]的值,为1,则指向下一个描述符地址

RX DMA描述符成员变量
【lwIP(第二章)】以太网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描述符结构

【lwIP(第二章)】以太网DMA

【lwIP(第二章)】以太网DMA

以太网DMA描述符注意细节
【lwIP(第二章)】以太网DMA

三、如何追踪描述符

ETH_HandleTypeDef中定义了RxDesc和TxDesc指针,它们是用来追踪Rx/Tx的DMA描述符(旧)

ETH_InitTypeDef中定义了RxDesc和TxDesc指针,它们是用来追踪Rx/Tx的DMA描述符(新)

【lwIP(第二章)】以太网DMA

总结

【lwIP(第二章)】以太网DMA

E客网络