OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14743|回复: 10

STM32F107使用USB读写U盘出现问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-1-18
在线时间
2 小时
发表于 2014-2-17 22:34:01 | 显示全部楼层 |阅读模式
芯片是使用STM32F107
文件系统使用的是FATFS0.09
USB程序修改自  STM32F105_107_AN3354_FW_V1.0.0

使用STM32作为主机对U盘读写,问题是在使用FSTFS的读写函数对U盘读写时,一次对多读取1023个数据,
超过这个数值则读取失败,请大家帮忙分析一下

我看了下FATFS底层的读写函数

DRESULT disk_read (
        BYTE drv,                /* Physical drive nmuber (0..) */
        BYTE *buff,                /* Data buffer to store read data */
        DWORD sector,        /* Sector address (LBA) */
        BYTE count                /* Number of sectors to read (1..255) */
)

在读取数值小于1023时 count  的值为1,读写超过1023个数据时,这个值为2 
是不是多扇区读写的问题,如果一次只能读取一个扇区,为什么能读写1023个(大于一个扇区啊),求解答
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-17 23:29:36 | 显示全部楼层
回复【楼主位】翔飞:
---------------------------------
就是多扇区读取的问题了,检查底层的接口函数
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-1-18
在线时间
2 小时
 楼主| 发表于 2014-2-18 11:28:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
官网的例程
  if(HCD_IsDeviceConnected(&USB_OTG_FS_dev))
  {  
    
    do
    {
      status = USBH_MSC_Read10(buf,address,512);
      USBH_MSC_HandleBOTXfer();
    }
    while((status == USBH_MSC_BUSY ) && (HCD_IsDeviceConnected(&USB_OTG_FS_dev)));
    
  }

没有对count的检测,那么就是说单个或者多个扇区都可以使用USBH_MSC_Read10读取了,事实是只支持单个扇区的
有没有多扇区读写的函数,USBH_MSC_Read10()函数我是完全看不懂的,对USB的了解只在应用
如果没有,那我只能分次读写了,原子哥有没有好的解决办法
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-18 14:53:00 | 显示全部楼层
回复【3楼】翔飞:
---------------------------------
改成多扇区的
比如1024,拆分成2个512.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-1-18
在线时间
2 小时
 楼主| 发表于 2014-2-18 22:54:19 | 显示全部楼层
在使用FATFS的读写函数时拆分吗?
这个是官网上的一篇帖子里提到的
for (uint16_t i = 0; i<len; i += 1023) 
{
      f_write(file, &writeBuffer, (len - i > 1023 ? 1023: len-i), &written);
}
我读写大于1023时就是这样拆分,但是每次都要检测 一个扇区还剩余多少  之后就可以这样循环多次写入,
每次都要检查, 比较麻烦
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-11-6
在线时间
0 小时
发表于 2014-5-12 22:39:45 | 显示全部楼层
大哥,又没有107的USB OTG 例程,真心求,谢谢。
QQ137800277
回复 支持 反对

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-10-11
在线时间
0 小时
发表于 2014-11-26 17:01:38 | 显示全部楼层
请问你用的外部时钟是多少?
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2016-3-31
在线时间
42 小时
发表于 2016-4-6 16:16:16 | 显示全部楼层
正在找合适的片子挂u盘,楼主在107上面跑得稳定了吗
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-1
在线时间
2 小时
发表于 2016-7-1 14:34:57 | 显示全部楼层
你好,你的STM32F107读写U盘的工程还在吗,让小弟学习学习,不甚感激,邮箱406366280@qq.com
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-12-14
在线时间
7 小时
发表于 2020-12-14 17:22:59 | 显示全部楼层
默认支持的是512字节缓冲支持单个扇区写入,如果要多扇区写,需要修改USBH_MSC_MPS_SIZE,不然就自己在上层循环单扇区写入吧,速度慢很多的。经过测试如果不修改,直接多扇区模式写1024字节,但是USBH_MSC_MPS_SIZE还是0x200没修改过,那么后面写入的512内容是前面512的内容。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2020-12-15 08:49:13 | 显示全部楼层
U盘写个20M以上文件每次 4K写也没这问题,不知道你们这么多问题哪来的
1-1
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 00:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表