请教下,cubeMx生成的stm32F407+U盘+FATFS系统会死循环超时

2020-01-04 18:59发布

本帖最后由 Feeling_MCU 于 2019-5-24 22:55 编辑

执行f_read 正常。
执行f_write 失败
rtn = f_write(&fil, "Hello, World! ", 15, &bw);

运行到  while (USBH_MSC_RdWrProcess(phost, lun) == USBH_BUSY)  会一直死循环超时,导致写失败。
请教下是什么情况呢?
USBH_StatusTypeDef USBH_MSC_Read(USBH_HandleTypeDef *phost,
                                     uint8_t lun,
                                     uint32_t address,
                                     uint8_t *pbuf,
                                     uint32_t length)
{
  uint32_t timeout;
  MSC_HandleTypeDef *MSC_Handle =  (MSC_HandleTypeDef *) phost->pActiveClass->pData;

  if ((phost->device.is_connected == 0U) ||
      (phost->gState != HOST_CLASS) ||
      (MSC_Handle->unit[lun].state != MSC_IDLE))
  {
    return  USBH_FAIL;
  }

  MSC_Handle->state = MSC_READ;
  MSC_Handle->unit[lun].state = MSC_READ;
  MSC_Handle->rw_lun = lun;

  USBH_MSC_SCSI_Read(phost, lun, address, pbuf, length);

  timeout = phost->Timer;

  while (USBH_MSC_RdWrProcess(phost, lun) == USBH_BUSY)

  {
    if(((phost->Timer - timeout) > (10000U * length)) || (phost->device.is_connected == 0U))
    {
      MSC_Handle->state = MSC_IDLE;
      return USBH_FAIL;
    }
  }
  MSC_Handle->state = MSC_IDLE;

  return USBH_OK;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
zhcj66
1楼-- · 2020-01-04 20:06
lz找到问题了吗?我也遇到同样的问题了
flash3g
2楼-- · 2020-01-04 21:18
 精彩回答 2  元偷偷看……
Feeling_MCU
3楼-- · 2020-01-05 00:26
zhcj66 发表于 2019-7-2 15:24
lz找到问题了吗?我也遇到同样的问题了


问题已解决,但我忘了咋解决的了

大概这样:
1、读U盘,D+ D-最好不要串电阻, 20欧是不行的
2、我格式化了U盘
zhcj66
4楼-- · 2020-01-05 03:19
Feeling_MCU 发表于 2019-7-3 19:27
问题已解决,但我忘了咋解决的了

大概这样:

我的文件找到了,是u盘兼容性问题,现在测试了 金士顿u盘,读卡器+闪迪tf,闪迪u盘.只有测试闪迪u盘的时候会出现写入失败
Feeling_MCU
5楼-- · 2020-01-05 07:06
zhcj66 发表于 2019-7-3 21:53
我的文件找到了,是u盘兼容性问题,现在测试了 金士顿u盘,读卡器+闪迪tf,闪迪u盘.只有测试闪迪u盘的时候会 ...

是的,我也怀疑有这种情况
zhcj66
6楼-- · 2020-01-05 12:08
Feeling_MCU 发表于 2019-7-3 23:37
是的,我也怀疑有这种情况

今天早上把u的库换成最新的V2.2 问题完美解决了

一周热门 更多>