OpenEdv-开源电子网

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

USB U盘 HOST实验写文件错误

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-7-6
在线时间
13 小时
发表于 2020-11-21 15:14:19 | 显示全部楼层 |阅读模式
5金钱
在使用STM32F407阿波罗开发板测试U盘 HOST实验时遇到了这样一个问题:在开发板上直接插入常规U盘,向U盘里边写入一个txt文件时,文件内容正常;插入一个MP3音频模块时,写入数据会出错!该MP3音频模块板载了一个SD卡,用户可以通过模块上的USB接口连接到电脑上,拷贝音频文件进去,在电脑上上测试使用没有问题。但是接到开发板上USB,向音频模块内SD卡写文件总是会出错,具体分析了文件出错的规律是:
写入文件每隔512字节,该512字节的最后64字节都是错的,而前448字节不会出错。具体测试部分代码如下:
u8 USH_User_App(void)
{  
        u16 i;
        u32 total,free;
        u8 res=0;
        Show_Str(30,140,200,16,"é豸ᬽó3é1|!.",16,0);         
  res=f_mount(fs[3],"3:",1);         //ÖØDÂ1òÔØUÅì
        res=exf_getfree("3:",&total,&free);
        if(res==0)
        {
                POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«          
                LCD_ShowString(30,160,200,16,16,"FATFS OK!");       
                LCD_ShowString(30,180,200,16,16,"U Disk Total Size:     MB");         
                LCD_ShowString(30,200,200,16,16,"U Disk  Free Size:     MB");             
                LCD_ShowNum(174,180,total>>10,5,16);//ÏÔê¾UÅì×üèYá¿ MB
                LCD_ShowNum(174,200,free>>10,5,16);       
        }
        while(HCD_IsDeviceConnected(&USB_OTG_Core))//é豸ᬽó3é1|
        {       
                LED1=!LED1;
                delay_ms(10);
                tempcount10ms++;
                for(i=0;i<512;i++)
                {
                        MP3tempbuf=i;
                }
                write_MP3_data(tempcount10ms,&user_fie_wMP3,user_filename_MP3,
                MP3tempbuf,512);
                if(tempcount10ms>=0x26)
                {
                        tempcount10ms=0;
                }
        }
        LED1=1;                                //1&#216;±&#213;LED1
        f_mount(0,"3:",1);         //D&#182;&#212;&#216;U&#197;ì
        POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;          
        Show_Str(30,140,200,16,"éè±&#184;á&#172;&#189;ó&#214;D...",16,0);
        LCD_Fill(30,160,239,220,WHITE);
        return res;
}


该段代码就是创建一个apolo.txt文件,然后向该文件一直写入0~255数据进行测试,最后观察apolo.txt文件内容:


图片中红色部分就是数据出错的内容,显然该64字节被上一段64字节内容覆盖了,请教原子哥这个可能是哪一块的问题引起的?FATFS文件系统还是USB HOST的驱动问题呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-11-22 01:08:07 | 显示全部楼层
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-7-6
在线时间
13 小时
 楼主| 发表于 2020-11-22 23:06:04 | 显示全部楼层
问题已经解决了,我重新用STM32CubeMX生成了一个USB HOST的驱动和FATFS文件系统,调试好之后能够正确给音频模块SD卡写文件了;然后我大概看了一下STM32CubeMX生成的驱动,和开发板例程移植的驱动区别较大,版本和代码风格都不一样,不好做对比。估计还是STM32官方开发板的USB驱动有一定的问题,我对USB底层的实现原理也未作深入研究,暂时也分析不到问题所在。
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-7-6
在线时间
13 小时
 楼主| 发表于 2020-11-22 23:07:02 | 显示全部楼层
问题解决了
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
发表于 2020-11-24 10:54:36 | 显示全部楼层
哥们做过usb_device的吗?有的话可以把工程或思路给我指点一下吗?谢谢了!!
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-7-6
在线时间
13 小时
 楼主| 发表于 2020-11-24 13:50:13 | 显示全部楼层
wangertan 发表于 2020-11-24 10:54
哥们做过usb_device的吗?有的话可以把工程或思路给我指点一下吗?谢谢了!!

usb_device正点原子也有可以参考的例程呢,或者你用cubeMX同样可以生成相关驱动
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
发表于 2020-11-24 13:55:05 | 显示全部楼层
tangsun 发表于 2020-11-24 13:50
usb_device正点原子也有可以参考的例程呢,或者你用cubeMX同样可以生成相关驱动

我使用cube生成对应的驱动之后不知道该咋测试了?直接f_mount  f_open 吗?但是我的usb一到f_open就会出错,返回三。我还想请教一下那个vbus怎么使用的,直接配置就好了吗?我们的原理图上还连接了一个usb_in,这个引脚是不是相当于sd卡里的检测引脚呢?感谢回帖!!
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-7-6
在线时间
13 小时
 楼主| 发表于 2020-11-25 21:12:03 | 显示全部楼层
wangertan 发表于 2020-11-24 13:55
我使用cube生成对应的驱动之后不知道该咋测试了?直接f_mount  f_open 吗?但是我的usb一到f_open就会出错 ...

返回3驱动都没有准备就绪,应该是你的USB没有整好吧,你是做device,我的应用时HOST,不一样的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 03:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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