|
AT91RM9200 SPI Peripheral Mode, Variable Peripheral Mode или Fixed Peripheral Mode? |
|
|
|
Nov 16 2007, 07:51
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Кто-нибудь использовал более одного 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? Буду очень благодарна!
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Nov 23 2007, 20:49
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(junkl @ Nov 16 2007, 09:51)  Кто-нибудь использовал более одного Slave-устройства на шине SPI? Какой режим переключения между периферийными устройствами лучше использовать? И возможно ли вообще использовать Fixed Peripheral Mode? Чем грозит вот этот пункт из Errata Sheet?
В каком случае SPI будет заблокрован? Только если изменить PCS в процессе передачи данных от мастера слэйву?
Может быть, у кого-нибудь есть пример работы со SPI в Variable Peripheral Mode с использованием PDC? Буду очень благодарна! Использую 8 слейвов (то есть еще с внешним дешифратором). Именно в указанном тобой режиме. Девайсы разные- АЦП, ЦАП, синтезаторы частоты, DataFlash. С этого же SPI и гружусь. Пользую ПДП, переключаю адрес только после окончания обмена. Никаких проблем не заметил. Пример- это сложнее, у меня идет поток с возможностью вставки стороннего запроса от других задач, наворочено чуть, может испугать.  А так- ничего сложного. Загоняешь в PDC и далее ждешь прерывания по окончанию запроса. Нюанс- если быстро подряд послать два запроса к одному и тому же адресу, то может не устанавливать CS в "1" между этими запросами. Каким-то устройствам это может быть критично. В таких случаях я вставлял принудительный таймаут.
|
|
|
|
|
Nov 24 2007, 20:53
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает.
|
|
|
|
|
Nov 26 2007, 06:45
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865

|
Цитата(Ruslan1 @ Nov 26 2007, 16:12)  Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS. Никаких проблем не заметил. я тоже с Npcs0 автоматически гружусь (at45db011)  попробуй оттудова чё-нить считать или записать уверен, что аппаратным SPI не получится, токо софтверно  если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 а то npcs 1,2,3 -работают у меня, а 0 - нет... P.S. видать Atmel софтварно с npcs0 грузится...
Сообщение отредактировал romashko - Nov 26 2007, 06:46
|
|
|
|
|
Nov 26 2007, 14:07
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(romashko @ Nov 26 2007, 08:45)  я тоже с Npcs0 автоматически гружусь (at45db011)  попробуй оттудова чё-нить считать или записать уверен, что аппаратным SPI не получится, токо софтверно  если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 а то npcs 1,2,3 -работают у меня, а 0 - нет... P.S. видать Atmel софтварно с npcs0 грузится... Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь? Или у тебя весь код программы в внутреннюю RAM лезет? Счастливый  Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. И все великолепно работает. Ну и конечно потом пишу-читаю всякую всячину из этой же памяти. Хм. Хотя нет, у меня не так просто. Я сразу дешифратор адреса SPI включаю, чтобы остальная периферия не хулиганила. Так что да, напрямую на npcs0 у меня ничего не висит, таких простых систем не было. :-) Так что может кто другой напрямую опровергнет твое в высшей мере спорное утверждение о неработоспособности npcs0. У меня оно работает, но в режиме с вкл.дешифратором, другие варианты не проверял.
|
|
|
|
|
Nov 27 2007, 01:31
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865

|
Цитата(Ruslan1 @ Nov 27 2007, 00:07)  Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь? Работает! Цитата(Ruslan1 @ Nov 27 2007, 00:07)  Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. и у меня также  Попробуй в какой-нибудь последний сектор загрузочного датафлеша что-нибудь считать/записать! а я на NPCS0 вешал ММС-карточку - нифига не работает!!! Проверил на npcs1,2,3 - работает
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|