Форматирование SD-карты с помощью GParted не позволяет читать ее с помощью Mbed-os - PullRequest
0 голосов
/ 07 мая 2019

Я использую 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");
}

1 Ответ

0 голосов
/ 07 мая 2019

Mbed OS FATFileSystem описывается как файловая система FAT32, но вы форматируете как FAT16.Я не уверен, что FAT16 и FAT32 должны быть совместимы, но это будет мое первое предположение.

...