你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

cube下模拟U盘,速度超级慢,177K写入SD卡。

[复制链接]
jihesong-101921 提问时间:2016-3-7 19:35 /
本帖最后由 jihesong-1019213 于 2016-3-8 14:33 编辑

    模拟U盘,把USB线连电脑后,像是插上U盘一样,能识别出板上SPI驱动的SD卡,和U盘一样,但很慢,枚举很慢,电脑显示写入时177K/秒也很慢;过程和挂载fatfs基本一样,很简单,就是在接口那里放上出和入的程序,照常满足3个参数。
    打上断点后,看到SPI的应答从没出错,问题是从来没连续块读写,觉得应该得有个USB的缓冲区吧,因为单片机的内存挺金贵的,目前应该是默认的安全模式,一个byte一个蹦,节省资源。
    usbd_storage_if.c里面增加上SPI的块读写就能识别SD卡容量,前提是SD卡需要先识别出,和fatfs无关。
    怎么样让块的连续读写生效,发挥作用啊????SPI速度有18M啊,速度全让单字节读写浪费了。
    虚拟串口和HOST+storage还没弄,但是我觉得路数应该一样的,hal库还是挺给力,要养成习惯就是把程序写在用户代码区。
/*******************************************************************************
* Function Name  : STORAGE_Read_FS
* Description    :
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
int8_t STORAGE_Read_FS (uint8_t lun,
                        uint8_t *buf,
                        uint32_t blk_addr,                       
                        uint16_t blk_len)//这个blk_len长度从来都是1,就不肯大于1,正在找原因。
{
  /* USER CODE BEGIN 6 */
    if(blk_len==1)
    {   
        if(SD_ReadBlock(buf, blk_addr*512, 512)!=SD_RESPONSE_NO_ERROR)
            SD_ReadBlock(buf, blk_addr*512, 512);
    }
    else
        SD_ReadMultiBlocks(buf, blk_addr*512, 512, blk_len);
  return (USBD_OK);
  /* USER CODE END 6 */
}

/*******************************************************************************
* Function Name  : STORAGE_Write_FS
* Description    :
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
int8_t STORAGE_Write_FS (uint8_t lun,
                         uint8_t *buf,
                         uint32_t blk_addr,
                         uint16_t blk_len)
{
  /* USER CODE BEGIN 7 */
    if(blk_len==1)
    {   
        if(SD_WriteBlock(buf,blk_addr*512, 512)!=SD_RESPONSE_NO_ERROR)
            SD_WriteBlock(buf,blk_addr*512, 512);
    }
    else
        SD_WriteMultiBlocks(buf, blk_addr*512, 512, blk_len);
  return (USBD_OK);
  /* USER CODE END 7 */
}
   
那个lun参数其实应该就是DRV,第几个硬件U口而已,既然板上只有1个U插口,当然是0,不用管了;
USB的hal库似乎比较新,看那注释是空的,看不到参数的解释。
送上个命令,在电脑的“运行”里输入 chkdsk G:/F ,可以修复被自己读写乱了的SD卡,G是SD卡的盘符,到连格式化都不行时候,这个命令可以救命。


收藏 1 评论0 发布时间:2016-3-7 19:35

举报

0个回答

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版