Запись данных на 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!