在使用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رÕLED1
f_mount(0,"3:",1); //D¶ÔØUÅì
POINT_COLOR=RED;//éèÖÃ×ÖìåÎaoìé«
Show_Str(30,140,200,16,"é豸ᬽóÖD...",16,0);
LCD_Fill(30,160,239,220,WHITE);
return res;
}
该段代码就是创建一个apolo.txt文件,然后向该文件一直写入0~255数据进行测试,最后观察apolo.txt文件内容:


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