Jump to content
    

AT91RM9200 SPI Peripheral Mode

Кто-нибудь использовал более одного 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?

Буду очень благодарна!

Share this post


Link to post
Share on other sites

Для того чтобы ответить на Ваши вопросы, желательно знать конфигурацию аппаратной части: что именно планируется повесить на SPI, какие будут потоки/объемы данных и т.п.

Например, SPI в Variable Peripheral Mode с использованием PDC очень удачно подходит для работы с ЦАП/АЦП, но работать с памятью будет неудобно.

Share this post


Link to post
Share on other sites

Кто-нибудь использовал более одного Slave-устройства на шине SPI? Какой режим переключения между периферийными устройствами лучше использовать? И возможно ли вообще использовать Fixed Peripheral Mode? Чем грозит вот этот пункт из Errata Sheet?

 

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

 

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

Буду очень благодарна!

 

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

Пользую ПДП, переключаю адрес только после окончания обмена. Никаких проблем не заметил.

 

Пример- это сложнее, у меня идет поток с возможностью вставки стороннего запроса от других задач, наворочено чуть, может испугать. :)

А так- ничего сложного. Загоняешь в PDC и далее ждешь прерывания по окончанию запроса.

Нюанс- если быстро подряд послать два запроса к одному и тому же адресу, то может не устанавливать CS в "1" между этими запросами. Каким-то устройствам это может быть критично. В таких случаях я вставлял принудительный таймаут.

Share this post


Link to post
Share on other sites

Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает.

Share this post


Link to post
Share on other sites

Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает.

Кстати, из личного опыта. Если одновременно активно работаете с SPI PDC и пользуете аппаратный ТWI, то не пугайтесь, если TWI зависнет. Я напоролся на глюки TWI именно когда стал гонять безостановочный поток запросов-ответов по SPI. Вылечилось отказом от аппаратного TWI и заменой его софтовым.

Share this post


Link to post
Share on other sites

у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ?

 

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

Share this post


Link to post
Share on other sites

у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ?

 

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

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

Никаких проблем не заметил.

Share this post


Link to post
Share on other sites

Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS.

Никаких проблем не заметил.

я тоже с Npcs0 автоматически гружусь (at45db011) :)

попробуй оттудова чё-нить считать или записать

уверен, что аппаратным SPI не получится, токо софтверно :(

 

если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 :help:

а то npcs 1,2,3 -работают у меня, а 0 - нет...

 

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

Edited by romashko

Share this post


Link to post
Share on other sites

я тоже с Npcs0 автоматически гружусь (at45db011) :)

попробуй оттудова чё-нить считать или записать

уверен, что аппаратным SPI не получится, токо софтверно :(

 

если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 :help:

а то npcs 1,2,3 -работают у меня, а 0 - нет...

 

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

Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь?

Или у тебя весь код программы в внутреннюю RAM лезет? Счастливый :)

Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. И все великолепно работает. Ну и конечно потом пишу-читаю всякую всячину из этой же памяти.

Хм. Хотя нет, у меня не так просто. Я сразу дешифратор адреса SPI включаю, чтобы остальная периферия не хулиганила. Так что да, напрямую на npcs0 у меня ничего не висит, таких простых систем не было. :-)

Так что может кто другой напрямую опровергнет твое в высшей мере спорное утверждение о неработоспособности npcs0. У меня оно работает, но в режиме с вкл.дешифратором, другие варианты не проверял.

Share this post


Link to post
Share on other sites

Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь?

Работает!

 

Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же.

и у меня также :)

 

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

 

а я на NPCS0 вешал ММС-карточку - нифига не работает!!! Проверил на npcs1,2,3 - работает

Share this post


Link to post
Share on other sites

мне нужно чтобы мой прошивальщик шил датафлеш. По npcs0 не шьёт, перекидываю временно на npcs1

могу шить флеш по npcs0, но софтварно

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...