Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приемные буферы в LwIP 1.3 для LPC2387
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Hz!
Адаптирую сабжевый стек для работы под uCOS на LPC2387. Проблем с прикручиванием к оси не возникло т.к. примеров хватает. А вот с MAC уровнем сложнее. Нашел проект LwIPWeb, но там прием осуществляется простым копированием данных из Ethernet ram в обычную. В стеке есть возможность использовать POOLы, но нету возможности расположить PBUF_POOL в области Ethernet ram не помещая туда все остальные его части. Второй вариант – использовать при выделении памяти под pbuf опцию PBUF_REF, когда высвобождается память только под саму структуру, а буферы и указатели не них делать самому, но тут возникает куча вопросов по поводу того, как долго выделенные буферы будут использоваться стеком и не приведет ли такой подход к забиванию буфера.
Есть третий вариант, это использование пересылки по DMA из Ethernet ram в обычную, это лучше, чем простое копирование, но я склоняюсь к варианту №2, как к более «правильному».
Если кто-то делал по-другому, подскажите.
zltigo
Цитата(Hz! @ Oct 2 2008, 11:22) *
А вот с MAC уровнем сложнее.

Все, что есть по MAC в интернете - полный мрак. Единственне исключение от чего можно отталкиваться это официальный лицензированнный NXP порт NicheLite.
Цитата
Нашел проект LwIPWeb, но там прием осуществляется простым копированием данных из Ethernet ram в обычную

MAC DMA доступна и "обычная" и "USB" RAM - если считаете нужным, то можете сразу куда угодно посылать.
Цитата
...использование пересылки по DMA из Ethernet ram в обычную, это лучше, чем простое копирование

А вот это не получится - GPDMA контроллер висит на другой шине и доступа к "Ethernet" просто не имеет.
Hz!
т.е. я могу в дескрипторах emac указывать адреса 0х40000000 .. 0x40010000 и он сразу туда будет складировать принимаемые данные, или я неправильно понял?

Нашел:
Цитата
The base address registers for the descriptor array, registers indicating the number of
descriptor array entries, and descriptor array input/output pointers are contained in the
Ethernet block. The descriptor entries and all transmit and receive packet data are stored
in memory which is not a part of the Ethernet block. The descriptor entries tell where
related frame data is stored in memory, certain aspects of how the data is handled, and
the result status of each Ethernet transaction.
zltigo
Цитата(Hz! @ Oct 2 2008, 12:41) *
он сразу туда будет....

Да. Он имеет доступ ко всем шинам/банкам.
Функциональная схемка есть в datashit. Там все понятно по шинам,банкам,master...
Hz!
Тогда план такой: в стеке резервирую пулы для приема в количестве больше, чем RxDescriptorNumber. При инициализации EMAC выделяю необходимое количество pbuf-ов (== RxDescriptorNumber), настраиваю дескрипторы и жду прихода пакета. Входящий пакет записываю в буферы, потом их склеиваю в один через указатели в структуре pbuf. Выделяю новые буферы и прописываю их адреса в дескрипторах, а принятый пакет передаю в стек. Когда он обработан и становится ненужным, он освобождается стеком, таким образом, восполняется количество свободных pool-ов.
Покритикуйте, пожалуйста, такой подход.
scifi
Цитата(Hz! @ Oct 3 2008, 11:39) *
Тогда план такой: в стеке резервирую пулы для приема в количестве больше, чем RxDescriptorNumber. При инициализации EMAC выделяю необходимое количество pbuf-ов (== RxDescriptorNumber), настраиваю дескрипторы и жду прихода пакета. Входящий пакет записываю в буферы, потом их склеиваю в один через указатели в структуре pbuf. Выделяю новые буферы и прописываю их адреса в дескрипторах, а принятый пакет передаю в стек. Когда он обработан и становится ненужным, он освобождается стеком, таким образом, восполняется количество свободных pool-ов.
Покритикуйте, пожалуйста, такой подход.

Я, собственно, так и делал, когда писал драйвер для Freescale MCF52233. Прикладываю его к этому посту. Отлажено и работает. Может быть, будет интересно взглянуть.
zhevak
г*вноданные:
Цитата(zltigo @ Oct 2 2008, 16:50) *
Функциональная схемка есть в datashit.

Спасибо! Поржал. Сам бы никогда не допер, пока не увидел.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.