|
AT91SAM9G45 и Linux, Работа с интерфейсами (SSC, SPI..) |
|
|
|
Aug 17 2010, 08:14
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 13-07-10
Пользователь №: 58 427

|
Здравствуйте! Мне нужно передавать данные от FPGA к ОС Linux. Скорость передачи довольно высокая - 3 МБайт/сек. Проблема в работе с интерфейсами. Во-первых, проблема в выборе между SSC, SPI... (может какой-нибудь другой последовательный интерфейс). Во-вторых, самое главное то, что драйвера под Linux нужно писать самому, а насколько я понимаю - это очень трудоемкий процесс, тем более, что подобного опыта у меня еще не было. Использование SPI представляется более логичным, но в данной системе это должно быть так: FPGA - Master, a Linux - Slave, но Linux, насколько я понимаю, не может быть Slave...И вообще, какие драйвера написать сложнее, на SPI или SSC? Посмотрел довольно много информации по этим вопросам и конкретных решений пока не нашел... Может у кого-нибудь есть опыт работы в подобных вопросах? Заранее благодарен!
|
|
|
|
|
 |
Ответов
|
Aug 17 2010, 09:15
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 3-08-10
Пользователь №: 58 732

|
Цитата(stas17 @ Aug 17 2010, 12:14)  подобного опыта у меня еще не было. Это и есть во-первых  slave реализовать самому минуя интерфейс ядра для spi - вообще не проблема если Вы работали с spi at91xxx и знакомы с ядром linux. В использовании для этого ssc я лично вообще смысла не вижу. PS С ssc я погорячился - нужно исходить из задачи, сколько данных, как они передаются - периодически, постоянно, блоками одинаковый длины или непрерывно и тд.
Сообщение отредактировал winner - Aug 17 2010, 09:51
|
|
|
|
|
Aug 17 2010, 13:14
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 13-07-10
Пользователь №: 58 427

|
Цитата(winner @ Aug 17 2010, 12:15)  Это и есть во-первых  slave реализовать самому минуя интерфейс ядра для spi - вообще не проблема если Вы работали с spi at91xxx и знакомы с ядром linux. В использовании для этого ssc я лично вообще смысла не вижу. Не могли об этом поподробнее рассказать? Цитата(winner @ Aug 17 2010, 12:15)  PS С ssc я погорячился - нужно исходить из задачи, сколько данных, как они передаются - периодически, постоянно, блоками одинаковый длины или непрерывно и тд. Пакеты, предположительно по 100 КБ, должны передаваться постоянно...
Сообщение отредактировал stas17 - Aug 17 2010, 13:16
|
|
|
|
|
Aug 17 2010, 15:23
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 3-08-10
Пользователь №: 58 732

|
Цитата(stas17 @ Aug 17 2010, 17:14)  Не могли об этом поподробнее рассказать? Пакеты, предположительно по 100 КБ, должны передаваться постоянно... Подробней - я боюсь тогда проще драйвер написать за Вас. Если кратко - уберите описание ресурсов нужного интерфейса в ядре и работайте с ним напрямую, сконфигурировав под свою задачу - у Атмел куча примеров, думаю найдете и для slave spi. По крайней мере у at91sam9260 два интерфейса - я так и делал, только мне нужно было в режиме master - с одним работал как обычно через api ядра (вернее не я а драйвер dataflash) а другой использовал в своих целях программируя напрямую - ставил свой обработчик прерываний и перекидывал данные используя pdc. В Вашем случае похоже Вы сами не знаете что нужно - я ничего посоветовать не могу - что делать с полученные данными если юзерспейс их не успел прочитать, какой величины иметь буфер, с какой частотой идут блоки данных, нужно данные обрабатывать или сразу на внешнее устройство скидывать, как организованы данные - обособленные блоки или просто непрерывный поток и для юзерспейс неважно где начало а где конец блока. и тд.
|
|
|
|
|
Aug 22 2010, 12:45
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 3-08-10
Пользователь №: 58 732

|
Цитата(VslavX @ Aug 22 2010, 16:02)  У меня тут вопрос возник - как корректно работать с DMA (aka PDC) в юзерспейсе. Ведь DMA требует физический адрес, а в юзерспейсе у нас только виртуальные, да еще принадлежащие контексту конкретного процесса (что значит не в любой момент могут быть физически отображены). Получив буфер от malloc() в юзерспейсе нельзя даже быть уверенным что этот буфер физически непрерывен, а не надерган менеджером памяти из нескольких разнесенных физических страничек В ядре то понятно - получили буфер, конвертнули его в список дескрипторов физических страниц и поехали. Неужто в Линуксе есть API для руления физической памятью из юзерспейса? (Сомнение есть, потому как это хорошая дыра в безопасности) Честно говоря не могу придумать для чего это все делать в userspace  я работал на уровне ядра. Мало того что буфер непрерывный, нужно чтобы еще и память была некешируемая иначе в устройство может улететь совсем не то что хочется
|
|
|
|
Сообщений в этой теме
stas17 AT91SAM9G45 и Linux Aug 17 2010, 08:14   stas17 Цитата(winner @ Aug 17 2010, 18:23) Если ... Aug 18 2010, 09:22     VslavX Цитата(winner @ Aug 22 2010, 15:45) Честн... Aug 22 2010, 13:06      AlexandrY Цитата(VslavX @ Aug 22 2010, 16:06) В нек... Aug 22 2010, 13:13       VslavX Цитата(AlexandrY @ Aug 22 2010, 16:13) По... Aug 22 2010, 13:26  AlexandrY Цитата(stas17 @ Aug 17 2010, 16:14) Пакет... Aug 18 2010, 07:18   stas17 Цитата(AlexandrY @ Aug 18 2010, 10:18) Зр... Aug 18 2010, 07:33   winner Цитата(AlexandrY @ Aug 18 2010, 11:18) Зр... Aug 18 2010, 08:09    AlexandrY Цитата(winner @ Aug 18 2010, 11:09) Очеви... Aug 18 2010, 09:13     winner Цитата(AlexandrY @ Aug 18 2010, 13:13) Не... Aug 18 2010, 10:01      stas17 Цитата(winner @ Aug 18 2010, 12:48) Да пр... Aug 18 2010, 10:08       AlexandrY Цитата(stas17 @ Aug 18 2010, 13:08) Вы хо... Aug 18 2010, 11:02        winner Цитата(AlexandrY @ Aug 18 2010, 15:02) Ск... Aug 18 2010, 11:42         AlexandrY Цитата(winner @ Aug 18 2010, 14:42) Перес... Aug 18 2010, 12:03          winner Цитата(AlexandrY @ Aug 18 2010, 16:03) Не... Aug 18 2010, 12:17 winner Цитата(stas17 @ Aug 17 2010, 12:14) драйв... Aug 17 2010, 17:41 MTh Работа с периферией в линуксе через самописный дра... Aug 19 2010, 14:40 stas17 Цитата(MTh @ Aug 19 2010, 17:40) Автору -... Aug 20 2010, 07:26 MTh SMC - Static Memory Controller
Загляните в даташит... Aug 20 2010, 11:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|