Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91RM9200 SPI Peripheral Mode
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
junkl
Кто-нибудь использовал более одного Slave-устройства на шине SPI? Какой режим переключения между периферийными устройствами лучше использовать? И возможно ли вообще использовать Fixed Peripheral Mode? Чем грозит вот этот пункт из Errata Sheet?
Цитата
14. SPI: No chip select configuration change before end of current transfer
If the SPI is programmed in Master Mode and in Fixed Peripheral Mode, and data is
being sent to a slave, the user has to wait for completion of the transfer before
changing the slave number. Programming a new slave number (PCS) and/or a new
DLYBCS field locks the SPI on the current slave.
Problem Fix/Workaround
The user should use the Variable Peripheral Mode.

В каком случае SPI будет заблокрован? Только если изменить PCS в процессе передачи данных от мастера слэйву?

Может быть, у кого-нибудь есть пример работы со SPI в Variable Peripheral Mode с использованием PDC?
Буду очень благодарна!
aaarrr
Для того чтобы ответить на Ваши вопросы, желательно знать конфигурацию аппаратной части: что именно планируется повесить на SPI, какие будут потоки/объемы данных и т.п.
Например, SPI в Variable Peripheral Mode с использованием PDC очень удачно подходит для работы с ЦАП/АЦП, но работать с памятью будет неудобно.
Ruslan1
Цитата(junkl @ Nov 16 2007, 09:51) *
Кто-нибудь использовал более одного Slave-устройства на шине SPI? Какой режим переключения между периферийными устройствами лучше использовать? И возможно ли вообще использовать Fixed Peripheral Mode? Чем грозит вот этот пункт из Errata Sheet?

В каком случае SPI будет заблокрован? Только если изменить PCS в процессе передачи данных от мастера слэйву?

Может быть, у кого-нибудь есть пример работы со SPI в Variable Peripheral Mode с использованием PDC?
Буду очень благодарна!


Использую 8 слейвов (то есть еще с внешним дешифратором). Именно в указанном тобой режиме. Девайсы разные- АЦП, ЦАП, синтезаторы частоты, DataFlash. С этого же SPI и гружусь.
Пользую ПДП, переключаю адрес только после окончания обмена. Никаких проблем не заметил.

Пример- это сложнее, у меня идет поток с возможностью вставки стороннего запроса от других задач, наворочено чуть, может испугать. smile.gif
А так- ничего сложного. Загоняешь в PDC и далее ждешь прерывания по окончанию запроса.
Нюанс- если быстро подряд послать два запроса к одному и тому же адресу, то может не устанавливать CS в "1" между этими запросами. Каким-то устройствам это может быть критично. В таких случаях я вставлял принудительный таймаут.
junkl
Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает.
Ruslan1
Цитата(junkl @ Nov 24 2007, 22:53) *
Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает.

Кстати, из личного опыта. Если одновременно активно работаете с SPI PDC и пользуете аппаратный ТWI, то не пугайтесь, если TWI зависнет. Я напоролся на глюки TWI именно когда стал гонять безостановочный поток запросов-ответов по SPI. Вылечилось отказом от аппаратного TWI и заменой его софтовым.
romashko
у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ?

у меня он блокируется (повисает в цикле опроса статус-байта). По другим чипселектам работает нормально.
Ruslan1
Цитата(romashko @ Nov 26 2007, 03:09) *
у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ?

у меня он блокируется (повисает в цикле опроса статус-байта). По другим чипселектам работает нормально.

Да, конечно. У меня на нем через дешифратор висит загрузочный DataFlash. То есть при включении его номер (#0) декодируется дешифратором как 14 (0b1110), когда в программе включаю работу с дешифратором, то обращение к нему идет уже как к #14. Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS.
Никаких проблем не заметил.
romashko
Цитата(Ruslan1 @ Nov 26 2007, 16:12) *
Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS.
Никаких проблем не заметил.

я тоже с Npcs0 автоматически гружусь (at45db011) smile.gif
попробуй оттудова чё-нить считать или записать
уверен, что аппаратным SPI не получится, токо софтверно sad.gif

если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 help.gif
а то npcs 1,2,3 -работают у меня, а 0 - нет...

P.S. видать Atmel софтварно с npcs0 грузится...
Ruslan1
Цитата(romashko @ Nov 26 2007, 08:45) *
я тоже с Npcs0 автоматически гружусь (at45db011) smile.gif
попробуй оттудова чё-нить считать или записать
уверен, что аппаратным SPI не получится, токо софтверно sad.gif

если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 help.gif
а то npcs 1,2,3 -работают у меня, а 0 - нет...

P.S. видать Atmel софтварно с npcs0 грузится...

Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь?
Или у тебя весь код программы в внутреннюю RAM лезет? Счастливый smile.gif
Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. И все великолепно работает. Ну и конечно потом пишу-читаю всякую всячину из этой же памяти.
Хм. Хотя нет, у меня не так просто. Я сразу дешифратор адреса SPI включаю, чтобы остальная периферия не хулиганила. Так что да, напрямую на npcs0 у меня ничего не висит, таких простых систем не было. :-)
Так что может кто другой напрямую опровергнет твое в высшей мере спорное утверждение о неработоспособности npcs0. У меня оно работает, но в режиме с вкл.дешифратором, другие варианты не проверял.
romashko
Цитата(Ruslan1 @ Nov 27 2007, 00:07) *
Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь?

Работает!

Цитата(Ruslan1 @ Nov 27 2007, 00:07) *
Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же.

и у меня также smile.gif

Попробуй в какой-нибудь последний сектор загрузочного датафлеша что-нибудь считать/записать!

а я на NPCS0 вешал ММС-карточку - нифига не работает!!! Проверил на npcs1,2,3 - работает
romashko
мне нужно чтобы мой прошивальщик шил датафлеш. По npcs0 не шьёт, перекидываю временно на npcs1
могу шить флеш по npcs0, но софтварно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.