nckkm 0 8 мая, 2012 Опубликовано 8 мая, 2012 · Жалоба У меня 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 - кто его знает что там скрыто в его функциях врапперах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Katrisha 0 9 мая, 2012 Опубликовано 9 мая, 2012 · Жалоба Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов ) Завтра пойду на поиски ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 9 мая, 2012 Опубликовано 9 мая, 2012 · Жалоба Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов ) Завтра пойду на поиски ) Поставьте PCIScope под Windows - будет Вам счастье. Увидите всю PCI подсистему - и сможете читать\писать без драйвера. Для отладки очень помогает. Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Katrisha 0 9 мая, 2012 Опубликовано 9 мая, 2012 · Жалоба Сейчас у меня стоит HWDirect. Может писать/читать без драйвера. Но читает и пишет точно так же по одному dwowdу, эта программа - что то подобное? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Katrisha 0 31 июля, 2012 Опубликовано 31 июля, 2012 · Жалоба А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию? Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 31 июля, 2012 Опубликовано 31 июля, 2012 · Жалоба 2 Katrisha Если хотите мастера на PCIE - нужен физический адрес, без него никак - нужно же одному знать куда ложить данные а другому откуда их выгребать потом. На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции, даже в названии "DMA" у неё присутствует. Она по идее решит все ваши траблы с буфером, физ.адресом и так далее.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 31 июля, 2012 Опубликовано 31 июля, 2012 · Жалоба А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию? Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились :) Физический адрес - забота драйвера. Под 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-устройства в системную память) это влияет не так сильно, как на операцию чтения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Katrisha 0 2 августа, 2012 Опубликовано 2 августа, 2012 · Жалоба А в WinDriver-е нужно где-то указать что хочешь DMA? Попыталась сегодня сделать там драйвер, но такого пункта не нашла Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 2 августа, 2012 Опубликовано 2 августа, 2012 · Жалоба ..На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции.. Вот собственно статейка Там всё просто и разжёвано - для начала самое оно думаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 2 августа, 2012 Опубликовано 2 августа, 2012 · Жалоба А в WinDriver-е нужно где-то указать что хочешь DMA? Попыталась сегодня сделать там драйвер, но такого пункта не нашла Самые базовые вещи упоминаются тут: http://www.jungo.com/st/support/tech_docs/td76.html Подробности - в доках и примерах, устанавливаемых с WinDriver. Там есть более-менее полное описание и готовые примеры работы с DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться