Настройка nss_soft в Master (SPI)
Я хочу установить вывод NSS в программный режим в мастере, используя Nucleo STM32F103RB. Но у меня есть несколько вопросов?
В справочнике, говорят,
В режиме программного обеспечения NSS установите биты SSM и SSI в регистре SPI_CR1. Если в режиме вывода требуется вывод NSS, должен быть установлен только бит SSOE.
Сейчас,
Почему нам нужно установить бит SSI с SSM?
Какова цель бит SSOE?
1 ответ
Это связано с редко используемым мультимастерным общением.
При настройке с несколькими мастер-сигналами сигнал NSS контролирует доступ к шине SPI. К сожалению, документация по ST немного расплывчата, но, насколько я понимаю,
- Высокий уровень ввода NSS означает, что шина свободна, вам разрешено передавать
- Низкий вход NSS означает, что кто-то другой передает, вы становитесь рабом.
Почему нам нужно установить бит SSI с SSM?
Если SSM
(S oftware S lave M anagement) устанавливается бит в режиме мастера, затем SSI
(S lave S elect I nternal) бит становится источником сигнала NSS вместо вывода. настройка SSI
в 1
позволяет мастеру передавать, устанавливая его 0
делает его рабом (очищает MSTR
немного в CR1
).
Если у вас есть один мастер, просто установите
SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
и не беспокойся об остальном. Это наиболее гибкий способ: вы можете контролировать столько подчиненных устройств, сколько захотите, с помощью выходов GPIO, подключенных к линиям CS отдельно. Вы также можете использовать вывод NSS в качестве GPIO.
Какова цель бит SSOE?
Он изменяет вывод NSS на выход. Первоначально установленный на высокий, он становится низким, когда контроллер начинает передачу (когда DR
регистр пишется). Обратите внимание, что он не будет автоматически становиться снова высоким, когда передача завершена, но путем настройки SPI_CR1_SPE
в 0
,
С помощью SSOE
может быть полезно, когда один ведущий разговаривает с одним ведомым, потому что CS управляется регистрами SPI. Вообще не нужно общаться с периферийным устройством GPIO, нет необходимости загружать его базовый адрес в регистр и сохранять его там, сохраняя некоторые циклы и пару байтов во флэш-памяти, что позволяет использовать регистр для чего-то еще, оптимизирующий компилятор.