SD-карта (SDC/MMC)
Рано или поздно может понадобиться сохранять данные, собранные с датчиков, игровые файлы или другую информацию. Одно из идеальных решений — хранить их на SD-карте. В этом разделе мы научимся использовать модуль SD-карты с ESP32.
MMC
MultiMediaCard (MMC) появилась как один из ранних видов флеш-памяти и предшествовала SD-карте. Её обычно использовали в камерах, цифровых фотоаппаратах и портативных музыкальных плеерах. MMC хранит данные как электрические заряды в ячейках флеш-памяти, в отличие от оптических дисков, которые опираются на данные, закодированные лазером на отражающей поверхности.
SD (Secure Digital) карта
Secure Digital Card (SDC), которую обычно называют SD-картой, — это развитие MMC. SD-карты широко используются как внешняя память в электронных устройствах, например в камерах и смартфонах. Меньший вариант — microSD — обычно применяют в смартфонах, дронах и других устройствах.
Изображение: на основе SD card от Tkgd2007, распространяется по лицензиям GFDL и CC BY-SA 3.0, 2.5, 2.0, 1.0.
SD-карты читают и записывают данные блоками, обычно по 512 байт, благодаря чему работают как блочные устройства. Поэтому SD-карты ведут себя во многом как жёсткие диски.
Аппаратные требования
Мы будем использовать адаптер microSD-карты. Чтобы его найти, поищите «Micro SD Card Reader Module» или «Micro SD Card Adapter».
Конечно, понадобится и сама microSD-карта. Её нужно отформатировать в FAT32. В зависимости от аппаратного обеспечения вашего компьютера может понадобиться отдельный адаптер SD-карт (не тот, что указан выше), чтобы отформатировать microSD-карту. Некоторые ноутбуки имеют прямую поддержку microSD-карт.
Протокол
Для работы с SD-картой можно использовать протокол SD Bus, протокол SPI или шину UHS-II. Raspberry Pi (но не Raspberry Pi Pico) использует протокол SD Bus, который сложнее, чем SPI. Полные подробности протокола SD Bus публично недоступны и предоставляются только через SD Association. В этом руководстве мы будем использовать протокол SPI, потому что драйвер на Rust, который мы применяем, рассчитан именно на него.
Ссылки:
- Настоятельно рекомендую посмотреть доклад Джонатана Паланта на Euro Rust 2024 о написании драйвера SD-карты на Rust. Он написал драйвер, который мы будем использовать (изначально он создавал его, чтобы запускать MS-DOS на ARM). Драйвер не предназначен для промышленной эксплуатации.
- Если хотите понять, как всё работает внутри в режиме SPI, см. эту статью: How to Use MMC/SDC