Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прочитать данные с ПК по PCI Express
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
novartis
Добрый день. Имеется отладочная плата Strtatix IV GX Development Kit. Плата засунута в ПК в PCIE. На плате реализован некий контроллер/автомат (мы его гордно зовем DMA-контроллер rolleyes.gif ), который может принимать запросы от ПК (Memory Write Request и Memory Read Request) и при необходимости отвечать на них (Completion with Data), а так же может засылать в ПК много-много пакетов (Memory Write Request). Это все работало.

Появилась необходимость не только передавать в ПК данные из ПЛИС, но и вычитывать из ПК данные в ПЛИС.
Для этого добавил в свой автомат еще один шаг - отправку в ПК из ПЛИС запроса Memory Read Request. В ответ я ожидаю получение нескольких Completion with Data. Но в ответ тишина.

На стороне ПК в линуксе реализован драйвер, выдернул от туда строчки, может это поможет:

Код
addr = dma_map_single( dev, dest, size, DMA_FROM_DEVICE );    // выделение памяти, куда будут писаться данные из ПЛИС в ПК

start( adev, devaddr, addr, devsize, DmaRead );                         // команда для ПЛИС, чтобы она начала засылать данные в ПК, в плату сообщается адрес addr выделенной области памяти

...

dma_unmap_single( dev, addr, size, DMA_FROM_DEVICE );      // закрываем выделенную память


Соответственно для варианта чтения данных из ПК аргумент DMA_FROM_DEVICE был заменен на DMA_TO_DEVICE,
а DmaRead на DmaWrite.

По Signal Tap отслеживаю, что сигналы бегают от PCIE ядра, так как я и задумывал, запрос к ПК на чтение выделенной памяти отсылается, а вот ответ на него не приходит.
При этом плата работает, pcie не отваливается, ПК не виснет.

Вопросы у меня такие:
Имеет ли право плата ПЛИС вообще засылать запросы на чтение (я к тому, что она ведь не ROOT, а Endpoint), хотя write запросы она ведь удачно засылает?
Может в драйвере нужно чего еще прописать, проинициализировать? К сожалению, драйвер писал не я, и всех тонкостей не знаю, и не силен в линукс-программировании.

dsmv
Цитата(novartis @ Aug 1 2013, 11:16) *
Вопросы у меня такие:
Имеет ли право плата ПЛИС вообще засылать запросы на чтение (я к тому, что она ведь не ROOT, а Endpoint), хотя write запросы она ведь удачно засылает?


Имеет. Все этим пользуются.

Цитата
Может в драйвере нужно чего еще прописать, проинициализировать? К сожалению, драйвер писал не я, и всех тонкостей не знаю, и не силен в линукс-программировании.


Не нужно. На запрос чтения должен прийти ответ. Если ответов нет, что-то не так в запросе.







novartis
Цитата(dsmv @ Aug 1 2013, 12:21) *
Имеет. Все этим пользуются.

Вот за это спасибо, а то хрен его знает, вдруг я делаю что то не так (не так, как все).

А проблема действительно заключалась в запросе.
С помощью команды lspci выяснил, что плата висит на шине 01:00.0 (bus:slot.func).
Подсунул в запросе Request ID = 0x0100 и отклик пришел.

Буду дальше разбираться, как это правильно организовывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.