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

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


Участник
*

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



Цитата(AlexandrY @ Aug 18 2010, 16:03) *
Не оговаривается только то, кто ничего не говорит.


Иногда лучше молчать smile.gif

Цитата
Но ваше утверждение, что скорость в линуксе легче достичь отказавшись от драйверов противоречит вашему же утверждению что драйвера писать там очень легко.


Ваша нелюбовь ко всему что связано с linux мне известна, но иногда раскрывайте глаза - легкость написания драйверов никак не связана со скоростью работы устроств. С spi так получилось что атмеловский контроллер не поддерживает CS обоих уровней, что для универсальной ОС как linux неприемлемо, поэтому в угоду универсальности атмеловские драйверы написаны далеко не оптимально с точки зрения скорости. Я бы еще закрыл на это глаза но там не оказалось того функционала который предусмотрен ядром linux а у атмел просто не был реализован.
Go to the top of the page
 
+Quote Post
MTh
сообщение Aug 19 2010, 14:40
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Работа с периферией в линуксе через самописный драйвер - не такая сложная задача (на уровне принять отправить)

Автору - посмотрите в сторону SMC - широкая (относительно) шина, сигналы управления (RD, WR, CS)... но на ПЛИСине придется реализовывать ФИФО...
Go to the top of the page
 
+Quote Post
stas17
сообщение Aug 20 2010, 07:26
Сообщение #18


Участник
*

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



Цитата(MTh @ Aug 19 2010, 17:40) *
Автору - посмотрите в сторону SMC - широкая (относительно) шина, сигналы управления (RD, WR, CS)... но на ПЛИСине придется реализовывать ФИФО...

а что это за шина? я пока толкового описания о ней найти не могу....

Сообщение отредактировал stas17 - Aug 20 2010, 07:32
Go to the top of the page
 
+Quote Post
MTh
сообщение Aug 20 2010, 11:10
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



SMC - Static Memory Controller
Загляните в даташит

UPD: SMC был на SAM9260... тут другая... EBI однако smile.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Aug 22 2010, 12:02
Сообщение #20


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



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

У меня тут вопрос возник - как корректно работать с DMA (aka PDC) в юзерспейсе. Ведь DMA требует физический адрес, а в юзерспейсе у нас только виртуальные, да еще принадлежащие контексту конкретного процесса (что значит не в любой момент могут быть физически отображены). Получив буфер от malloc() в юзерспейсе нельзя даже быть уверенным что этот буфер физически непрерывен, а не надерган менеджером памяти из нескольких разнесенных физических страничек В ядре то понятно - получили буфер, конвертнули его в список дескрипторов физических страниц и поехали. Неужто в Линуксе есть API для руления физической памятью из юзерспейса? (Сомнение есть, потому как это хорошая дыра в безопасности)
Go to the top of the page
 
+Quote Post
winner
сообщение Aug 22 2010, 12:45
Сообщение #21


Участник
*

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



Цитата(VslavX @ Aug 22 2010, 16:02) *
У меня тут вопрос возник - как корректно работать с DMA (aka PDC) в юзерспейсе. Ведь DMA требует физический адрес, а в юзерспейсе у нас только виртуальные, да еще принадлежащие контексту конкретного процесса (что значит не в любой момент могут быть физически отображены). Получив буфер от malloc() в юзерспейсе нельзя даже быть уверенным что этот буфер физически непрерывен, а не надерган менеджером памяти из нескольких разнесенных физических страничек В ядре то понятно - получили буфер, конвертнули его в список дескрипторов физических страниц и поехали. Неужто в Линуксе есть API для руления физической памятью из юзерспейса? (Сомнение есть, потому как это хорошая дыра в безопасности)


Честно говоря не могу придумать для чего это все делать в userspace smile.gif я работал на уровне ядра. Мало того что буфер непрерывный, нужно чтобы еще и память была некешируемая иначе в устройство может улететь совсем не то что хочется smile.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Aug 22 2010, 13:06
Сообщение #22


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(winner @ Aug 22 2010, 15:45) *
Честно говоря не могу придумать для чего это все делать в userspace smile.gif я работал на уровне ядра. Мало того что буфер непрерывный, нужно чтобы еще и память была некешируемая иначе в устройство может улететь совсем не то что хочется smile.gif

Ясно, значит меня просто ввела в заблуждение Ваша фраза про "юзерспейс не успеет забрать данные".
Про кеш, то понятно. В некоторых процессорах есть очень зачетная фича - поддержка когерентности кеша и памяти - ядро снупит шину и инвалидирует/флашит кеш при необходимости. В тех же MPC83xx от Фрискейла, например, такое сделано.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 22 2010, 13:13
Сообщение #23


Ally
******

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



Цитата(VslavX @ Aug 22 2010, 16:06) *
В некоторых процессорах есть очень зачетная фича - поддержка когерентности кеша и памяти - ядро снупит шину и инвалидирует/флашит кеш при необходимости. В тех же MPC83xx от Фрискейла, например, такое сделано.


По моему это стандартная фича всех MMU.
В ARM-ах, естественно, такое тоже есть, но далее нюансы.
Надо ли проходить по всем линиям кэша чтобы их очистить либо только по грязным. Второй метод быстрее но есть не во всех ARM-ах.
Помимо кэширования для DMA важно определенное выравнивание, поэтому просто очистка кэша еще не все.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Aug 22 2010, 13:26
Сообщение #24


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(AlexandrY @ Aug 22 2010, 16:13) *
По моему это стандартная фича всех MMU.
В ARM-ах, естественно, такое тоже есть, но далее нюансы.
Надо ли проходить по всем линиям кэша чтобы их очистить либо только по грязным. Второй метод быстрее но есть не во всех ARM-ах.
Помимо кэширования для DMA важно определенное выравнивание, поэтому просто очистка кэша еще не все.

В 83xx это сделано именно на уровне интерфейса ядра с шиной, про кэш и MMU при разработке программы можно вообще не вспоминать - никаких инструкций инвалидации вызывать не надо. Эта фишка вообще стала только недавно появляться и заточена она не столько под DMA как под многопроцессорные системы. Ядро следит за шиной, и если по ней проходит транзакция записи каким-то другим мастером (не данным ядром) и адрес приемника совпадает с закэшированным, то эта строка кэша автоматом инвалидируется. Если же кто-то хочет читать по шине данные, а они еще не записаны из кэша (Writeback кэш, например), то ядро ставит abort/retry, забирает шину, флашит данные из кэша, и отдает шину обратно. Потом жаждущий данных сторонний мастер делает retry и забирает свеженькую информацию. Не думаю что такое возможно на ARM-ах, сейчас тут писк моды Multilayer Bus Matrix - замучается ядро такое снупить. Хотя, может я и не в курсе - АРМы разные бывают.

P.S. Извините за оффтопик.
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:36
Рейтинг@Mail.ru


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