最近在做一个项目,STM32F105来读写U盘,由于是第一次搞,所以参照的是原子哥STM32F407的U盘程序,FATFS移植的是FATFS0.13a,USB库就是用的原子哥的,程序可以正常检测U盘
下面是串口打印的信息
***************************************************************************
USB OTG HS MSC Host
> USB Host library started.
USB Host Library v2.1.0
检测到USB设备插入!
复位设备...
全速(FS)USB设备!
VID: 1234h
PID: FFFFh
从机地址分配成功!
可移动存储器设备!
Manufacturer: TE
Product: USB
Serial Number: 90A20200A98A0009
设备枚举完成!
跳过用户确认步骤!
Processing...
开始执行用户程序!!!
挂载U盘系统
FATFS OK!
U盘总容量: 4039 MB
U盘剩余容量: 1682 MB
*********************************************************************************************************
但是一旦调用
res = f_open( &fsrc , "0://t.c" , FA_CREATE_NEW | FA_WRITE); //创建“t.c”文件
if ( res != FR_OK )
{
printf("返回值 res = %d
",res);
}
重复复位的现象************************************************************************************************************
USB OTG HS MSC Host
> USB Host library started.
USB Host Library v2.1.0
检测到USB设备插入!
复位设备...
全速(FS)USB设备!
VID: 1234h
PID: FFFFh
从机地址分配成功!
可移动存储器设备!
Manufacturer: TE
Product: USB
Serial Number: 90A20200A98A0009
设备枚举完成!
跳过用户确认步骤!
开始执行用户程序!!!
挂载U盘系统
读写U盘文件
USB连接成功
读写U盘文件
读写U盘文件
读写U盘文件
FATFS OK!
U盘总容量: 4039 MB
U盘剩余容量: 1682 MB
读写U盘文件
返回值 res = 1
USB OTG HS MSC Host
> USB Host library started.
USB Host Library v2.1.0
检测到USB设备插入!
复位设备...
全速(FS)USB设备!
Processing...
VID: 1234h
PID: FFFFh
从机地址分配成功!
可移动存储器设备!
Manufacturer: TE
Product: USB
Serial Number: 90A20200A98A0009
设备枚举完成!
跳过用户确认步骤!
开始执行用户程序!!!
挂载U盘系统
读写U盘文件
USB连接成功
读写U盘文件
读写U盘文件
读写U盘文件
FATFS OK!
U盘总容量: 4039 MB
U盘剩余容量: 1682 MB
读写U盘文件
返回值 res = 1
*******************************************************************************************
res 返回值 为1 FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
也就是硬件驱动层错误,不理解的是如果是驱动错误为什么能读取U盘的设备信息,
下面是U盘读写程序,也是参照原子哥的,不知道是不是下面函数的问题,整个项目工程上传到附件,有搞过的大神能否帮忙看下
[mw_shl_code=c,true]
//读U盘
//buf:读数据缓存区
//sector:扇区地址
//cnt:扇区个数
//返回值:错误状态;0,正常;其他,错误代码;
u8 USBH_UDISK_Read(u8* buf,u32 sector,u32 cnt)
{
u8 res=1;
printf("读写U盘文件
");
if(HCD_IsDeviceConnected(&USB_OTG_Core)&&AppState==USH_USR_FS_TEST)//连接还存在,且是APP测试状态
{
do
{
res=USBH_MSC_Read10(&USB_OTG_Core,buf,sector,512*cnt);
USBH_MSC_HandleBOTXfer(&USB_OTG_Core ,&USB_Host);
if(!HCD_IsDeviceConnected(&USB_OTG_Core))
{
res=1;//读写错误
break;
};
}while(res==USBH_MSC_BUSY);
}else res=1;
if(res==USBH_MSC_OK)res=0;
return res;
}
//写U盘
//buf:写数据缓存区
//sector:扇区地址
//cnt:扇区个数
//返回值:错误状态;0,正常;其他,错误代码;
u8 USBH_UDISK_Write(u8* buf,u32 sector,u32 cnt)
{
u8 res=1;
if(HCD_IsDeviceConnected(&USB_OTG_Core)&&AppState==USH_USR_FS_TEST)//连接还存在,且是APP测试状态
{
do
{
res=USBH_MSC_Write10(&USB_OTG_Core,buf,sector,512*cnt);
USBH_MSC_HandleBOTXfer(&USB_OTG_Core ,&USB_Host);
if(!HCD_IsDeviceConnected(&USB_OTG_Core))
{
res=1;//读写错误
break;
};
}while(res==USBH_MSC_BUSY);
}else res=1;
if(res==USBH_MSC_OK)res=0;
return res;
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>