Правильная схема карты Micro SD
Я использую экран карты micro sd с arduino zero, и я не уверен, что использую правильную схему с ним. Это схема, которую я использую прямо сейчас:
Вот и все, что там есть, только конденсатор для питания и подтягивающий резистор для выбора микросхемы. Теги просто поступают в процессор.
Я видел много схем с резисторами, последовательно подключенными к процессору, иногда с подтягивающими резисторами, иногда с выдвижными резисторами...
Я не уверен, что подтягивающий резистор, который я использую, - хорошая идея, и я не уверен в его значении.
Для меня что-то вроде этого имеет больше смысла:
Может ли кто-нибудь научить меня правильной схеме для этого? что лучше и почему?
Прямо сейчас я не очень доволен производительностью гнезда для карт micro SD. Вот почему я хочу его улучшить.
EDIT: Оказывается, я не очень хорошо понял вторую схему, это были просто делители напряжения, чтобы понизить 5v os arduino uno до 3V. Но как насчет подтягивающего резистора МИСО?
@Espada86, 👍3
3 ответа
Согласно спецификации SD - карты:
Когда SD-карта работает в режиме SPI или 1 - битном режиме SD, линии CMD и DATA (DAT0-DAT3) шины SD должны быть подтянуты резисторами 10 Ком. Ведомые устройства также должны иметь подтягивания на всех вышеупомянутых линиях (независимо от того, подключены ли эти линии к хосту), чтобы предотвратить переход SD-карт в неправильное состояние.
В принципе, вам нужно убедиться, что "все выключено" до тех пор, пока Arduino не начнет активно управлять SD-картой. Без них входы SD-карты будут плавающими и делать все, что им нравится, пока Arduino не начнет общаться.
Резисторы, соответствующие сигналам, существуют на самом деле только для того, чтобы увеличить импеданс и предотвратить повреждение при горячей замене карты.
Если у вас есть 5V Arduino, вам потребуется перевод логического уровня. Это отдельная вещь для резисторов. Хотя резисторы подходят для перевода логического уровня UART или simple IO, они не подходят для использования с SD-картой. Это происходит потому, что задействованные тактовые частоты слишком высоки, и резисторы будут искажать сигнал (через фильтрацию нижних частот). Вместо этого требуется активная система преобразования логического уровня, такая как двойное напряжение, вход TTL, буфер или активные переключатели уровня MOSFET.
Есть отличный учебник по Instructables, который я рекомендую прочитать. вот ссылка https://www.instructables.com/Select-SD-Interface-for-ESP32/
Спасибо, что поделились этой ссылкой, она действительно полезна, @Espada86
Есть несколько правил "можно и нельзя" при разработке интерфейса SPI.
Добавьте подтягивающие резисторы к SS или установите SS HIGH для системы с несколькими ведомыми устройствами
SPI — это шинная система. Это означает, что интерфейс может использоваться не только вашим устройством. Поэтому при проектировании интерфейса SPI необходимо учитывать сценарий, в котором используется несколько устройств SPI, и особенно когда некоторые из ведомых устройств не запрограммированы вашей системой.
Без подтягивающего резистора линия SS могла бы быть ни НИЗКОЙ, ни ВЫСОКОЙ, это могло привести к тому, что некоторые устройства на шине могли «услышать» связь по MISO, которая не предназначалась для устройства. Это может объяснить, почему некоторые из экранов Arduino или коммутационных плат с SPI работают, когда используются отдельно, но не работают вместе с другими платами SPI, что приводит к тому, что на некоторых из этих плат отсутствует подтягивающий резистор или пользователь не подключал линии SS. система HIGH в setup()
перед вызовом SPI.begin()
!
Убедитесь, что MISO может иметь три состояния в системе с несколькими подчиненными устройствами
Большинство микросхем SPI находятся в трех состояниях на своем выводе MISO (но есть некоторые микросхемы, требующие дополнительной внешней микросхемы буфера с тремя состояниями), когда их сигнал выбора микросхемы имеет ВЫСОКИЙ уровень. Трехступенчатый означает, что он не является ни ВЫСОКИМ, ни НИЗКИМ (т.е. плавающим) и эффективно отключается. Однако устройство SPI без MISO с тремя состояниями может вызвать потенциальную проблему на шине SPI, к которой подключено несколько устройств SPI. Если MISO не может находиться в трех состояниях, он будет либо ВЫСОКИМ, либо НИЗКИМ, это повлияет на другие устройства, подключенные к той же шине, при получении данных.
Учитывая это, добавлять подтягивающий резистор на линию MISO не рекомендуется.
Записал. Спасибо, @Espada86
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Arduino zero Error: не удается найти устройство CMSIS-DAP
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Как установить атрибуты для SD-файлов?
- Использование SD-адаптера 5 В в системе 3,3 В
- Лучшая практика буферизации для непрерывной записи на SD-карту
- Проблема с открытием нескольких текстовых файлов одновременно/по порядку с использованием <SD.h>
- DFPlayer для записи на SD-карту
Я думаю, что это не очень хорошая идея. На самом деле это делители напряжения от 5В до 3В., @Espada86
@Espada86 Что не очень хорошая идея? А что такое делитель напряжения между 5в и 3в?, @Majenko
Arduino UNO работает с 5V, но SD-разъем работает с 3V. Вот почему они поставили 3 делителя напряжения., @Espada86
@Espada86 Перевод логического уровня-это совершенно отдельный вопрос. Резисторы по-прежнему требуются, даже если у вас есть перевод уровня. А использование резисторов в качестве преобразования логического уровня для SD - карт непрактично-задействованные частоты слишком высоки., @Majenko
После долгих испытаний и исследований кажется, что подтягивающий резистор на мисо - это ключ. Я перепробовал много вещей, и эта-единственная вещь, которая сделала свою работу за меня. Наконец-то мне удалось заставить его работать надежно. Я подумываю о том, чтобы поставить его на каждое подключенное устройство SPI. Как вы думаете, полезно ли ставить подтягивающие резисторы на линии al? Я имею в виду мисо, моси, скк и КС. Или просто мисо?, @Espada86