Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использовать ли аппаратный CS в SPI в AVR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
-=Женек=-
Предположим у меня несколько SPI устройств на шине. Одного CS естественно не хватает. Остальные нужно будет на пинах мутить.
Не возникнет ли проблем, если одним CS управлять аппаратно, а остальными программно?

Я раньше по незнанию всегда вручную дергал CS подчиненного устройства, а недавно в одной из тем форума увидел упрек кому-то, что мол почему аппаратный CS не используете.

Может быть мои вопросы кому-то покажутся странными - просто в данный момент развожу плату и возник вопрос - в случае с несколькими подчиненными устройствами на шине SPI использовать ли для какого-нибудь из них аппаратный CS или лучше все под одну гребенку - дергать вручную? Не хочется столкнуться с проблемами, когда плата уже будет готова.

P.S. Шина организована в виде звезды, вариант с Daisy Chain не устраивает.
Itch
а у AVR разве есть аппаратный CS в режиме мастера?
Насколько я знаю, он всегда как вход. Если в режиме мастера дернуть CS извне, то возникнет ошибка и SPI отрубится (типа мультимастер)
V_G
Сигнал называется не CS, а SS (Slave Select). Если ваш проц работает единственным мастером, конфигурируйте эту ногу выходом и дергайте программно для какого-нибудь слейва, как и все остальные CS для других. Аппаратно его за вас никто дергать не будет.
-=Женек=-
Тогда я все-таки не пойму - в чем заключается аппаратность этого вывода?

Не будет ли он "шалить", когда я буду отправлять данные для остальных слейвов, программно дергая ихние CS, а про SS забыв?
Itch
Цитата(-=Женек=- @ Dec 5 2010, 05:27) *
Тогда я все-таки не пойму - в чем заключается аппаратность этого вывода?

аппаратность проявляется, когда он сконфигурирован как вход. в режиме слэйв прием без его дерганья впринципе невозможен, в режиме мастера это вызывает ошибку.
Цитата
Не будет ли он "шалить", когда я буду отправлять данные для остальных слейвов, программно дергая ихние CS, а про SS забыв?

нет. сам дергаться не будет
-=Женек=-
Цитата
аппаратность проявляется, когда он сконфигурирован как вход. в режиме слэйв прием без его дерганья впринципе невозможен, в режиме мастера это вызывает ошибку.


Минуточку. Я хочу использовать режим мастер.
Допустим от аппаратного SS у меня дорожка разведена к одному из ведомых.
Я хочу сконфигурировать ее как выход и дергать ее программно.

Не получится?
777777
Цитата(-=Женек=- @ Dec 5 2010, 13:15) *
Минуточку. Я хочу использовать режим мастер.
Допустим от аппаратного SS у меня дорожка разведена к одному из ведомых.
Я хочу сконфигурировать ее как выход и дергать ее программно.

Не получится?

Нет конечно. А какой SS ты подключишь на остальные ведомые? Как контроллер SPI узнает какой из них включать? Как уже написали, SS имеет смысл только для ведомого. У ведущего ты можешь использовать для этих целей любые другие выводы любых других портов. И разумеется устанавливать их программно перед тем, как начать передачу по SPI.
V_G
Получится. Режим мастер, SS сконфигуририован как выход и в этом смысле аналогичен "любым другим выводам любых других портов". Так что для одного из слейвов - SS, для остальных - любые другие. Все дергаем также аналогично, в смысле программно.
У меня работает на Atmega32, Atxmega32A4
-=Женек=-
Значит, еще раз для тупых - SS оставить в воздухе, это вывод потерянный, так?
Или я все же могу сконфигурировать его как выход и управлять скажем светодиодом? ОДновременно используя аппаратный SPI.

Цитата
Получится. Режим мастер, SS сконфигуририован как выход и в этом смысле аналогичен "любым другим выводам любых других портов". Так что для одного из слейвов - SS, для остальных - любые другие. Все дергаем также аналогично, в смысле программно.
У меня работает на Atmega32, Atxmega32A4


Мнения ученых разошлись...

Короче говоря, будет ли работать такой код?

Код
InitSPI();//настройка SPI
DDRB.4=1; //настройка CS на выход
PORTB.4=1;//настройка CS на выкл


PORTB.4=0; //выбираем ведомого
SendSPI(байт);// посылаем байт
PORTB.4=1;// говорим до свиданья ведомому
Sergey_Aleksandrovi4
Код
InitSPI();//настройка SPI
DDRB.4=1; //настройка CS на выход
PORTB.4=1;//настройка CS на выкл


PORTB.4=0; //выбираем ведомого
SendSPI(байт);// посылаем байт
PORTB.4=1;// говорим до свиданья ведомому


Код работать будет. Для SPI в режиме Master этот вывод функционирует как обычный GPIO: хоть слэйвом управляйте, хоть светодиодом моргайте, хоть кнопку на него повесьте. Он ни разу не "потерян")
demiurg_spb
Цитата(-=Женек=- @ Dec 5 2010, 13:15) *
Минуточку. Я хочу использовать режим мастер.
Допустим от аппаратного SS у меня дорожка разведена к одному из ведомых.
Я хочу сконфигурировать ее как выход и дергать ее программно.

Не получится?
Получтся. Это очень хороший тон по возможности использовать SS как выход чтобы не было нужды инитить его вхолостую (все GPIO - входы после ресета и если забыть про висящий в воздухе SS можно получить танцы с бубном).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.