Я использую Mbed-os для чтения данных с карты Micro SD.Однако когда я форматирую диск с помощью GParted (msdos MBR, раздел FAT16 32 МБ), SD-карта не монтируется с использованием собственных библиотек Mbed - mount()
возвращает -22 (EINVAL: неверный аргумент).Глядя на исходный код FATFileSystem.cpp, похоже, что это может быть вызвано несколькими факторами, включая: неверное имя пути (строка 51), отсутствие допустимой файловой системы FAT (строка 65) или идентификатор, который не равен -1 (строка 331).Хотя я не знаю, что на самом деле означают эти условия.
Однако, когда я форматирую SD-карту с помощью Mbed, она прекрасно работает и может быть отлично смонтирована на моем компьютере.
Чтобы смонтировать диск в Mbed, я использую этот код, взломанный из документации mbed :
SDBlockDevice sd(
D11,
D12,
D13,
D10
);
MBRBlockDevice part1(&sd, 1);
//ReadOnlyBlockDevice robd(&part1);
FATFileSystem fat("fat");
...
if (sd.init() != 0) {
printf("sd did not initialize\n");
return false;
}
if (part1.init() != 0) {
printf("part1 did not initialize\n");
return false;
}
printf("fat mount: %d\n", fat.mount(&part1)); // fat.mount(...) returns -22 when I format the disk using gparted
return true;
- Как я могу сказать, чтоотличается от диска, когда я форматирую его с помощью Mbed, и когда я форматирую его с помощью GParted?Есть ли утилита, которая дает мне больше информации, чем fdisk?
- Что вызывает ошибку при форматировании диска, отформатированного в GParted?
Вот код, который я использую дляотформатировать диск:
void format_disk() {
printf("formatting...\n");
MBRBlockDevice::partition(&sd, 1, 0x83, 0, 1024 * 1024 * 32);
MBRBlockDevice part(&sd, 1);
FATFileSystem::format(&part);
printf("done?\n");
}