Перейти к содержанию
    

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?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

 

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

 

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

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

 

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

Изменено пользователем romashko

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

 

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Работает!

 

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...