• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

移植FATFS的问题

Spirit 2018-12-13 浏览量:1370
问题就是:disk_ioctl函数中,要求返回GET_BLOCK_SIZE。
这个GET_BLOCK_SIZE是指:返回以扇区为单位的存储阵列的擦除块大小赋给 Buffer 指向的 DWORD 变量。
那么我的理解:假如一个Flash擦除块有4096个字节,而我把512个字节划分为一扇区,那么调用disk_ioctl(pdrv GET_BLOCK_SIZE &n)时,应该返回4096/512 = 8
从某例程上看,确实是这样的。
当我用CubeMX生成基于SD卡的FATFS时,其构造的函数中不管是GET_SECTOR_SIZE还是GET_BLOCK_SIZE返回值都是CardInfo.LogBlockSize——512。
请问这是怎么回事?
附代码:
DRESULT SD_ioctl(BYTE lun BYTE cmd void *buff)
{
  DRESULT res = RES_ERROR;
  BSP_SD_CardInfo CardInfo;
  
  if (Stat & STA_NOINIT) return RES_NOTRDY;
  
  switch (cmd)
  {
  /* Make sure that no pending write process */
  case CTRL_SYNC :
    res = RES_OK;
    break;
  
  /* Get number of sectors on the disk (DWORD) */
  case GET_SECTOR_COUNT :
    BSP_SD_GetCardInfo(&CardInfo);
    *(DWORD*)buff = CardInfo.LogBlockNbr;
    res = RES_OK;
    break;
  
  /* Get R/W sector size (WORD) */
  case GET_SECTOR_SIZE :
    BSP_SD_GetCardInfo(&CardInfo);
    *(WORD*)buff = CardInfo.LogBlockSize;
    res = RES_OK;
    break;
  
  /* Get erase block size in unit of sector (DWORD) */
  case GET_BLOCK_SIZE :
    BSP_SD_GetCardInfo(&CardInfo);
    *(DWORD*)buff = CardInfo.LogBlockSize;
    res = RES_OK;
    break;
  
  default:
    res = RES_PARERR;
  }
  
  return res;
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:4
  • 建议看下官方的例程,STM32Cube_FW_Fx的软件包有例程,先跑起来,再仿真看下。

  • 这种要参考你的不同的芯片的SDK,根据官方的SDK来修改

  • 我觉得,现在少用CubeMX吧,这种小问题很难注意到的。。。。。。

  • 最好是不用用cubemx来生成工程,自己配置对应的库更好一点

相关问题

问题达人换一批

移植FATFS的问题