Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DMA на шине PCI
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Murr Von Kater
Доброго всем времни суток. Пытаюсь реализовать DMA c усторойством на PCI. Честно говоря абсолютно не понятно, как ПДП организован в PCI. Не могу найти нормальных описаний протоколов PC/PCI & DDMA. Так же непонятки с драйверами к этому всему под Линух. LDD добавило еще больше вопросов чем ответов blink.gif . У кого есть подробное описание всего вышеперечисленного, прошу поделиться( на фтп тоже не нашел ничего полезного, на 800-ах страницах PCI system architecture это даже не упоминается).

И еще вопрос: обязательно ли мое устройство, с которым планируется обмен данными ПДП, должно быть мастером? Можно ли каким-то образом дать команду хосту к инициализации передачи данных по DMA?

За любую инфу заранее спасибо.
makc
В архитектуре PCI нет того DMA, который был на шине ISA. Вместо этого появилось понятие мастера (задатчика) на шине, который может получить контроль над шиной после выполнения процедуры арбитрации.

Таким образом, DMA на шине PCI выглядит следующим образом:
1. Программа дает команду устройству на передачу данных и физический адрес в памяти, откуда/куда эти данные должны быть переданы. Естественно, может быть задан объем передаваемых данных.
2. Устройство (мастер) выдает запрос на захват шины устанавливая сигнал REQ#.
3. Арбитр шины выполняет обработку запросов и через некоторое время (при выполнении определенных условий) выдает разрешение устройству на захват шины сигналом GNT#.
4. Устройство получив сигнал разрешения захвата шины выставляет сигнал FRAME# и прочие для проведения полноценной транзакции. После выполнения всех транзакций или при снятии сигнала разрешения устройство должно освободить шину. И т.д.

Таким образом мастер осуществляет передачу данных по шине в обход процессора и это можно назвать DMA. Но как таковой DMA нигде не расписан подробно, спецификация шины PCI лишь предусматривает возможность создания задатчиков для этой шины.
zltigo
Цитата(makc @ Jul 10 2006, 20:32) *
и это можно назвать DMA.

Это и есть DMA без всяких оговорок, только контроллер DMA есть не принадлежность (жуйте, что дают) материнской платы а у каждого PCI девайса свой, такой, какой ему нужен для решения его задач.
makc
Цитата(zltigo @ Jul 10 2006, 22:13) *
Цитата(makc @ Jul 10 2006, 20:32) *

и это можно назвать DMA.

Это и есть DMA без всяких оговорок, только контроллер DMA есть не принадлежность (жуйте, что дают) материнской платы а у каждого PCI девайса свой, такой, какой ему нужен для решения его задач.


Я имел в виду, что это можно назвать DMA в стиле архитектуры шины ISA. Хотя на самом деле здесь это понятие не совсем уместно, т.к. оно шире: ведь никто не запрещает мастеру PCI выполнить обращение к пространству ввода/вывода, т.е. это уже будет DirectIO. smile.gif Так что, ИМХО, нужно забыть про DMA, а мыслить категориями шины с множеством задатчиков/исполнителей.
BSV
Встречался с реализацией чего-то похожего. В состав чипсета входит контроллер ДМА и его можно запрограммировать на обмен с Вашим устройством (видел такую реализацию, работает). Нужно искать документацию на контроллер ДМА в чипсете. Но процессор может и непосредственно работать с памятью устройства, как, впрочем, и любое мастер-устройство на шине.
makc
Цитата(BSV @ Jul 11 2006, 01:17) *
Встречался с реализацией чего-то похожего. В состав чипсета входит контроллер ДМА и его можно запрограммировать на обмен с Вашим устройством (видел такую реализацию, работает). Нужно искать документацию на контроллер ДМА в чипсете.


Что это был за чипсет? А то чипсетов много разных... Искать замучаешься. smile.gif
mkalexey
Доброго всем дня!
Небольшая цитата для обобщения.
Михаил Гук "Аппаратные интерфейсы ПК"
Цитата
Шина PCI не предоставляет возможности прямого достуступа к памяти с использованием централизованного контроллера в стиле 8237А (как для шины ISA). Для разгрузки центрального процессора от рутинных перекачек данных предлагается прямое управление шиной со стороны устройств, называемых ведущими устройствами шины (PCI Bus Master). Степень интеллектуальности ведущего устройства может быть различной. В простейшем варианте ведущее устройство обеспечивает пересылку блоков данных между устройством и системной памятью (или памятью других устройств) по указанию от CPU. Здесь CPU командами обращения к определенным регистрам ведущего устройства задает начальный адрес, длину блока, направление пересылки и разрешает запуск переда¬чи. После этого пересылка выполняется по готовности (или инициативе) устройства, без отвлечения CPU. Таким образом выполняется прямой доступ к памяти (DMA). Более сложный контроллер DMA может организовывать сцепку буферов при чтении, разбросанную запись и т. п. — возможности, знакомые еще по «про¬двинутым» контроллерам DMA для ISA/EISA. Более интеллектуальное ведущее устройство, как правило, обладающее собственным микроконтроллером, не огра¬ничивается такой простой работой по указке CPU — оно выполняет обмены уже по программе своего контроллера.

з.ы. Советую прочитать.
Удачи. smile.gif
klop
Цитата(Murr Von Kater @ Jul 10 2006, 21:16) *
Доброго всем времни суток. Пытаюсь реализовать DMA c усторойством на PCI. Честно говоря абсолютно не понятно, как ПДП организован в PCI. Не могу найти нормальных описаний протоколов PC/PCI & DDMA. Так же непонятки с драйверами к этому всему под Линух. LDD добавило еще больше вопросов чем ответов blink.gif . У кого есть подробное описание всего вышеперечисленного, прошу поделиться( на фтп тоже не нашел ничего полезного, на 800-ах страницах PCI system architecture это даже не упоминается).

И еще вопрос: обязательно ли мое устройство, с которым планируется обмен данными ПДП, должно быть мастером? Можно ли каким-то образом дать команду хосту к инициализации передачи данных по DMA?

За любую инфу заранее спасибо.


Насколько я помню работа устройства в режиме мастера очень подробно описана в PCI system architecture. Что касается драйверов то ето отдельная песня особенно если делать все через DDK.
vladec
В плане написания драйверов для PCI, без начального опыта, да и для отработки железа, лучше пользоваться пакетом Jungo (www.jungo.com), там все это очень просто реализовано.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.