Первый модуль я паял сам — не из жадности, а из спешки: голый переходник microSD стоил как проездной, а на форуме лежала схема с делителями. Собрал за вечер — и карта молчала. Разбор занял неделю: я поставил делитель на MOSI и на CS, а про SCK забыл совсем. Линия тактов прилетала карте всеми пятью вольтами, контроллер уходил в отказ молча, без единой жалобы в Serial. Классика жанра: исправить одну ошибку монтажа и получить вторую.
Эта история — лучший вход в тему уровней. Карта внутри трёхвольтовая: питается 2,7–3,6 В, и её входы рассчитаны максимум на питание плюс небольшие десятые доли. Пять вольт с пинов Uno для них — передозировка, причём не всегда мгновенная: карта может пару дней отработать и умереть, а может отказаться стартовать сразу. Разбираемся, что где согласуется, зачем на дешёвых модулях делители 1 кОм плюс 2 кОм, почему MISO ходит напрямую и где граница применимости у каждого способа.
Роли линий SPI мы подробно проходили в уроке про SPI-распиновку, устройство типового модуля с буфером — в уроке про устройство модуля. Здесь добираем арифметику уровней до конца: формула делителя, пороги логики с условиями и случай, когда делителей становится мало.
Почему 5 В на карте лишние
Считаем от паспорта. Голой карте нужно 2,7–3,6 В питания, и сигнальные входы MOSI, SCK, CS рассчитаны примерно на тот же потолок: 5 В — выход за абсолютный максимум даташита. Внутри входа обычно сидит защитный диод на цепь питания: лишний вольт утекает в 3,3 В и греет кристалл. Один импульс — ничего, месяц работы — тихая деградация, а иногда и разовая смерть, если защита слабая. Предсказать, какой режим достанется вашей карте, нельзя, поэтому правило железное: пять вольт на сигналы трёхвольтовой карты не подают. Из моей коробки запчастей: карты, пожившие месяц на пяти вольтах без согласования, работали неделями, а потом начинали врать в ответах — спишешь на брак, а виноваты уровни.
Обратное направление честнее. Uno выдаёт пять вольт, но читает по порогу: чтобы увидеть HIGH, входу ATmega нужно минимум 0,6 от питания — при 5 В это ровно 3,0 В. Карта отдаёт на MISO свои 3,3 В — выше порога на треть вольта, стабильно, поэтому линия ходит на пин 12 напрямую, без всяких резисторов. Делитель на MISO — не защита, а вредительство: он порезал бы и так небольшие 3,3 В до 2,2, и Uno перестала бы слышать ответы.
Что стоит на модуле: буфер и делители
Теперь модули. Приличный вариант — транслятор на микросхеме: 74LVC125A, встречаются платы с MAX1601 и похожими трансливаторами, питание карты раздаёт стабилизатор AMS1117-3.3. Буфер умеет главное, чего не умеет резистор: по сигналу CS его выходы переходят в высокоимпедансное состояние и шину отпускают. Для одиночного модуля разница невидима, для шины с соседями — фундамент, и к этому мы вернёмся ниже.
Дешёвый вариант — тот самый, с делителями: MOSI, SCK и CS, каждая линия через 1 кОм сверху и 2 кОм снизу. Арифметика делителя из урока про расчёт делителя: пять вольт умножить на 2 кОм и разделить на 3 кОм — 3,33 В. Точнее некуда: карта видит почти свои родные 3,3 В. Учтите и постоянный расход: через делитель на линии с HIGH всё время течёт около 1,7 мА — для логгера на батарейке это аргумент за модуль с буфером. Номиналы можно варьировать: 4,7 кОм и 10 кОм дадут 3,4 В, тоже в допуске, — главное держать соотношение два к одному и не задирать сопротивления выше десятков килоом, иначе фронты растянутся и на 8 МГц шины полезут сбои. Полоски на резисторах, если вдруг подзабыли, расшифровываются по уроку про цветовой код.
Проверить делитель до подключения карты — дело пяти минут. Подайте на линию HIGH и LOW с Uno и меряйте середину делителя мультиметром или аналоговым пином: HIGH должен дать около 3,3 В, LOW — около нуля. Скетч ниже делает именно это: пин 10 изображает линию, A0 смотрит на середину. Если стенд показывает правильные уровни, а карта всё равно молчит, дальше включайте методику из урока про диагностику begin. Номиналы для стенда берите те же, что стоят на модуле: проверять нужно именно вашу связку, а не абстрактный делитель из учебника.
| Линия | Куда идёт | Согласование на дешёвом модуле | Без согласования |
|---|---|---|---|
| MOSI | Uno → карта | делитель 1 кОм + 2 кОм, на карте 3,33 В | 5 В за абсолютным максимумом входа |
| SCK | Uno → карта | делитель, как у MOSI | то же — и это чаще всего забывают |
| CS | Uno → карта | делитель, как у MOSI | 5 В на входе выбора кристалла |
| MISO | карта → Uno | напрямую: 3,3 В выше порога HIGH у Uno (3,0 В) | делитель здесь только вредит |
// Пин 10 изображает линию от Uno, через делитель 1 кОм + 2 кОм// она заходит на A0. Карта при этом НЕ подключена: стенд проверяет// только уровни. HIGH на входе должно дать около 3.3 В, LOW - около 0. const int probe = 10; void setup() { pinMode(probe, OUTPUT); Serial.begin(9600);} void loop() { digitalWrite(probe, HIGH); // Uno тянет линию вверх delay(10); float hi = analogRead(A0) * 5.0 / 1023; digitalWrite(probe, LOW); // и вниз delay(10); float lo = analogRead(A0) * 5.0 / 1023; Serial.print("high="); Serial.print(hi); Serial.print(" (ждём около 3.3), low="); Serial.print(lo); Serial.println(" (ждём около 0)"); delay(2000);}Когда делителя мало: общая шина и четыре канала
Делитель — деталь честная, но глухая: он всегда соединён с линией и всегда тянет её к земле через нижний резистор. На шине с несколькими устройствами это беда. Когда Uno разговаривает с другим SPI-устройством, делители модуля продолжают висеть на CS и MOSI и подсаживают линии, а входы карты слышат чужие такты сквозь стены. Схема может работать год и сыпаться раз в час — зависит от соседей и монтажа. Симптом знакомый: на одном устройстве всё летало, добавили второе — начались зависания на ровном месте.
Здесь и нужен четырёхканальный преобразователь уровней — платка на BSS138 или TXB0104, четыре линии туда-обратно. Он, как и буфер 74LVC125A, умеет отпускать шину в высокоимпедансное состояние, когда его канал не выбран. Моё мнение с условием: один SD-модуль на шине — берите дешёвый с делителями и не думайте; в схеме, где рядом живут SD и, скажем, дисплей или RFID-ридер на той же шине, — только буфер или четырёхканальный трансливатор. Экономия тридцати рублей тут стоит недель отладки. Ради умения отпускать шину буфер ценят и там, где карта спит дольше, чем работает: отпущенная линия не мешает соседям.
И последнее, о чём забывают чаще всего: согласование сигналов не отменяет согласование питания. Делители понижают линии, но VCC голого переходника по-прежнему ждёт 3,3 В — пять вольт на питание убьют карту, даже если MOSI согласован идеально. Правило «есть стабилизатор — питаем 5 В, нет — только 3,3 В» мы проговорили ещё в уроке про первый логгер, и здесь оно работает без поправок. А в симуляторе ниже — расчёт уровней: потенциометр перебирает линии, и для каждой видно, что реально увидит карта.
- 1. Почему MISO соединяют с Uno напрямую, без делителя?
- 2. Делитель 1 кОм сверху и 2 кОм снизу на линии 5 В даёт на выходе:
- 3. Что умеет буфер 74LVC125A, чего не умеет резисторный делитель?
- 4. На SPI-шине живут SD-модуль с делителями и ещё одно устройство. Что произойдёт?
- 5. Голый переходник microSD без стабилизатора можно питать:
- Карта живёт на 2,7–3,6 В: 5 В на MOSI, SCK или CS — выход за абсолютный максимум входа
- Три делителя 1 кОм + 2 кОм на MOSI, SCK и CS дают 3,33 В из 5 В; MISO ходит напрямую
- 3,3 В от карты Uno видит как HIGH: порог 0,6 от питания — это 3,0 В при пяти
- Один модуль на шине — делители не мешают; два и больше — нужен буфер или 4-канальный преобразователь
- Согласование сигналов не отменяет питание: голый переходник — только 3,3 В на VCC
Частые вопросы по теме урока
- Почему MISO соединяют с Uno напрямую, без делителя?
- Порог HIGH у пятивольтовой Uno — 3,0 В, карта даёт 3,3 В, запас есть. Делитель опустил бы ответ до 2,2 В, и Uno перестала бы слышать карту. 3,3 В от карты выше порога HIGH у Uno, а делитель съел бы их до 2,2 В
- Делитель 1 кОм сверху и 2 кОм снизу на линии 5 В даёт на выходе:
- Выход = 5 В × 2 кОм / (1 кОм + 2 кОм) = 3,33 В. Соотношение нижнего резистора к сумме и определяет уровень. 3,33 В — пять вольт умножить на два и разделить на три
- Что умеет буфер 74LVC125A, чего не умеет резисторный делитель?
- Буфер по CS уходит в третье состояние и не трогает шину — это нужно, когда на SPI живут несколько устройств. Делитель паян наглухо и линию не отпускает. Отпускать шину в высокоимпедансное состояние, когда CS высокий
- На SPI-шине живут SD-модуль с делителями и ещё одно устройство. Что произойдёт?
- Делитель пассивен и всегда подключён: он подсаживает линии, когда шиной управляет сосед. Для общей шины берут буфер или 4-канальный преобразователь. Делители навредят: они глухо висят на линиях, пока говорит сосед
- Голый переходник microSD без стабилизатора можно питать:
- Без стабилизатора питание — строго 3,3 В, а пять вольт на MOSI, SCK и CS по-прежнему вне допуска: резисторы на плате ничего не понижают. Только от 3,3 В, при этом сигнальные линии всё равно требуют делителей