Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Запись данных на SD-карту в embedded Rust на Raspberry Pi Pico

В этой главе мы создадим файл на microSD-карте и запишем в него данные. Подключение SD-карты, настройка SPI, логирование и инициализация карты остаются прежними. Меняются только открытие файла и запись в него данных.

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

Настройка проекта

Можно взять проект из примера чтения и изменить его либо создать новый проект из шаблона и повторить шаги настройки до создания экземпляра sdcard.

Дальше отличается только код работы с файлами.

Открытие файла для записи

Чтобы писать данные, файл нужно открыть в режиме, который допускает создание и изменение. Здесь мы используем ReadWriteCreateOrTruncate: он создаёт файл, если его нет, и обрезает его, если он уже существует. Так файл каждый раз начинается пустым.

#![allow(unused)]
fn main() {
let my_file = root_dir
    .open_file_in_dir(
        "FERRIS.TXT",
        embedded_sdmmc::Mode::ReadWriteCreateOrTruncate,
    )
    .expect("failed to create FERRIS.TXT file");
}

Запись данных в файл

Чтобы пример оставался простым, мы записываем в файл одну строку текста. Если запись прошла успешно, файл сбрасывается (flush), чтобы данные гарантированно попали на SD-карту.

#![allow(unused)]
fn main() {
let line = "Hello, Ferris!";
if let Ok(()) = my_file.write(line.as_bytes()) {
    info!("Written Data");
    if let Err(_) = my_file.flush() {
        info!("Failed to flush");
    }
} else {
    error!("Unable to write the data");
}
}

Клонируйте существующий проект

Можно клонировать проект, который я создал, и перейти в папку write-sdcard.

git clone https://github.com/ImplFerris/pico2-embassy-projects
cd pico2-embassy-projects/sdcard/write-sdcard/

Проверка результата

Когда программа завершит работу, выключите плату и извлеките microSD-карту. Если вставить карту в компьютер, в корневом каталоге должен быть файл FERRIS.TXT.

Tip

В этом примере мы используем фиктивный источник времени, поэтому дата файла будет около 1980 года. Если нужны правильные временные метки, потребуется настроить RTC и предоставить собственную реализацию TimeSource, которая возвращает текущее время.

Открыв файл, вы увидите:

Hello, Ferris!