ST意法半导体
直播中

贾飞世

7年用户 1704经验值
私信 关注
[问答]

如何在STM32F411RE板上用FatFS测试sdcard呢

你好。
我尝试在 NUCLEO-F411RE 板上的 STM32F411RE 上用 fatfs 测试 sdcard。
我没有 100% 确定的硬件或软件,所以如果它是软件或硬件问题,我很难调试。
我已经阅读了一些主题,其中一个是 sd 初始化问题(但在我的版本中这个问题已经解决了)。
我已经三次检查了所有连接,当卡不在插座中时,我得到了快速响应。
我已经从 stm32cubemx 生成了代码,并添加了自定义代码:
  /* 初始化所有配置的外设 */
  MX_GPIO_Init();
  MX_SDIO_SD_Init();
  MX_FATFS_Init();
  /* 用户代码开始 2 */
  结果结果;
  FATFS SDFatF;/* SD 磁盘逻辑驱动器的文件系统对象 */
  填写我的文件;/* 文件对象 */
  res = f_mount(&SDFatFs, (TCHAR const*)SDPath, 0);
  如果(res!= FR_OK)
      同时(1);
  res= f_open(&MyFile, ''STM32.TXT'', FA_CREATE_ALWAYS | FA_WRITE);
  如果(res!= FR_OK)
        同时(1);
  /* 用户代码结束 2 */f_mount 没问题,但f_open在大约 30 秒后返回一个FR_DISK_ERR。当插座中没有卡时,我会快速返回FR_NOT_READY
执行 f_open 时,函数卡在 ff.c 的第 3050 行  
fmt = check_fs(fs, bsect); /* 加载扇区 0 并检查它是否是 FAT-VBR 作为 SFD */
它 check_fs 返回 4 个代码,然后 f_open 返回 FR_DISK_ERR
我唯一做的就是将一些 SDIO 引脚更改为其他选项,并设置时钟。我试过使用高达 96 的 SDIO 分频器,但它没有解决我的问题。
我忘记了什么吗?我知道插座在跳线上,但在 250khz 时钟下它应该可以工作......当然尝试了一些卡,尝试使用 f_mkfs 格式化卡......
我是我正在使用的软件:

  Attolic True工作室 v9.0
  STM32Cube FW_F4 V1.19.0
  FatFs R0.12c
  STM32Cube 4.24

回帖(1)

龙献益

2022-12-23 14:58:51
它不工作的原因是我没有设置 DMA 控制器工作,标准 SDIO 通信通过 DMA 工作。

  解决方案适用于:

  Attolic True工作室 v9.0

  STM32Cube FW_F4 V1.0

  FatFs R0.12c
  STM32Cube 4.24
  您必须在 STM32Cube 中手动执行:

  1. 为 RX 和 TX 添加一个 DMA Stream

  2. 为SDIO添加IRQ(不确定是否需要)
   
  3. 可选地在除 sdio_clk 之外的所有线路上启用内部上拉。该卡仅使用内部上拉电阻,在几乎全速下没有任何问题。

  在 sd_diskio.c 底部的代码中添加:
   
  这些是 DMA 完成回调的周函数的专有名称。

  卡开始工作。我也尝试过使用池模式(在 stm32cube 的 FatFs 配置中禁用 DMA),但这种方式只能从卡中读取,而写入会导致一些我不想调试的致命错误。默认是启用 DMA。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分