А как на уровне ядра такое сделать? В линуксе просто нет поддержки слейва. А полноценный свой слейв драйвер написать не умею. Из юзерспейс, думаю, получится медленно. Мне нужно от мастера на шине получать 16битные данные на достатачно большой скорости и складывать в буфер не теряя данные.
Как быть теперь незнаю. Без ос все решается просто работой с регистрами и по прерываниям. Неужели в линукс нет решения.
работая с линукс все время боюсь того что принимая какие либоданные с внешних устройств линукс просто не будет успевать забирать данные ввиду того, что это не ртос. Как обычно решаются такие задачи?
нельзя так делать на уровне драйвера ядра! почитайте (или погуглите) how to make linux driver и сразу делайте поправку на версию ядра с которой собираетесь работать..
Саша (sasamy) написал несколько версий видеодрайвера с интерфейсом на SPI - покопайте форум, там есть длиннющий тред.. есть несколько веток о spidev (имхо для отладки сгодится)..
хм.. в зависимости от поставленного ТЗ.. квитирование, контрольные суммы, фидбек.. на уровне физического протокола, транспортного, высокоуровневой логики передачи данных..
можно влепить однокристалку или ФПГА с огромным буфером, куда извне будут валится данные, а АРМ неспешно будет отгребать.. реализаций вагон, осталось найти - кто будет писать поддержку этого богатства..
Примеры это хорошо, да все они для мастера(драйвера от Саши тоже)
Ладно, буду думать.
По поводу успевания забирать данные:
А если в самом драйвере огромный буфер сделать? Фпга ставить совсем не охота.
коллега на одном из форумов сказал что из драйвера можно достучаться до регистров по стандартным адресам и не нужно никаких дополнительных телодвижений как в юзерспейс.
Было бы здорово если так оно и есть для атмеловского арма.
можете взять за основу этот драйвер http://www.at91.com/samphpbb/viewtopic.php?f=12&t=18204
там надо убрать инициалиацию lcd и все что касается фреймбуфера и вместо мастера настроить на слейв - это мало будет отличатся от того что вы делали в standalone, единственно - непонятно как быть с непрерывным приемом - у atmel нет scatter/gather dma на spi, есть только pdc c двумя указателями но их помоему не получится настроить так что после перывания по заполнению одного буфера интерфейс продолжал заполнять следующий буфер без вмешательства процессора.