单独挂载都正常,并且不使用RTOS,f_mkfs也会进入错误中断。f_mkfs函数中的这一行:if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR; ,会把pdrv由1变成0,不知道为什么.
然后下边调用的都是 USB 的 FATFS 函数了,然后就错误了。
这是我移植的函数,
[C] 纯文本查看 复制代码 DRESULT USER_ioctl (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
/* USER CODE BEGIN IOCTL */
DRESULT res = RES_OK;
switch(cmd)
{
case CTRL_SYNC: //完成挂起的写操作过程,在 _FS_READONLY == 0时用到
break;
case GET_SECTOR_COUNT: /* 获取存储介质容量 (_USE_MKFS == 1 时需要) */
*(DWORD *)buff=W25Q32_SECTOR_COUNT; //总的扇区个数
break;
case GET_SECTOR_SIZE: /* 获取扇区大小 (_MAX_SS != _MIN_SS 时需要) */
*(DWORD *)buff=W25Qxx_SECTOR_SIZE; //每个扇区的大小
break;
case GET_BLOCK_SIZE: /* 获取擦除块的大小(_USE_MKFS == 1 时需要) */
*(DWORD *)buff=16; //一个 Block有几个扇区
break;
default:
res = RES_ERROR;
}
return res;
/* USER CODE END IOCTL */
} |