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

 
 
 
Reply to this topicStart new topic
> Прочитать данные с ПК по PCI Express
novartis
сообщение Aug 1 2013, 08:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Добрый день. Имеется отладочная плата 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 запросы она ведь удачно засылает?
Может в драйвере нужно чего еще прописать, проинициализировать? К сожалению, драйвер писал не я, и всех тонкостей не знаю, и не силен в линукс-программировании.

Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 1 2013, 09:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



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


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

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


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







Go to the top of the page
 
+Quote Post
novartis
сообщение Aug 2 2013, 04:22
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



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

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

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

Буду дальше разбираться, как это правильно организовывать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 03:32
Рейтинг@Mail.ru


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