Насколько я знаю, передача SPI для ведомого SPI работает следующим образом:
- Мастер выбирает раба, используя пин SS
- Ведущий и ведомый отправляют данные друг другу одновременно
- Мастер запускает часы и передачу данных одновременно (до операции записи нет часов)
- Ведущий останавливает передачу в любое время (останавливая операцию записи и генерацию тактовых импульсов), даже если ведомый имеет больше данных для отправки.
Существует ли какая-либо конфигурация ведомого SPI, которая позволяет ведомому передавать данные без разрешения ведущего?
Я просто думаю вслух. Предположим, что есть только один ведомый, а ведущий обеспечивает непрерывные часы и т. Д.
Даже если предполагаемое утверждение истинно, не теряет ли синхронизация байта ведущий и ведомый (то есть получает поток битов), так как для SPI нет начальных и конечных битов?
Я задаю такой вопрос, потому что я прочитал следующий раздел из этого документа .
2.2 Пример SPI
Прикрепленный пример SPI иллюстрирует использование USART в синхронном режиме. USART1 настроен как подчиненный, а USART2 является главным. Происходят следующие транзакции:
- Передача данных от ведущего к подчиненному.
- Передача данных от ведомого к хозяину.
- Передача данных от ведущего к подчиненному и от подчиненного к ведущему одновременно.
Документ дает пример SPI, но реализует пример с использованием устройств USART. И я понимаю, что ведомый USART может начать передачу без разрешения мастера.
Я не смог найти исходный код, на который ссылается документ.
источник
Ответы:
Нет, с SPI все коммуникации управляются ведущим устройством. Вы правы в том, что мастер не может просто предоставить непрерывные часы; не было бы никакого способа обнаружить границы байтов.
У ведомого устройства часто будет отдельный выходной контакт, чтобы сигнализировать ведущему, что у него есть доступные данные. Этот вывод подключен к входу микроконтроллера и часто используется как прерывание.
Затем устройство может установить контакт, в результате чего микроконтроллер раскручивает шину SPI.
Для получения более подробной информации, пожалуйста, читайте дальше :) Это немного измененная версия объяснения, найденного здесь :
Это описывает общий случай. Могут быть дополнительные сложности. Например, некоторые подчиненные микросхемы фактически выводят какой-либо байт состояния в то же время, когда они получают команду от ведущего. Таким образом, в этом случае мастер не должен сбрасывать первый полученный байт.
источник
Нет, мастер - это тот, кто выбирает чипы и управляет тактовой частотой. Раб всегда будет слушать только часы и микросхемы. Передача данных может быть еще в дуплексном режиме. Существует несколько реализаций, в которых тактовая частота может быть непрерывной, но это не имеет большого значения, так как выбор чипа используется для синхронизации границ байтов в любом случае. Но есть и системы с несколькими хозяевами, поэтому в принципе у вас может быть какой-то механизм, позволяющий устройствам определять, кто является подчиненным и ведущим. Или просто включите отдельный провод «прерывания» для ведомого устройства, чтобы сообщить мастеру, что у него есть пакет данных для ведущего.
источник