硬汉嵌入式论坛

 找回密码
 立即注册
查看: 216|回复: 2
收起左侧

[FatFs] 请教一下读取状态无法生效的问题

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2025-7-11 09:03:25 | 显示全部楼层 |阅读模式
这是我的写入代码

[C] 纯文本查看 复制代码
FRESULT Usb_Save_String_To_File(const char* filename, const char* data_buffer) {
   FIL     fil;
   FRESULT res;
   UINT    bytes_written;

   res = f_mount(&USBHFatFS, "1:", 1);
   if (res != FR_OK) {
      return res;
   }

   res = f_open(&fil, filename, FA_CREATE_ALWAYS | FA_WRITE);
   if (res != FR_OK) {
      f_mount(NULL, "1:", 1);
      return res;
   }

   res = f_write(&fil, data_buffer, strlen(data_buffer), &bytes_written);
   if (res != FR_OK) {
      f_close(&fil);
      f_mount(NULL, "1:", 1);
      return res;
   }

   res = f_close(&fil);
   if (res != FR_OK) {
      f_mount(NULL, "1:", 1);
      return res;
   }

   if (bytes_written < strlen(data_buffer)) {
      return FR_DISK_ERR;
   }

   return FR_OK;
}


执行代码后,挂载成功,创建文件成功,但是会堵死在f_write这一步,经过断点调试发现问题发生在
stm32h7xx_hal_sd.c的
[C] 纯文本查看 复制代码
HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
{
  //uint32_t cardstate;
  uint32_t errorstate;
  uint32_t resp1 = 0;

  errorstate = SD_SendStatus(hsd, &resp1);
  if (errorstate != HAL_SD_ERROR_NONE)
  {
    hsd->ErrorCode |= errorstate;	
  }

  cardstate = ((resp1 >> 9U) & 0x0FU);

  return (HAL_SD_CardStateTypeDef)cardstate;
}


这段代码里,然后我看了一下是将返回值与HAL_SD_CARD_TRANSFER进行比较,正好是errorstate 的0x000004

所以修改


[C] 纯文本查看 复制代码
HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
{
  //uint32_t cardstate;
  uint32_t errorstate;
  uint32_t resp1 = 0;

  errorstate = SD_SendStatus(hsd, &resp1);
  if (errorstate != HAL_SD_ERROR_NONE)
  {
    hsd->ErrorCode |= errorstate;	
  }

  //cardstate = ((resp1 >> 9U) & 0x0FU);

  //return (HAL_SD_CardStateTypeDef)cardstate;
  return (HAL_SD_CardStateTypeDef)errorstate;
	
}


代码可以正常运作,可以正常写入文件,但是并不知道是什么原因导致的,大佬能否解答一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-11 09:50:38 | 显示全部楼层
STM32H7的话,如果是SDMMC1,这个控制器仅支持AXI SRAM空间,注意这个问题没
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2025-7-11 10:18:46 | 显示全部楼层
eric2013 发表于 2025-7-11 09:50
STM32H7的话,如果是SDMMC1,这个控制器仅支持AXI SRAM空间,注意这个问题没

解决了,因为库文件被人动过了,导致本来调用的usb代码变成了调用sd卡,在获取状态这边因为不能用导致一直超时
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 00:04 , Processed in 0.039491 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表