реклама на сайте
подробности

 
 
> Вопрос к тем, кто использовал системный DMA, "Захват" даных от PCI платы под WinXP
Tommyknocker
сообщение Dec 3 2005, 20:40
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 6-04-05
Из: г. Москва
Пользователь №: 3 901



Имеется PCI устройство. Собственным DMA адаптером не обладает. Однако у данного устройства существует режим, когда оно по команде начинает "выдавать" на шину PCI посылки данных (по восемь 16-ти битных слов... всего около 100 МБ).
Вопрос: как я могу записать эти данные? Могу ли я применить в данном случае DMA материнской платы ? Если да, то просьба вкратце изложить последователность моих действий.
Должен ли я своему устройству сообщать что-то кроме собственно команды "выдавай очередной пакет"?
Должен ли я сообщать ему адрес куда копировать или это возмет на себя контроллер DMA материнской платы?
Должно ли мое устройство (сделано на FPGA) генерировать прерывание после окончания каждой посылки?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
VslavX
сообщение Dec 4 2005, 06:59
Сообщение #2


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Контроллер 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) генерировать прерывание после окончания каждой посылки?

Это - по желанию. Если по каким-то причинам не хочеться возиться с прерываниями и не нужна быстрая реакция , то можно просто сделать ленивый поллинг в малоприоритетном потоке.
Go to the top of the page
 
+Quote Post
Tommyknocker
сообщение Dec 4 2005, 12:46
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 6-04-05
Из: г. Москва
Пользователь №: 3 901



Цитата(VslavX @ Dec 4 2005, 09:59) *
Итого - DMA материнки использовать нельзя


Ну хорошо, в смысле не очень хорошо, но тем не менее...Как в таком случае мне нужно записать эти данные ? Как мы помним PCI девайс не обладает своим контролером DMA. Данные по каманде просто формируются на шине, по 8 16-битных пакетов. Программный I/O здесь ведь кажется тоже не подойдет, поскольку адресовать нечего.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 4 2005, 18:01
Сообщение #4


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(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.
Прикрепленные файлы
Прикрепленный файл  IDE_BusMaster.pdf ( 37.57 килобайт ) Кол-во скачиваний: 105
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016