Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос к тем, кто использовал системный DMA
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Tommyknocker
Имеется PCI устройство. Собственным DMA адаптером не обладает. Однако у данного устройства существует режим, когда оно по команде начинает "выдавать" на шину PCI посылки данных (по восемь 16-ти битных слов... всего около 100 МБ).
Вопрос: как я могу записать эти данные? Могу ли я применить в данном случае DMA материнской платы ? Если да, то просьба вкратце изложить последователность моих действий.
Должен ли я своему устройству сообщать что-то кроме собственно команды "выдавай очередной пакет"?
Должен ли я сообщать ему адрес куда копировать или это возмет на себя контроллер DMA материнской платы?
Должно ли мое устройство (сделано на FPGA) генерировать прерывание после окончания каждой посылки?
VslavX
Контроллер DMA на метеринской плате "в начале времен" предназначался для взаимодействия с контроллером флоппов, регенерации оперативной памяти и обслуживания устройств на шине ISA.
В данный момент из этих всех задач остался лишь флоп. ISA благополучно канула в лету, регенерация памяти решается на уровне контроллера памяти.
Оставшаяся часть контроллера DMA (работающая с флопом) в современных чипсетах обычно находится в южном мосту, и по внешнеинтерфейсной реализации сильно видоизменилась, и маловероятно что сможет обслуживать дополнительных клиентов.
Задачу внепроцессорной передачи данных, которая ранее выполнялась DMA на шине ISA, на шине PCI теперь выполняется самими PCI-устройствами - мастерами.
Цитата(Tommyknocker @ Dec 3 2005, 22:40) *
Вопрос: как я могу записать эти данные? Могу ли я применить в данном случае DMA материнской платы ? Если да, то просьба вкратце изложить последователность моих действий.

Итого - DMA материнки использовать нельзя
Цитата(Tommyknocker @ Dec 3 2005, 22:40) *
Должен ли я своему устройству сообщать что-то кроме собственно команды "выдавай очередной пакет"? Должен ли я сообщать ему адрес куда копировать или это возмет на себя контроллер DMA материнской платы?

Конечно, Вы должны дать устройству команду и все необходимые для ее выполнения параметры - в том числе _физический_ адрес назначения физически непрерываной области памяти и количество передаваемых слов. Создать и подготовить такую область памяти можно только в драйвере.
Хороший и несложный пример реализации бас-мастеринга - это стандартный PCI-IDE контроллер.
Цитата(Tommyknocker @ Dec 3 2005, 22:40) *
Должно ли мое устройство (сделано на FPGA) генерировать прерывание после окончания каждой посылки?

Это - по желанию. Если по каким-то причинам не хочеться возиться с прерываниями и не нужна быстрая реакция , то можно просто сделать ленивый поллинг в малоприоритетном потоке.
Tommyknocker
Цитата(VslavX @ Dec 4 2005, 09:59) *
Итого - DMA материнки использовать нельзя


Ну хорошо, в смысле не очень хорошо, но тем не менее...Как в таком случае мне нужно записать эти данные ? Как мы помним PCI девайс не обладает своим контролером DMA. Данные по каманде просто формируются на шине, по 8 16-битных пакетов. Программный I/O здесь ведь кажется тоже не подойдет, поскольку адресовать нечего.
VslavX
Цитата(Tommyknocker @ Dec 4 2005, 14:46) *
Ну хорошо, в смысле не очень хорошо, но тем не менее...Как в таком случае мне нужно записать эти данные ? Как мы помним PCI девайс не обладает своим контролером DMA. Данные по каманде просто формируются на шине, по 8 16-битных пакетов. Программный I/O здесь ведь кажется тоже не подойдет, поскольку адресовать нечего.

Угу, PCI-устройству DMA не нужен - иногда он сам себе DMA smile.gif
PCI-мастер может производить любую транзакцию на своем сегменте (в том числе mem/io/config read/write) с любым устройством на этом же сегменте. А также ряд транзакций которые понимают-пропустят на другие сегменты/память мосты. Чтение-запись оперативной памяти системы - это обязательный поддерживаемый минимум на PC-материнках.
То есть, Ваш PCI-мастер может получить у арбитра шину, стать ведущим и самостоятельно выполнить запись (или чтение) в требуемую область системной памяти. Ессно, для этого ему надо знать физический адрес назначения (а то как он выполнит запись-чтение). Поэтому в Вашем устройстве должны быть соответствующие регистры, куда Вы запишете желаемые параметры транзакций. Посмотрите в приаттаченном файле как это сделано в простейшем PCI-IDE.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.