首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在STM32上使用FatFS挂载SD

无法在STM32上使用FatFS挂载SD
EN

Stack Overflow用户
提问于 2017-05-08 02:25:14
回答 1查看 5.3K关注 0票数 1

我正在尝试使用STM32F405芯片写入MicroSD卡。

针脚连接正确,可以使用HAL_GPIO_WritePin写入MicroSD卡插槽上的每个针脚。(用示波器测量)我正在使用CubeMX为TrueStudio生成初始化代码,所以希望一切都没问题。但是当我运行以下代码时,f_mount返回FR_DISK_ERR。可以对MicroSD卡进行写入和读取。如果我使用一个不同的设备号,例如"1:",我会得到FR_INVALID_DRIVE

所以我的问题是:除了故障的MicroSD卡之外,还有什么原因会导致FR_DISK_ERR

到目前为止,我的代码如下:

代码语言:javascript
复制
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SDIO_SD_Init();
  MX_FATFS_Init();

  /* USER CODE BEGIN WHILE */
  FATFS fileSystem;
  FIL testFile;
  uint8_t testBuffer[16] = "SD write success";
  UINT testBytes;
  FRESULT res;

  while((res = f_mount(&fileSystem, SD_MOUNT_PATH, 1)) != FR_OK){
      printf("%d", res); //used to debug res, only for TrueStudio Debugger
  }


    uint8_t path[13] = "testfile.txt";
    path[12] = '\0';

    res = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
    res = f_write(&testFile, testBuffer, 16, &testBytes);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);

    res = f_close(&testFile);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);


}

MX_FATFS_Init()中,调用FATFS_LinkDriver(&SD_Driver, SD_Path)并返回0。

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 05:14:57

如果没有SD_MOUNT_PATH宏,f_mount调用是否如下所示:f_mount(&fileSystem, "0:", 1)

你是说即使f_open失败了,f_write也会返回FR_OK吗?!

FR_DISK_ERR通常表示disk_read()或disk_write()失败。尝试在使用f_mount()之前和两次fatfs函数调用之间提供100ms或1秒的延迟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43835115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档