Может ли мастер Arduino UNO/MEGA установить SPI SS LOW на нескольких подчиненных устройствах одновременно, если полнодуплексный режим не нужен?

spi

У меня есть компьютер, который последовательно общается с ведущим устройством UNO SPI и, помимо него, с несколькими подчиненными устройствами MEGA. Рабы никогда не переговариваются с хозяином.

Я понимаю, что это нормально и правильно устанавливать SS LOW для выбора одного подчиненного устройства за раз, так что ведущий синхронизирует биты через MOSI к выбранному подчиненному устройству на по тем же фронтам тактового сигнала ведомое устройство отправляет биты ведущему через MISO.

Несколько подчиненных устройств, синхронизирующихся по MISO, могут исказить обратную связь с главным устройством. Но что, если мне все равно? Вместо этого в системе с выдвинутым выводом MISO, к которой даже не подключены провода MISO, что, если ведущий выбирает все подчиненные одновременно, а затем тактирует байт на MOSI с установленным битом, вызывающим одного конкретного подчиненного устройства (из 8 возможно) реагировать на последующие байты? Это намного быстрее, чем ведущий с помощью кода определяет, какой ведомый должен получить сообщение, исходящее от компьютера. ВСЕ ведомые устройства могут проверять ожидаемый бит и игнорировать последующие байты сообщения SPI, если бит CLEAR - в любом случае они в любом случае больше ничего не делают в данный момент.

Что не так в этой идее? Есть ли в UNO или МЕГА проблемы с электроникой, о которых я не думаю? Это сделано? Почему бы и нет?

, 👍1


2 ответа


1

Что не так в этой идее?

Ничего, это вполне возможно. Основным преимуществом является отсутствие нескольких линий SS, уменьшение количества контактов и/или оборудования декодирования.

Основное устройство SPI не знает количества дополнительных устройств SPI и с радостью будет измерять уровень на выводе MISO, что бы вы ему ни дали.

Каждое подустройство SPI не знает, что другие подустройства SPI получают одни и те же байты. Как вы пишете, если первый байт (или любая другая деталь протокола) предписывает игнорировать остальную часть передачи, так и будет.

Есть ли в UNO или МЕГА проблемы с электроникой, о которых я не думаю?

Вам необходимо прочитать техническое описание, чтобы узнать о нагрузке каждого входа вспомогательных устройств SPI и гарантированной мощности каждого выхода основного устройства SPI, то есть SS, SCLK, MOSI. Затем убедитесь, что драйвер может управлять всеми приемниками.

Обычно можно без опасений подключить двузначный номер. Вы пишете, что у вас восемь, так что вперед.

Вы можете оставить выходы MISO дополнительных устройств SPI просто неподключенными. На главном устройстве SPI убедитесь, что на его входе MISO установлен подтягивающий или понижающий резистор.

Это сделано?

У меня нет личного опыта или примера, но я уверен, что это сделано.

Почему бы и нет?

Когда вам действительно нужны ответы от дополнительных устройств SPI, вам нужно сделать это по-другому. Однако даже в этом случае вы можете объединить все выходы MISO дополнительных устройств SPI с помощью умной цифровой логики.


Примечание. Я предпочитаю "main" и «sub», которые по-прежнему соответствуют аббревиатурам вместо старых терминов прошлого века.

,

1

Электронная схема SPI работает следующим образом: когда ведомое устройство не выбрано (т. е. его вывод CS не установлен), его линия MISO будет находиться в трехсостоянии выхода, т. е. она находится в плавающем состоянии с высоким импедансом. состояние, электрическое отключение, это позволяет нескольким устройствам использовать одну и ту же шину MISO. По этой причине вы не можете связать все подчиненные устройства с одним контактом CS, поскольку все выходы MISO устройств будут активированы.

Если вас не волнует синхронизация данных MISO с ведомых устройств, просто не подключайте вывод MISO к шине.

,

*try-state* -> Три состояния (как в 3 состояниях). В остальном я с вами согласен., @Nick Gammon

Опс. Спасибо что подметил это., @hcheung