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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91SAM9G45 и Linux, Работа с интерфейсами (SSC, SPI..)
stas17
сообщение Aug 17 2010, 08:14
Сообщение #1


Участник
*

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



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


Участник
*

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



Цитата(stas17 @ Aug 17 2010, 12:14) *
подобного опыта у меня еще не было.


Это и есть во-первых smile.gif slave реализовать самому минуя интерфейс ядра для spi - вообще не проблема если Вы работали с spi at91xxx и знакомы с ядром linux. В использовании для этого ssc я лично вообще смысла не вижу.

PS С ssc я погорячился - нужно исходить из задачи, сколько данных, как они передаются - периодически, постоянно, блоками одинаковый длины или непрерывно и тд.

Сообщение отредактировал winner - Aug 17 2010, 09:51
Go to the top of the page
 
+Quote Post
stas17
сообщение Aug 17 2010, 13:14
Сообщение #3


Участник
*

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



Цитата(winner @ Aug 17 2010, 12:15) *
Это и есть во-первых smile.gif slave реализовать самому минуя интерфейс ядра для spi - вообще не проблема если Вы работали с spi at91xxx и знакомы с ядром linux. В использовании для этого ssc я лично вообще смысла не вижу.



Не могли об этом поподробнее рассказать?

Цитата(winner @ Aug 17 2010, 12:15) *
PS С ssc я погорячился - нужно исходить из задачи, сколько данных, как они передаются - периодически, постоянно, блоками одинаковый длины или непрерывно и тд.


Пакеты, предположительно по 100 КБ, должны передаваться постоянно...

Сообщение отредактировал stas17 - Aug 17 2010, 13:16
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 17 2010, 15:23
Сообщение #4


Участник
*

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



Цитата(stas17 @ Aug 17 2010, 17:14) *
Не могли об этом поподробнее рассказать?
Пакеты, предположительно по 100 КБ, должны передаваться постоянно...


Подробней - я боюсь тогда проще драйвер написать за Вас. Если кратко - уберите описание ресурсов нужного интерфейса в ядре и работайте с ним напрямую, сконфигурировав под свою задачу - у Атмел куча примеров, думаю найдете и для slave spi. По крайней мере у at91sam9260 два интерфейса - я так и делал, только мне нужно было в режиме master - с одним работал как обычно через api ядра (вернее не я а драйвер dataflash) а другой использовал в своих целях программируя напрямую - ставил свой обработчик прерываний и перекидывал данные используя pdc. В Вашем случае похоже Вы сами не знаете что нужно - я ничего посоветовать не могу - что делать с полученные данными если юзерспейс их не успел прочитать, какой величины иметь буфер, с какой частотой идут блоки данных, нужно данные обрабатывать или сразу на внешнее устройство скидывать, как организованы данные - обособленные блоки или просто непрерывный поток и для юзерспейс неважно где начало а где конец блока. и тд.
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 17 2010, 17:41
Сообщение #5


Участник
*

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



Цитата(stas17 @ Aug 17 2010, 12:14) *
драйвера под Linux нужно писать самому, а насколько я понимаю - это очень трудоемкий процесс, тем более, что подобного опыта у меня еще не было.


Трудности всегда присутствуют когда начинаешь с нуля, но в linux драйверы писать одно удовольствие smile.gif нужно просто понимать что делаешь. Если ldd читать времени нет - вот галопом по европам:
http://opennet.ru/docs/RUS/lkmpg26/
Вот то что в любом случае Вам понадобится для работы с dma
http://free-electrons.com/doc/dma.pdf
Вообще тут http://free-electrons.com/docs/ много информации в доступной форме в виде слайдов, для ознакомления и получения ориентира весьма неплохо.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 18 2010, 07:18
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(stas17 @ Aug 17 2010, 16:14) *
Пакеты, предположительно по 100 КБ, должны передаваться постоянно...


Зря вы здесь связались с линуксом, у атмела счетчик PDC только до 64 Kб а дальше надо успеть до окончания передачи пакета отработать прерывание и запрограммировать следующий дескриптор пересылки по DMA. Поскольку у Atmel-ов нет цепочечной обработки дескрипторов.
Большие сомнения, что всегда из юзерспейса вы успеете обработать такие прерывания в срок не пропатчив свой линукс на риалтайм.

Простой отказ от драйверов и прямое управление периферией не так прост как может показаться. Поскольку PDC может использоваться или затрагиваться еще кучей драйверов разной периферии, то придется профильтровать все драйвера на предмет конфликтов использования PDC. А это адская и никому не нужная работа.
Проще выкинуть линукс, и взять что-то типа FreeRTOS.

Go to the top of the page
 
+Quote Post
stas17
сообщение Aug 18 2010, 07:33
Сообщение #7


Участник
*

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



Цитата(AlexandrY @ Aug 18 2010, 10:18) *
Зря вы здесь связались с линуксом, у атмела счетчик PDC только до 64 Kб а дальше надо успеть до окончания передачи пакета отработать прерывание и запрограммировать следующий дескриптор пересылки по DMA. Поскольку у Atmel-ов нет цепочечной обработки дескрипторов.
Большие сомнения, что всегда из юзерспейса вы успеете обработать такие прерывания в срок не пропатчив свой линукс на риалтайм.

Простой отказ от драйверов и прямое управление периферией не так прост как может показаться. Поскольку PDC может использоваться или затрагиваться еще кучей драйверов разной периферии, то придется профильтровать все драйвера на предмет конфликтов использования PDC. А это адская и никому не нужная работа.
Проще выкинуть линукс, и взять что-то типа FreeRTOS.


О проблеме " риалтайма линукса" я уже задумывался, и смотрел в сторону FreeRTOS, eCOS и т.д., но тогда по-моему появится проблема в отладке и написании драйверов, разве нет?
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 18 2010, 08:09
Сообщение #8


Участник
*

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



Цитата(AlexandrY @ Aug 18 2010, 11:18) *
Зря вы здесь связались с линуксом


По большому счету я согласен - в linux нужно понимать что делаешь, здесь не прокатывает тупое кликанье мышью. К счастью.

Цитата
у атмела счетчик PDC только до 64 Kб а дальше надо успеть до окончания передачи пакета отработать прерывание и запрограммировать следующий дескриптор пересылки по DMA.


В "стандартном" pdc два указателя - на текущий и на следующий буфер, никогда не задумывались - для чего это сделано ?

Цитата
Поскольку у Atmel-ов нет цепочечной обработки дескрипторов.
Большие сомнения, что всегда из юзерспейса вы успеете обработать такие прерывания в срок не пропатчив свой линукс на риалтайм.


Очевидно Вы не видели даташит на at91sam9g45 - там появился dma контроллер с поддержкой scatter/gather.

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


Никаких проблем не вызвает прямое использование - даже наоборот.

Цитата
Проще выкинуть линукс, и взять что-то типа FreeRTOS.


Проще купить готовый продукт.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 18 2010, 09:13
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(winner @ Aug 18 2010, 11:09) *
Очевидно Вы не видели даташит на at91sam9g45 - там появился dma контроллер с поддержкой scatter/gather.

Никаких проблем не вызвает прямое использование - даже наоборот.


Не появился, а есть в at91sam9g45 другой DMA с цепочечной обработкой. Но он сидит на AHB будет занят на диски и звук и вы точно к нему не подступитесь ибо он будет слишком плотно использоваться драйверами линукса.
Вы и выбрали для прямой работы PDC потому что он не такой востребованный и его можно попытаться исключить из использования в драйверах.
При этом все равно получаете дикую головную боль когда Atmel захочет апгрейдить свои драйвера под линукс.

В дальнейшем предлагаю ссылаться на первоисточник:
http://www.atmel.com/dyn/resources/prod_do...nts/doc6438.pdf, а не на предположения о том что я не читал или не читал. wink.gif
Go to the top of the page
 
+Quote Post
stas17
сообщение Aug 18 2010, 09:22
Сообщение #10


Участник
*

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



Цитата(winner @ Aug 17 2010, 18:23) *
Если кратко - уберите описание ресурсов нужного интерфейса в ядре и работайте с ним напрямую, сконфигурировав под свою задачу - у Атмел куча примеров, думаю найдете и для slave spi. По крайней мере у at91sam9260 два интерфейса - я так и делал, только мне нужно было в режиме master - с одним работал как обычно через api ядра (вернее не я а драйвер dataflash) а другой использовал в своих целях программируя напрямую - ставил свой обработчик прерываний и перекидывал данные используя pdc.


У Атмела есть и slave и master SPI, но вопрос в другом: насколько я понимаю линукс по умолчанию является Master и как из него сделать Slave я не знаю...


Цитата(winner @ Aug 17 2010, 18:23) *
В Вашем случае похоже Вы сами не знаете что нужно - я ничего посоветовать не могу - что делать с полученные данными если юзерспейс их не успел прочитать, какой величины иметь буфер, с какой частотой идут блоки данных, нужно данные обрабатывать или сразу на внешнее устройство скидывать, как организованы данные - обособленные блоки или просто непрерывный поток и для юзерспейс неважно где начало а где конец блока. и тд.



Вообще, это будет прибор для поверхностного контроля, т.е. если прибор начал работу и сразу же собирает данные. На FPGA сформирован небольшой буфер и когда формируется пакет, то FPGA должна посылать запрос линуксу о принятии пакета. В линуксе данные выводятся на экран...

Цитата(winner @ Aug 17 2010, 20:41) *
Трудности всегда присутствуют когда начинаешь с нуля, но в linux драйверы писать одно удовольствие smile.gif нужно просто понимать что делаешь. Если ldd читать времени нет - вот галопом по европам:
http://opennet.ru/docs/RUS/lkmpg26/
Вот то что в любом случае Вам понадобится для работы с dma
http://free-electrons.com/doc/dma.pdf
Вообще тут http://free-electrons.com/docs/ много информации в доступной форме в виде слайдов, для ознакомления и получения ориентира весьма неплохо.


спасибо, сейчас буду изучать)

Цитата(winner @ Aug 18 2010, 11:09) *
По большому счету я согласен - в linux нужно понимать что делаешь, здесь не прокатывает тупое кликанье мышью. К счастью.


Я согласен, что у меня сейчас в 100 раз больше вопросов, чем ответов, но а разве может быть по-другому в начале изучения чего-то серьезного?
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 18 2010, 10:01
Сообщение #11


Участник
*

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



Цитата(AlexandrY @ Aug 18 2010, 13:13) *
Не появился, а есть в at91sam9g45 другой DMA с цепочечной обработкой. Но он сидит на AHB будет занят на диски и звук и вы точно к нему не подступитесь ибо он будет слишком плотно использоваться драйверами линукса.


При поверхностном осмотре - все дрйверы для g45 теже самые что и для младших контроллеров, по крайней мере чтобы использовать dma контроллер есть конкретный пункт меню в конфигураторе - всегда можно запретить драйверам лезть к dma.

Цитата
Вы и выбрали для прямой работы PDC потому что он не такой востребованный и его можно попытаться исключить из использования в драйверах.
При этом все равно получаете дикую головную боль когда Atmel захочет апгрейдить свои драйвера под линукс.


Я ничего не выбирал - задача четко не сформулирована, да и мне это не нужно.


Цитата(stas17 @ Aug 18 2010, 13:22) *
У Атмела есть и slave и master SPI, но вопрос в другом: насколько я понимаю линукс по умолчанию является Master и как из него сделать Slave я не знаю...


Да причем тут linux - я говорю о том чтобы написать свой драйвер который будет напрямую работать с spi контроллером миную api ядра для spi - как еще Вам объяснить ?

Цитата(winner @ Aug 18 2010, 13:48) *
как еще Вам объяснить ?


Что такое linux - это ядро предоставляющее некоторый уровень абстракции над железом, то есть любой драйвер должен предоставить функционал в соответствии с требованиями ядра - это простые ф-ции типа открыть, закрыть, прочитать, записать, изменить настройки. Остальным частям ядра не нужно знать как устроено это железо - они вызывают эти функции не напрямую а через api ядра. Так вот никто не мешает вам не использовать api ядра а общаться с контроллером напрямую в своем драйвере - достаточно чтобы ядро не пыталось параллельно с ним работать, для этого и нужно исключить из поля видимости ядра это устройство.
Go to the top of the page
 
+Quote Post
stas17
сообщение Aug 18 2010, 10:08
Сообщение #12


Участник
*

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



Цитата(winner @ Aug 18 2010, 12:48) *
Да причем тут linux - я говорю о том чтобы написать свой драйвер который будет напрямую работать с spi контроллером миную api ядра для spi - как еще Вам объяснить ?


Вы хотите сказать, что если написать такой драйвер, то независимо от режима работы (Master или Slave) все будет зависеть от драйвера(и в драйвере будет прописано кто посылает запросы, а кто на них отвечает)?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 18 2010, 11:02
Сообщение #13


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(stas17 @ Aug 18 2010, 13:08) *
Вы хотите сказать, что если написать такой драйвер, то независимо от режима работы (Master или Slave) все будет зависеть от драйвера(и в драйвере будет прописано кто посылает запросы, а кто на них отвечает)?


Сказано было по существу, что человек не смог совладать с HAL уровнем линукса под SPI с сделал программу напрямую обращающуюся к регистрам периферии.
Это уже не драйвер, а костыль для преодоления границ юзерспейса.
Но и при этом надо тщательно следить чтоб этому костылю не мешали другие драйвера, а главное нет никакой инфы какая достижима производительность с таким решением.
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 18 2010, 11:42
Сообщение #14


Участник
*

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



Цитата(AlexandrY @ Aug 18 2010, 15:02) *
Сказано было по существу, что человек не смог совладать с HAL уровнем линукса под SPI с сделал программу напрямую обращающуюся к регистрам периферии.
Это уже не драйвер, а костыль для преодоления границ юзерспейса.


Перестаньте искажать чужие слова - лучше за своими следите и читайте даташиты иногда прежде чем заявлять что у атмел нет scatter/gather. Я управлял spi напрямую потому что мне нужна была скорость и spi был единственный скоростной интерфейс.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 18 2010, 12:03
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(winner @ Aug 18 2010, 14:42) *
Перестаньте искажать чужие слова - лучше за своими следите и читайте даташиты иногда прежде чем заявлять что у атмел нет scatter/gather. Я управлял spi напрямую потому что мне нужна была скорость и spi был единственный скоростной интерфейс.


Не оговаривается только то, кто ничего не говорит.
Но ваше утверждение, что скорость в линуксе легче достичь отказавшись от драйверов противоречит вашему же утверждению что драйвера писать там очень легко.
Вот что забавно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:54
Рейтинг@Mail.ru


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