-1

:)

首先原谅我的英语不好。我希望你能理解我的写作。

我的目标是为学生项目构建一个高精度(24 位)数据记录器,将数据存储到 SD 卡中。我使用 Arduino Due (ATSAM3X8E) 和额外的带有 SD 卡连接器的自制屏蔽。

此外,我使用 Atmel Studio 6.2 和 ASF 库“SPI 接口上的 SD/MMC 堆栈”和“FatFS 文件系统”。

完全可以通过 spi 使用 sd/mmc 模块进行读写,但没有文件系统。所以硬件工作正常。

我想我的错误可以定位在 FatFS 模块中。

在 main.c 我调用以下函数:

  • sd_mmc_init();

  • sd_mmc_check(SD_SLOT); //直到这个程序工作,我可以用终端窗口读写有效值

  • f_mount(LUN_ID_SD_MMC_0_MEM, &fs);

//它返回 FR_OK 但这里可能是第一个小错误,因为我不确定我是否选择了正确的 LUN。

  • f_open(&file_object,(char const *)test_file_name, FA_CREATE_ALWAYS | FA_WRITE);

// 这里出现错误 FR_DISK_ERR // 当我将错误跟踪到较低级别时,我来到函数: - chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ)); - fmt = check_fs(fs, bsect = 0); - 然后在最低级别我的 disk_read 函数,它是 diskio.c 的一部分(附加)

稍后它必须遵循函数 f_puts 和 f_close(&file_object); 但是没有 f_open,它们就无法工作。

我附加了我的 diskio.c 文件,其中分配了导致错误的 disk_read 文件。

我真的希望有人能帮助我。谢谢大家的回答和提示!!!

4

1 回答 1

2

我遇到了完全相同的问题。解决方案是添加定义:ACCESS_MEM_TO_RAM_ENABLED。我在 conf_access.h 中的第 257 行附近进行了检查

#define ACCESS_MEM_TO_RAM_ENABLED
#ifdef ACCESS_MEM_TO_RAM_ENABLED
#define ACCESS_MEM_TO_RAM    true  //!< MEM <-> RAM interface.
#else
#define ACCESS_MEM_TO_RAM    false //!< MEM <-> RAM interface.
#endif

我通过代码找到了 FR_DISK_ERR 的来源,发现 diskio.c 中的 disk_read 函数显然需要定义

一旦我添加了这个定义,我就可以打开一个文件,写入它,然后关闭它。最重要的是,我之后实际上可以取出 SD 卡,并且文件实际上已写入!

于 2016-06-01T22:32:52.567 回答