Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI и ARM9 под Линуксом
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
DenisAlecs
Есть устройство в составе которого SAM7 - слэйв (AT91SAM7S256) и ARM9 - мастер под Линуксом (AT91RM9200).
Оба эти процессора взаимодействуют по SPI.
Проблема в том, что при обращени по SPI чаще чем раз в 1,5-2 секунды происходит перемешивание входных и выходных данных...такое ощущение что операционка не успевает отдать буфер приема и начинает туда засовывать данные для передачи...
Вот собственно вся проблема, как решить и в чем дело то?
vmp
Цитата(DenisAlecs @ Sep 8 2009, 09:48) *
происходит перемешивание входных и выходных данных...

Не работал с линуксом, но есть опыт с SAM9XE. Основные грабли возникают из-за того, что работа PDC (DMA) не обновляет кеш процессора. Поэтому нужно либо сбрасывать кеш вручную, либо располагать буфера, к которым может быть обращение по DMA, в некешируемой памяти.
Как в линуксе - не знаю, надо смотреть исходники драйвера SPI, как они работают (через PDC или нет) и где лежат буфера.
DenisAlecs
...да...точно...драйвера посторены именно с использованием DMA, а выделение памяти происходит стандартной функцией ядра kmalloc...
sasamy
Цитата(DenisAlecs @ Sep 8 2009, 11:38) *
...да...точно...драйвера посторены именно с использованием DMA, а выделение памяти происходит стандартной функцией ядра kmalloc...


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


в том то и дело что не хотелось бы лезть в ядро...если это конечно возможно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.