Проблема с выводом MISO в SPI

У меня есть интерфейс SD-карты и ADS1262 (модуль АЦП) с мегаплатой Arduino и общий контакт управления SPI, то есть SCK, MISO и MOSI. Я обнаружил, что SD-карта не инициализируется, а ADS1262 выдает мусорное значение. Теперь, если я удалю контакт MISO с SD-карты, ADS1262 даст правильный ответ (хотя SD-карта не инициализируется). И наоборот, если я удалю вывод MISO из ADS1262, SD-карта инициализируется и работает отлично (хотя ADS1262 выдает мусорное значение).

Конечно, существует проблема с PIN-кодом MISO. Как я могу использовать PIN-код MISO для обоих подчиненных устройств, чтобы оба могли работать правильно.

Пожалуйста, прокомментируйте.

Я использую переключатель — TXS0108E.

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

Из приведенного выше результата я думаю, что это может быть проблема с выводом MISO.

Я не понимаю, как решить проблему с интерфейсом SPI на нескольких подчиненных устройствах.

Схема:

, 👍1

Обсуждение

Покажите, пожалуйста, как вы все подключили. Особенно контакты CS и TXS0108E., @Gerben

Возможно, TXS0108 мешает работе шины SPI. MISO должен находиться в режиме высокого импеданса на всех неактивных устройствах — TXS может этого не делать. Вам нужно принудительно включить его, удерживая OE LOW, когда TFT не используется. Подключите его к выводу CS TFT через вентиль NOT или используйте второй вывод ввода-вывода и установите его напротив вывода CS TFT., @Majenko

Кроме того, SD-карты, как известно, плохо используют шину SPI. Попробуйте разные SD-карты., @Majenko

См. раздел Как использовать SPI на Arduino?. Из вашего теперь удаленного комментария: *ожидается, что все остальные устройства будут иметь линию MISO в третьем состоянии* - другими словами, вход (высокий импеданс). Первое состояние — выход+высокий уровень, второе состояние — выход+низкий уровень, третье состояние — вход., @Nick Gammon

Привет, Ник, я понял, что все остальные устройства должны иметь линию MISO в третьем состоянии, но я не понимаю логики того, как я могу перевести линию MISO неактивного устройства в третье состояние. TFT и SD-карта работают на TXS0108E, а ADS1262 работает напрямую от 5 В. У меня еще есть много выводов ввода-вывода, поэтому лучше использовать вывод IO, чтобы перевести вывод MISO в третье состояние, если там есть какая-либо логика., @ecaits


2 ответа


1

Возможно, вы захотите использовать две шины SPI. Если вам абсолютно необходимо использовать одну шину, подключите цифровой выход к каждому из контактов CS: один на 1262 и один на SD-карте. Когда вам нужно поговорить с одним из устройств, потяните его линию CS на низкий уровень, чтобы включить его.

,

Я подключаю ADS1262, SD-карту и TFT к Arduino Mega. При этом я разделяю все три линии спинов, то есть мисо, моси и скк. Все три подчиненных устройства имеют индивидуальную линию CS. Но только, TFT работает нормально, ads1262 выдаёт мусорное значение и сд карта не инициализируется, Хотя по отдельности каждый слейв работает нормально. Я протестировал два подчиненных устройства с Arduino Mega (вместо всех трех подчиненных устройств) и нашел результат таблицы, приведенной выше. Если я удалю контакт мисо с одного подчиненного устройства, другое подчиненное устройство будет работать нормально, и наоборот. Так что это чисто базовая проблема. но я не понимаю, как решить проблему., @ecaits

Вы вскользь упоминаете, что пользуетесь переключателем, но не говорите, что и куда вы переключаете. Полная схема всей части SPI вашего проекта *требуется*., @Majenko


0

Некоторые модули SD-карт, в которых используются переключатели логических уровней 5–3,3 В, могут не иметь подходящей схемы, которая очень хорошо объяснена в блоге этого парня.

http://www.vishnumaiea.in/projects/hardware/interfacing -catalex-micro-sd-модуль

поэтому, пока вы не внесете некоторые изменения в модуль SD-карты, вы не сможете иметь несколько подчиненных устройств на вашей SPI-шине.

,