junkl 0 November 16, 2007 Posted November 16, 2007 · Report post Кто-нибудь использовал более одного 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? Буду очень благодарна! Quote Share this post Link to post Share on other sites More sharing options...
aaarrr 70 November 16, 2007 Posted November 16, 2007 · Report post Для того чтобы ответить на Ваши вопросы, желательно знать конфигурацию аппаратной части: что именно планируется повесить на SPI, какие будут потоки/объемы данных и т.п. Например, SPI в Variable Peripheral Mode с использованием PDC очень удачно подходит для работы с ЦАП/АЦП, но работать с памятью будет неудобно. Quote Share this post Link to post Share on other sites More sharing options...
Ruslan1 23 November 23, 2007 Posted November 23, 2007 · Report post Кто-нибудь использовал более одного Slave-устройства на шине SPI? Какой режим переключения между периферийными устройствами лучше использовать? И возможно ли вообще использовать Fixed Peripheral Mode? Чем грозит вот этот пункт из Errata Sheet? В каком случае SPI будет заблокрован? Только если изменить PCS в процессе передачи данных от мастера слэйву? Может быть, у кого-нибудь есть пример работы со SPI в Variable Peripheral Mode с использованием PDC? Буду очень благодарна! Использую 8 слейвов (то есть еще с внешним дешифратором). Именно в указанном тобой режиме. Девайсы разные- АЦП, ЦАП, синтезаторы частоты, DataFlash. С этого же SPI и гружусь. Пользую ПДП, переключаю адрес только после окончания обмена. Никаких проблем не заметил. Пример- это сложнее, у меня идет поток с возможностью вставки стороннего запроса от других задач, наворочено чуть, может испугать. :) А так- ничего сложного. Загоняешь в PDC и далее ждешь прерывания по окончанию запроса. Нюанс- если быстро подряд послать два запроса к одному и тому же адресу, то может не устанавливать CS в "1" между этими запросами. Каким-то устройствам это может быть критично. В таких случаях я вставлял принудительный таймаут. Quote Share this post Link to post Share on other sites More sharing options...
junkl 0 November 24, 2007 Posted November 24, 2007 · Report post Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает. Quote Share this post Link to post Share on other sites More sharing options...
Ruslan1 23 November 25, 2007 Posted November 25, 2007 · Report post Большое спасибо. У меня всего два устройства: DataFlash и температурный датчик. Вроде бы разобралась: использую Fixed Peripheral Mode и PDC, также как и вы переключаю адрес только после окончания обмена. Все работает. Кстати, из личного опыта. Если одновременно активно работаете с SPI PDC и пользуете аппаратный ТWI, то не пугайтесь, если TWI зависнет. Я напоролся на глюки TWI именно когда стал гонять безостановочный поток запросов-ответов по SPI. Вылечилось отказом от аппаратного TWI и заменой его софтовым. Quote Share this post Link to post Share on other sites More sharing options...
romashko 0 November 26, 2007 Posted November 26, 2007 · Report post у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ? у меня он блокируется (повисает в цикле опроса статус-байта). По другим чипселектам работает нормально. Quote Share this post Link to post Share on other sites More sharing options...
Ruslan1 23 November 26, 2007 Posted November 26, 2007 · Report post у кого-нить на сабжевом контроллере удавалось задействовать АППАРАТНЫЙ SPI с ножкой npcs0 ? у меня он блокируется (повисает в цикле опроса статус-байта). По другим чипселектам работает нормально. Да, конечно. У меня на нем через дешифратор висит загрузочный DataFlash. То есть при включении его номер (#0) декодируется дешифратором как 14 (0b1110), когда в программе включаю работу с дешифратором, то обращение к нему идет уже как к #14. Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS. Никаких проблем не заметил. Quote Share this post Link to post Share on other sites More sharing options...
romashko 0 November 26, 2007 Posted November 26, 2007 (edited) · Report post Ну и конечно при работе с дешифратором NPCS0 участвует в формировании остальных CS. Никаких проблем не заметил. я тоже с Npcs0 автоматически гружусь (at45db011) :) попробуй оттудова чё-нить считать или записать уверен, что аппаратным SPI не получится, токо софтверно :( если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 а то npcs 1,2,3 -работают у меня, а 0 - нет... P.S. видать Atmel софтварно с npcs0 грузится... Edited November 26, 2007 by romashko Quote Share this post Link to post Share on other sites More sharing options...
Ruslan1 23 November 26, 2007 Posted November 26, 2007 · Report post я тоже с Npcs0 автоматически гружусь (at45db011) :) попробуй оттудова чё-нить считать или записать уверен, что аппаратным SPI не получится, токо софтверно :( если я не прав, то приаттачь плиз фрагмент кода, работающий с npcs0 rm9200 а то npcs 1,2,3 -работают у меня, а 0 - нет... P.S. видать Atmel софтварно с npcs0 грузится... Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь? Или у тебя весь код программы в внутреннюю RAM лезет? Счастливый :) Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. И все великолепно работает. Ну и конечно потом пишу-читаю всякую всячину из этой же памяти. Хм. Хотя нет, у меня не так просто. Я сразу дешифратор адреса SPI включаю, чтобы остальная периферия не хулиганила. Так что да, напрямую на npcs0 у меня ничего не висит, таких простых систем не было. :-) Так что может кто другой напрямую опровергнет твое в высшей мере спорное утверждение о неработоспособности npcs0. У меня оно работает, но в режиме с вкл.дешифратором, другие варианты не проверял. Quote Share this post Link to post Share on other sites More sharing options...
romashko 0 November 27, 2007 Posted November 27, 2007 · Report post Что-то я тебя не понял. Ты грузишься, но у тебя не работает? А как тогда ты код загружаешь? Работает! Обычно у народа сначала автоматом грузится маленький кусок программы, который производит как минимум тестирование и настройку для загрузки основной части кода (например, SDRAM). Дальше уже эта программка загружает основной код, и передает на него управление. У меня точно так же. и у меня также :) Попробуй в какой-нибудь последний сектор загрузочного датафлеша что-нибудь считать/записать! а я на NPCS0 вешал ММС-карточку - нифига не работает!!! Проверил на npcs1,2,3 - работает Quote Share this post Link to post Share on other sites More sharing options...
romashko 0 November 27, 2007 Posted November 27, 2007 · Report post мне нужно чтобы мой прошивальщик шил датафлеш. По npcs0 не шьёт, перекидываю временно на npcs1 могу шить флеш по npcs0, но софтварно Quote Share this post Link to post Share on other sites More sharing options...