В чем разница между кольцевым дескриптором и связанным списком.
В принципе их работы. Кольцо может использовать два буфера одновременно (либо только один из них, как захочет программист). В списке второй буфер ссылается на "следующий" дескриптор.
Как на изображении из Reference Manual'а:
Вложение:
Буфер обмена01.png [65.32 KiB]
Скачиваний: 70
В ДШ написано что каждый дескриптор может содержать только один кадр, так ли это для кольцевого дескриптора ?
Так же.
Цитата:
Data chaining refers to frames that span multiple data buffers. However, a single descriptor cannot span multiple frames. The DMA skips to the next frame buffer when the end of frame is detected.
Цитата:
Цепочка дескрипторов содержит поля с указателями на буферы данных. Тем не менее, один дескриптор не может содержать несколько фреймов. DMA переходит на следующий буфер фрейма как только детектирует конец пакета.
То есть, вы можете заполнить настроить дескрипторы в кольцо, настроить у каждого по два буфера с ненулевым размером (если размер Buffer 1 равен нулю, будет использоваться Buffer 2), но использоваться будет только Buffer 1. Либо Buffer 2, если размер Buffer 1 нулевой.
Тогда что помешается во втором буфере кольцевого дескриптора, продолжение кадра или же новый кадр?
Зависит от варианта настроек.
Первая запись в дескрипторе TDES0, биты 20 и 21:
Цитата:
Bit 21 TER: Transmit end of ring
When set, this bit indicates that the descriptor list reached its final descriptor. The DMA returns to the base address of the list, creating a descriptor ring.
Bit 20 TCH: Second address chained
When set, this bit indicates that the second address in the descriptor is the next descriptor address rather than the second buffer address. When TDES0[20] is set, TBS2 (TDES1[28:16]) is a “don’t care” value. TDES0[21] takes precedence over TDES0[20].
Цитата:
Бит 21. TER: Конец кольца передачи
Когда бит установлен, дескриптор последний в списке. DMA возвращается к базовому адресу списке, создавая кольцо.
Бит 20. TCH: Второй ардес сцеплен
Когда бит установлен, второй адрес дескриптора используется как указатель на следующий дескриптор вместо указателя на второй буфер. Когда установлен TDES0[20], TBS2 (TDES1[28:16]) игнорируются. TDES0[21] имеет приоритет над TDES0[20].