roboforum.ru

Технический форум по робототехнике.
Текущее время: 10 апр 2025, 19:22

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: SPI slave + DMA
СообщениеДобавлено: 22 ноя 2011, 12:50 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Как правильно сконфигурировать SPI для работы слэйвом через DMA?

Я написал драйвер SPI с DMA для Linux. За основу был взят spi_s3c24xx.c, и работа по прерываниям заменена на DMA, и при запросе на чтение сразу возврат (мне нужна только запись). Все работает нормально. Но мне нужно чтобы SPI был слэйвом. В иницализации SPI убрал бит MSTR, и настройку nSS на выход. Теперь после запуска DMA прерывание от него не генерируется. Пробовал nSS притягивать к земле. Код драйвера в прицепе. Что я делаю не так?


Вложения:
spi_s3c24xx_dma.c [10.89 КиБ]
Скачиваний: 538

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 22 ноя 2011, 18:56 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Нашел пару косяков в своем коде (неправильно устанавливал режим пинов) и в патче, который применял для активизации SPI (не прописан пин CS в описании драйвера). Проблему это не решило

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 24 ноя 2011, 02:04 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
.zip Архивы с робофорума только у меня битые??? или отстал от жизни и новую версию архиватора пропустил?

А кто мастер в системе?

Идеи на вскидку:
Если есть возможность Проверить связку без ОС могут быть косяки или фичи в работе SPI + DMA
Слейв без дма работает?
Проверить конфиг регистры дма, спи или их в системе никто не перезаписал.
Проверить или все конфиг биты стоят, бывают они прячутся по датащиту


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 24 ноя 2011, 08:54 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Вроде нашел бяку. На момент записи байта в регистр данных для SPI в режиме подчиненного, на входе SCK должен быть 0 (использую режим 0, для режимов 2 и 3 подозреваю что должна быть единица). Иначе в регистре SPSTA бит REDY сбрасывается, и при попытке начать передачу возникает коллизия. Похоже что это вообще плохая идея использовать SPI слэйвом. Даже при DMA задержка между окончанием передачи байта и выдачей следующего зависит от кучи факторов, слэйв будет пропускать клок.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 24 ноя 2011, 11:59 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Возможно ты просто что-то делаешь не так. Просто я не уверен, что тут много программистов хотя бы твоего уровня, кто может тебе помочь. По моим оценкам (после весьма поверхностного изучения) все задержки в АРМ-е просчитывамы, т.е. очередь приоритетов и конфликтов с прерываниями и т.д. ясна. На всех шинах реализуемы арбитры и ловцы ошибок. Стесняюсь спросить - ты смотрел примеры кода (для МК такие есть, возможно и для АРМ9 тоже есть?) - там ДМА и в хвост и в гриву....

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 24 ноя 2011, 12:48 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Да примеров DMA и в коде ядра навалом, в том числе и в драйверах специально для S324XX. Разумеется, я их смотрел, не с нуля же я драйвер писал. Я уверен, что проблема именно в том, как работает SPI - потому что при однобайтной транзакции DMA отрабатывает нормально, и генерирует прерывание - но потом бит готовности SPI все время сброшен.
dccharacter писал(а):
все задержки в АРМ-е просчитывамы, т.е. очередь приоритетов и конфликтов с прерываниями и т.д. ясна
Разумеется, просчитывамы. Теоретически. Вот только на практике для того чтобы просчитать все это, надо иметь кучу данных - кто, когда, куда обращается и т.д ----> нереально. Отчетливо видно на осциллографе - если постоянно гнать данные через SPI мастер например из /dev/zero/, то транзакции начинаются почти через равное время, и между байтами почти всегда одинаковые промежутки. А если одновременно с этим, например, видео включить с карты памяти - полный хаос.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 28 ноя 2011, 21:39 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
с картой памяти это понятно, оно тож дма юзает :)

Посмотри приоритет твоего дма потока, ибо не должно оно быть разное если ты выделил отдельный поток дма, разве кто в лине его еще трогает криво либо на время запрещает.

Не знаю как в проце на миньке дма устроено, но класика должна сразу отрабатывать если шина данных не занята

Мож клок SPI понизить, чтоб успевало данные с спи забрать. Или критична пропускная способность?

Посмотреть еще хорошо или СПИ своего буфера маленького не имеет аппаратного, он может помочь не так часто дергать дма, в некоторых контролерах с которыми работал такое есть.

или вводить какой нить хендшек, че мод данные в буфер записаны, шли дальше, если это не с АЦП

Еше мысля в копилку 32 бит архитектура очень не любит работать с 8 битными данными, жует побайтно долго и капризничает иногда


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI slave + DMA
СообщениеДобавлено: 29 ноя 2011, 07:39 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Aseris писал(а):
Посмотри приоритет твоего дма потока, ибо не должно оно быть разное если ты выделил отдельный поток дма, разве кто в лине его еще трогает криво либо на время запрещает.

Чего это не должно? Шина одна, и разделяется между несколькими потоками DMA и процессором. Включаем второй поток DMA - первый реже сможет забирать данные из памяти. Процессор часто обращается к памяти - DMA чаще приходится ждать освобождения шины. Запущено больше процессов - пауза между передачей блоков через DMA непредсказуема.

Проблемы с DMA нет. Есть проблема с SPI. Но я пока забил на это. Проще сделать внешнее устройство слэйвом, и гнать данные блоками, а между блоками проверять готовность девайса.

Добавлено спустя 8 минут 28 секунд:
Aseris писал(а):
или вводить какой нить хендшек, че мод данные в буфер записаны, шли дальше, если это не с АЦП

Так и делаю. Это не АЦП. Это ЦАП :) Суть девайса в том, чтобы забирать данные от мини в свой буфер, а потом выдавать на внешний ЦАП с частотой, независимой от тактовой частоты мини2440. Должен быть стабильный поток, независимо от загрузки мини.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO