Перейти к содержанию
    

У меня memory space.

Что конкретно в конфигурации сейчас не скажу, смогу посмотреть позже.

 

Драйвер написан с помощью NUMEGA, и какую функцию использует нумега сложно сказать.

 

Когда драйвер был написан через WinDriver, там использовались функции WDC_ReadAddrBlock() - для чтения и WDC_WriteAddrBlock() - для записи.

 

еще одна фишка.

для отладки оборудования гораздо удобнее пользоваться linux.

вот как в виндовсе посмотреть configuration space устройств? это целое дело.

а в linux - консольная команда "sudo lspci -x"

в виндовс нужно писать драйвер для доступа к памяти.

в линукс можно легко обойтись без драйвера.

можно написать простую C-программу которая откроет файл

int fd = open("/dev/mem",O_RDWR|O_SYNC);

потом сделает mmap и сразу получает указатель на память устройства.

потом сам пишешь цикл for(int i=0; i<16; i++) который читает из устройства.

20 строчек С кода делают все что нужно для отладки.

в интернете полно примеров. только запускать с правами администратора.

 

Что хорошо в этом случае - точно знаешь "как" идет доступ к оборудованию.

А в случае с windriver или numega - кто его знает что там скрыто в его функциях врапперах.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов )

Завтра пойду на поиски )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов )

Завтра пойду на поиски )

 

Поставьте PCIScope под Windows - будет Вам счастье.

Увидите всю PCI подсистему - и сможете читать\писать без драйвера.

Для отладки очень помогает.

Успехов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас у меня стоит HWDirect. Может писать/читать без драйвера. Но читает и пишет точно так же по одному dwowdу, эта программа - что то подобное?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию?

Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Katrisha

Если хотите мастера на PCIE - нужен физический адрес, без него никак - нужно же одному знать куда ложить данные а другому откуда их выгребать потом.

На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции, даже в названии "DMA" у неё присутствует. Она по идее решит все ваши траблы с буфером, физ.адресом и так далее..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию?

Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились :)

 

Физический адрес - забота драйвера. Под Windows помочь в реализации могут как WinDriver, так и NuMega, хотя последняя уже устарела и лучше бы ею не пользоваться. Наилучший инструмент написания драйверов под Windows - родной Windows Driver Kit (WDK), но он же и самый сложный в освоении. На первых порах можно реализовать драйвер на WinDriver, затем переписать его на WDK.

 

Забота железа (PCI BM-а) - реализация Scatter-Gather DMA, т.к., в общем случае, непрерывный буфер в пользовательском пространстве памяти не является непрерывным в физической памяти. У WinDriver есть особые функции выделения памяти для DMA, не помню, возможно там есть опция выделения цельного физического куска. Но, в общем случае, такое предполагается невозможным, и нужно реализовывать SG DMA. Непрерывный буфер в пользовательском пространстве - это целый список адресов физических страниц памяти, который должен обрабатываться аппаратным DMA как цепочка заданий с общим завершением. Если железо не поддерживает SG DMA - можно обрабатывать этот список программно, анализируя завершение DMA после каждой страницы, но это резко отрицательно скажется на скорости.

 

Вот список основных проблем, с которым придется разбираться, реализуя DMA:

- трансляция адресов и реализация Scatter-Gather DMA;

- (опционально) выравнивание некратных адресов (в вашем случае, проще и лучше просто запретить работу с невыровненными адресами);

- обеспечение кэш-когерентности DMA буферов (т.е. выполнение сброса-очистки (flush и invalidate) соответствующих участков процессорного кэша в нужные моменты времени);

- обработка признаков завершения DMA-операции (обработка прерываний).

 

Что касается скорости, теоретические 133МБ/с на PCI 33Mhz 32bit не получатся никогда, но на цифру порядка 100 Мбайт/сек, наверное, можно рассчитывать. Пиковая пропускная способность, кроме особенностей Вашего железа, будет зависеть еще и от архитектуры ПК, в.т.ч. от того, насколько далеко (логически) от системной памяти находится PCI-слот. В современных ПК это неблизкий путь через несколько мостов, впрочем, на операцию записи (т.е. прием данных из внешнего BM-устройства в системную память) это влияет не так сильно, как на операцию чтения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в WinDriver-е нужно где-то указать что хочешь DMA?

Попыталась сегодня сделать там драйвер, но такого пункта не нашла

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции..

Вот собственно статейка

Там всё просто и разжёвано - для начала самое оно думаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в WinDriver-е нужно где-то указать что хочешь DMA?

Попыталась сегодня сделать там драйвер, но такого пункта не нашла

Самые базовые вещи упоминаются тут:

http://www.jungo.com/st/support/tech_docs/td76.html

 

Подробности - в доках и примерах, устанавливаемых с WinDriver.

Там есть более-менее полное описание и готовые примеры работы с DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...