Модуль SD-карты был первой периферией, которую я купил вслепую: сто двадцать рублей, шесть пинов, фотография из магазина на фоне зелёной макетки. Посылка приехала вечером, и к полуночи я уже воткнул её в Uno по картинке из интернета — и два часа не мог понять, почему пример из библиотеки молчит. Питание я взял с пина 3.3V: на модуле же написано, что карта трёхвольтовая! Логика казалась железной — а стабилизатору на плате нужен вход повыше: с трёх вольт на входе он свои 3,3 В на выходе не выдаёт вовсе, и модуль сидел без питания совсем.
Вскрытие — в смысле лупы и даташита — показало, что «модуль SD-карты» это не разъём, а маленькая инфраструктура: стабилизатор, преобразователь уровней, пара конденсаторов и сам разъём с восемью пружинными контактами. Каждый элемент там не украшение, а ответ на конкретное несоответствие: карта ест 3,3 В и разговаривает трёхвольтовой логикой, Uno выдаёт 5 В и пятивольтовые уровни. Кто не согласует эти два мира — теряет либо карту, либо пин, либо весь вечер.
В этом уроке разберём типовой модуль по деталям: за что отвечает каждая микросхема, какие бывают версии плат и как за десять секунд отличить «пустышку» без стабилизатора, сколько тока карта тянет в момент записи и почему от этого проседает макетка. Это фундамент: первый урок раздела дал карту в работу, здесь мы заглядываем под неё — в само железо.
А в конце запустим модель питания в симуляторе: потенциометр изображает входное напряжение модуля, и будет видно, в какой момент AMS1117 перестаёт справляться.
Что на плате размером с ноготь
Начнём с разъёма. Внутри сидит microSD-карта, снаружи — подпружиненные контакты и механизм push-push: нажали — карта зафиксировалась со щелчком, нажали ещё раз — выехала. В SPI-режиме карте нужны шесть линий: питание, земля, такты, данные туда и обратно, и контакт DAT3, который в SPI становится выбором кристалла CS. Дешёвые разъёмы — первая точка отказа: пружина слабеет, контакт плавает, и карта «пропадает» от лёгкого сотрясения стола. Если логгер теряет связь с картой от того, что вы прошли рядом, — начинайте осмотр с разъёма.
Вторая деталь — стабилизатор AMS1117-3.3, трёхногая микросхема с маркировкой AMS1117 на корпусе. Это линейный стабилизатор: лишнее напряжение он превращает в тепло и выдаёт ровно 3,3 В — но с условием. Вход должен быть выше выхода на dropout: минимальный запас, при котором стабилизатор ещё держит паспортные 3,3 В. У AMS1117 это порядка 1,1 В. Отсюда жёсткая арифметика: модулю нужно от 4,4 до 5,5 вольт на входе. Пин 3.3V Uno не годится не потому, что «мало вольт по паспорту», а потому что ниже порога dropout: на выходе модуля остаются какие-то 2,2 В, и карта даже не начинает просыпаться.
Третий элемент — преобразователь уровней. Линии MOSI, SCK и CS приходят от Uno с пятью вольтами, а карта терпит максимум 3,3. На приличных модулях стоит четырёхканальный буфер вроде 74LVC125A: когда CS высокий и карта не выбрана, его выходы переходят в высокоимпедансное состояние и шину не трогают. На дешёвых модулях вместо буфера — резисторные делители: последовательно два резистора, чаще 1 кОм сверху и 2 кОм снизу; пять вольт делится примерно до 3,3. Такие делители мы считали по формулам в уроке про делитель напряжения, а номиналы по цветным полоскам научились читать ещё раньше, в уроке про цветовой код. Важное следствие: буфер умеет «отпускать» шину, делитель — нет. К чему это приводит на общей шине — отдельная история второго урока.
И четвёртое — конденсаторы: керамика на 100 нФ рядом с картой и электролит на 10–100 мкФ на входе. Карта в момент записи захватывает ток импульсами, и без местного запаса ёмкости питание проваливается на доли секунды. Мелочь, которая стоит копейки, а вопросов на форумах порождает на годы.
| Элемент | Что делает | Числа | Как проверить |
|---|---|---|---|
| Разъём push-push | Держит карту, 8 контактов | Усилие фиксации слабеет с годами | Переткнуть карту до двойного щелчка |
| AMS1117-3.3 | Понижает 5 В до 3,3 В | Dropout около 1,1 В, вход от 4,4 В | Мультиметр между выходом и GND |
| Буфер 74LVC125A | 5 В → 3,3 В на MOSI, SCK, CS | 4 канала, выход в Z при CS=1 | По маркировке на корпусе |
| Резисторные делители | Та же задача на дешёвых модулях | 1 кОм + 2 кОм: 5 В даёт 3,3 В | Два резистора в SMD-корпусах |
| MISO | Данные от карты к мастеру | Уровень HIGH всего 3,3 В | Прямо с карты, без делителя |
| Конденсаторы | Сглаживают импульсы записи | 100 нФ + 10–100 мкФ | Визуально: у разъёма и на входе |
Модули бывают разные, и знать это надо до покупки. Классика — плата с AMS1117, буфером или делителями и шестью пинами: CS, MOSI, MISO, SCK, VCC, GND; питается пятью вольтами. Но в наборах встречается «голый» переходник: тонкая платка, на которой нет ничего, кроме разъёма и пары резисторов. Она рассчитана на трёхвольтовые платы и трёхвольтовое питание. Я однажды воткнул такой в 5V по привычке: карта не умерла — повезло, — но грелась так, что палец отдёргивал. С тех пор моё правило: перед включением счесть крупные детали. Есть стабилизатор и преобразователь — питаем 5 В; платка голая — только 3,3 В и осторожность.
Отдельная каста — шилды, надевающиеся сверху Uno: Ethernet-шилд, например, несёт собственный слот SD. У него CS карты выведен на пин 4, потому что пин 10 занят самим сетевым чипом. Именно отсюда в примерах библиотеки мелькает четвёрка — и новички таскают её в скетчи с отдельными модулями, где CS вешается на любой свободный пин. Перепутать эти два сценария — верный способ получить «initialization failed» при идеальной сборке.
Питание модуля тянут короткими отдельными проводами от шин 5V и GND на краю платы, а не с дальнего конца макетки: импульс тока записи доходит до двухсот миллиампер, и тонкая длинная перемычка легко съедает на себе 0,3–0,5 вольта. К чему это приводит — считаем прямо сейчас.
Сколько ест карта и почему проседает макетка
Токи карты распределены неравномерно. В покое — единицы миллиампер. При чтении — 20–40 мА. А при записи карта захватывает ток импульсами: до 100–200 мА на доли секунды, когда контроллер карты гонит данные во флеш-ячейки. AMS1117 выдерживает до ампера, так что микросхема не предел; предел — провода, рейки и контакты между блоком питания и модулем.
Арифметика просадки грубая, но честная: цепочка из трёх тонких перемычек и контактной пары в рейке легко добавляет 0,3–0,5 Ом, и на импульсе в 150 мА это минус 0,45–0,75 В. Вход модуля вместо 5,0 В получает 4,4 и ниже — на границе dropout. Стабилизатор проседает, и ошибки лезут именно при записи, хотя «питание же есть». Лечение: короткие толстые провода и конденсатор на 100 мкФ у модуля. Про рейки и их разрывы у нас был отдельный разговор — урок про макетку.
Правило из этой же оперы: питание проверяют в момент беды, а не в покое — мультиметр на вход модуля во время записи. Стабильно выше 4,4 В — вычёркиваем питание из подозреваемых.
#include <SPI.h>#include <SD.h> const int chipSelect = 10;unsigned long last = 0; void setup() { Serial.begin(9600); if (!SD.begin(chipSelect)) { Serial.println("begin=false: smotri chek-list v texte uroka"); while (true) { } } Serial.println("Karta primontirovana, pishem stroku raz v 2 sek");} void loop() { if (millis() - last >= 2000) { last = millis(); File f = SD.open("pulse.log", FILE_WRITE); if (f) { f.print("t="); f.println(millis() / 1000); f.close(); Serial.print("write t="); Serial.println(millis() / 1000); } }}- 1. Какую задачу решает AMS1117-3.3 на модуле SD?
- 2. Почему модуль с AMS1117 не стартует от пина 3.3V Uno?
- 3. Пять вольт с пина Uno приходят на линию MOSI напрямую к карте. Это…
- 4. Почему у Ethernet-шилда CS карты назначен на пин 4?
- 5. Светодиод L на Uno мелко мерцает при записи на карту. Почему?
- Модуль SD — это разъём, стабилизатор AMS1117-3.3, преобразователь уровней и конденсаторы; каждая деталь согласует 3,3-вольтовую карту с пятивольтовой Uno
- Модулю с AMS1117 нужен вход от 4,4 В: dropout стабилизатора около 1,1 В — пин 3.3V Uno для питания модуля не годится
- Голые переходники без стабилизатора питаются только 3,3 В; перед включением считайте детали на плате
- Импульсы тока записи — до 100–200 мА; питание ведите короткими проводами и ставьте конденсатор 100 мкФ у модуля
- CS отдельного модуля — любой свободный пин, обычно 10; четвёрка из примеров досталась Ethernet-шилду
- Светодиод L на пине 13 — это SCK: мерцание при записи показывает, что обмен по шине реально идёт
Разбор короткий, потому что почти всё здесь мы уже делали в первом уроке: CS на пине 10, файл открывается дозаписью, close() после каждой строки. Новое тут наблюдение, а не код: следите при записи за светодиодом L на Uno. Он сидит на пине 13, а пин 13 — это линия SCK: каждый байт, уходящий в карту, дёргает тактовую линию, и L мелко мерцает. Мы зажигали этот светодиод вручную ещё в самом первом уроке самоучителя, а здесь он мигает сам — показывает, что шина жива. L мёртв при «записи» — обмена нет вовсе, ищите обрыв или неверный CS.
Понимать модуль как набор деталей — половина дела; вторая половина — сами линии: как их соединять, почему пины не любые и что делать, когда на одной шине живут SD и ещё пара устройств. Этим займётся следующий урок. А когда модуль надёжно питается и стабильно пишет, открыта и дальняя дорога: урок про CSV и конфиги покажет, как складывать измерения в настоящие таблицы и менять поведение устройства файлом с карты.
Домашнее задание: найдите на своём модуле стабилизатор, буфер или делители, конденсаторы — запишите номиналы резисторов и сверьте с расчётом делителя. И найдите в симуляторе границу, ниже которой модельный модуль отказывается стартовать.
Частые вопросы по теме урока
- Какую задачу решает AMS1117-3.3 на модуле SD?
- Это линейный стабилизатор: с входа от 4,4 В он держит ровно 3,3 В. Лишняя разница уходит в тепло. Понижает входные 5 В до 3,3 В для карты
- Почему модуль с AMS1117 не стартует от пина 3.3V Uno?
- С трёх вольт на входе AMS1117 выдаёт около 2,2 В — карта даже не просыпается. Стабилизатор модуля требует входа от 4,4 В из-за dropout
- Пять вольт с пина Uno приходят на линию MOSI напрямую к карте. Это…
- Пятивольтовые уровни для карты — перебор. Модуль существует именно ради согласования: буфер или делители на MOSI, SCK и CS. опасно: карта трёхвольтовая, уровни обязан согласовать модуль
- Почему у Ethernet-шилда CS карты назначен на пин 4?
- На шилде пин 10 отдали сетевому чипу W5100, карте достался пин 4. Отсюда четвёрка в примерах библиотеки, которую новички таскают в скетчи с отдельными модулями. Пин 10 занят самим сетевым чипом шилда
- Светодиод L на Uno мелко мерцает при записи на карту. Почему?
- Пин 13 — аппаратный SCK: каждый байт обмена дёргает такты. Мёртвый L при записи — обмена нет. Он сидит на пине 13, а это линия SCK