How does the STM32F769 Ethernet DMA advance to the next descriptor in ring mode?
I am working with an STM32F769NI and planning to implement my own Ethernet driver without using the HAL. While studying the DMA descriptor system, I found that the hardware supports both ring structure and chain structure descriptors. However, I am having trouble understanding the exact behavior of the ring structure.
For example, suppose I have three TX descriptors: DESC0, DESC1, and DESC2.
-
After the DMA finishes transmitting DESC0, how does it advance to DESC1?
-
Since the descriptor size is fixed, does the hardware simply move to the next descriptor by doing something like: current_descriptor_address + descriptor_size?
-
If that is the case, then I don’t clearly understand what the practical difference is between ring mode and chain mode.
So my questions are:
-
In the STM32F769 Ethernet DMA, how exactly does the DMA engine move to the next descriptor in ring structure mode? (I would like to understand this at the hardware/register level.)
-
What is the functional difference between ring structure and chain structure, from the DMA’s point of view? (Both seem to allow continuous descriptor traversal, so I want to understand what changes internally.)
Any detailed explanation of how the DMA walks through descriptors in ring mode vs chain mode would be greatly appreciated.
