Правильная схема карты Micro SD

Я использую экран карты micro sd с arduino zero, и я не уверен, что использую правильную схему с ним. Это схема, которую я использую прямо сейчас:

sd card circuit schematic Вот и все, что там есть, только конденсатор для питания и подтягивающий резистор для выбора микросхемы. Теги просто поступают в процессор.

Я видел много схем с резисторами, последовательно подключенными к процессору, иногда с подтягивающими резисторами, иногда с выдвижными резисторами...

Я не уверен, что подтягивающий резистор, который я использую, - хорошая идея, и я не уверен в его значении.

Для меня что-то вроде этого имеет больше смысла:

Может ли кто-нибудь научить меня правильной схеме для этого? что лучше и почему?

Прямо сейчас я не очень доволен производительностью гнезда для карт micro SD. Вот почему я хочу его улучшить.

EDIT: Оказывается, я не очень хорошо понял вторую схему, это были просто делители напряжения, чтобы понизить 5v os arduino uno до 3V. Но как насчет подтягивающего резистора МИСО?

, 👍3


3 ответа


4

Согласно спецификации SD - карты:

Когда SD-карта работает в режиме SPI или 1 - битном режиме SD, линии CMD и DATA (DAT0-DAT3) шины SD должны быть подтянуты резисторами 10 Ком. Ведомые устройства также должны иметь подтягивания на всех вышеупомянутых линиях (независимо от того, подключены ли эти линии к хосту), чтобы предотвратить переход SD-карт в неправильное состояние.

В принципе, вам нужно убедиться, что "все выключено" до тех пор, пока Arduino не начнет активно управлять SD-картой. Без них входы SD-карты будут плавающими и делать все, что им нравится, пока Arduino не начнет общаться.

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

Если у вас есть 5V Arduino, вам потребуется перевод логического уровня. Это отдельная вещь для резисторов. Хотя резисторы подходят для перевода логического уровня UART или simple IO, они не подходят для использования с SD-картой. Это происходит потому, что задействованные тактовые частоты слишком высоки, и резисторы будут искажать сигнал (через фильтрацию нижних частот). Вместо этого требуется активная система преобразования логического уровня, такая как двойное напряжение, вход TTL, буфер или активные переключатели уровня MOSFET.

,

Я думаю, что это не очень хорошая идея. На самом деле это делители напряжения от 5В до 3В., @Espada86

@Espada86 Что не очень хорошая идея? А что такое делитель напряжения между 5в и 3в?, @Majenko

Arduino UNO работает с 5V, но SD-разъем работает с 3V. Вот почему они поставили 3 делителя напряжения., @Espada86

@Espada86 Перевод логического уровня-это совершенно отдельный вопрос. Резисторы по-прежнему требуются, даже если у вас есть перевод уровня. А использование резисторов в качестве преобразования логического уровня для SD - карт непрактично-задействованные частоты слишком высоки., @Majenko

После долгих испытаний и исследований кажется, что подтягивающий резистор на мисо - это ключ. Я перепробовал много вещей, и эта-единственная вещь, которая сделала свою работу за меня. Наконец-то мне удалось заставить его работать надежно. Я подумываю о том, чтобы поставить его на каждое подключенное устройство SPI. Как вы думаете, полезно ли ставить подтягивающие резисторы на линии al? Я имею в виду мисо, моси, скк и КС. Или просто мисо?, @Espada86


2

Есть отличный учебник по Instructables, который я рекомендую прочитать. вот ссылка https://www.instructables.com/Select-SD-Interface-for-ESP32/

,

Спасибо, что поделились этой ссылкой, она действительно полезна, @Espada86


1

Есть несколько правил "можно и нельзя" при разработке интерфейса 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