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

 
 
 
Reply to this topicStart new topic
> SPI и ARM9 под Линуксом
DenisAlecs
сообщение Sep 8 2009, 05:48
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 25-05-07
Пользователь №: 27 953



Есть устройство в составе которого SAM7 - слэйв (AT91SAM7S256) и ARM9 - мастер под Линуксом (AT91RM9200).
Оба эти процессора взаимодействуют по SPI.
Проблема в том, что при обращени по SPI чаще чем раз в 1,5-2 секунды происходит перемешивание входных и выходных данных...такое ощущение что операционка не успевает отдать буфер приема и начинает туда засовывать данные для передачи...
Вот собственно вся проблема, как решить и в чем дело то?
Go to the top of the page
 
+Quote Post
vmp
сообщение Sep 8 2009, 07:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(DenisAlecs @ Sep 8 2009, 09:48) *
происходит перемешивание входных и выходных данных...

Не работал с линуксом, но есть опыт с SAM9XE. Основные грабли возникают из-за того, что работа PDC (DMA) не обновляет кеш процессора. Поэтому нужно либо сбрасывать кеш вручную, либо располагать буфера, к которым может быть обращение по DMA, в некешируемой памяти.
Как в линуксе - не знаю, надо смотреть исходники драйвера SPI, как они работают (через PDC или нет) и где лежат буфера.
Go to the top of the page
 
+Quote Post
DenisAlecs
сообщение Sep 8 2009, 07:38
Сообщение #3





Группа: Участник
Сообщений: 4
Регистрация: 25-05-07
Пользователь №: 27 953



...да...точно...драйвера посторены именно с использованием DMA, а выделение памяти происходит стандартной функцией ядра kmalloc...
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 8 2009, 16:29
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(DenisAlecs @ Sep 8 2009, 11:38) *
...да...точно...драйвера посторены именно с использованием DMA, а выделение памяти происходит стандартной функцией ядра kmalloc...


Если разработка на уровне ядра - можно выделить некэшируемый буфер (dma_alloc_coherent) и сообщить драйверу spi что буфер уже смапен (is_dma_mapped).
Go to the top of the page
 
+Quote Post
DenisAlecs
сообщение Sep 9 2009, 05:35
Сообщение #5





Группа: Участник
Сообщений: 4
Регистрация: 25-05-07
Пользователь №: 27 953



Цитата(sasamy @ Sep 8 2009, 19:29) *
Если разработка на уровне ядра - можно выделить некэшируемый буфер (dma_alloc_coherent) и сообщить драйверу spi что буфер уже смапен (is_dma_mapped).


в том то и дело что не хотелось бы лезть в ядро...если это конечно возможно...
Go to the top of the page
 
+Quote Post

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

 


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


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