使用GParted格式化SD卡不允许使用Mbed-os读取

时间:2019-05-07 00:26:37

标签: filesystems mbed

我正在使用Mbed-os从Micro SD卡读取数据。但是,当我使用GParted(msdos MBR,32MB fat16分区)格式化磁盘时,SD卡未使用本机Mbed库安装-mount()返回-22(EINVAL:无效参数)。查看FATFileSystem.cpp的源代码,它可能是由多种因素引起的,包括:无效的路径名(第51行),没有有效的FAT文件系统(第65行)或ID不为-1(第331行) )。我不知道这些条件到底意味着什么。

但是,当我使用Mbed格式化SD卡时,它可以正常工作,并且可以很好地安装在计算机上。

要将驱动器安装到Mbed中,我使用的是这段代码,这些代码是从mbed documentation砍死的:

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 :(得分:0)

Mbed操作系统FATFileSystem被描述为FAT32文件系统,但是您要格式化为FAT16。我不确定FAT16和FAT32是否应该兼容,但这是我的第一个猜测。