| 
 
新手上路 
 
	积分47金钱47 注册时间2017-9-27在线时间11 小时 | 
 
1金钱 
| 本帖最后由 yiba13 于 2018-1-24 10:46 编辑 
 用的正点原子VS1053语音模块,移植例程的程序。测试了FATFS的对tf卡的读取TF卡里面的文件名是正常的。
 对于例程中的FATFS的部分并没有做什么修改,以下是ffconf.h里面的一些宏定义。
 #define _CODE_PAGE        936        //采用中文GBK编码 #define        _USE_LFN        3 #define        _MAX_LFN        255
 问题:
 当tf卡里面mp3文件名为数字或者几个字母命名如:0.mp3或者yh.mp3的时候程序可以正常运行,音乐可以播放;
 但当tf卡里面mp3文件名为中文如:测试.mp3的时候f_open返回6号错误FR_INVALID_NAME。
 下面是代码:
 u8 mp3_play_song(u8 *pname)
 {
 FIL* fmp3;
 u16 br;
 u8 res,rval;
 u8 *databuf;
 u16 i=0;
 u8 key;
 rval=0;
 fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//申请内存
 databuf=(u8*)mymalloc(SRAMIN,4096);                //开辟4096字节的内存区域
 if(databuf==NULL||fmp3==NULL)rval=0XFF ;//内存申请失败.
 if(rval==0)
 {
 VS_Restart_Play();                                          //重启播放
 VS_Set_All();                                                //设置音量等信息
 VS_Reset_DecodeTime();                                        //复位解码时间
 res=f_typetell(pname);                                          //得到文件后缀
 if(res==0x4c)//如果是flac,加载patch
 {
 VS_Load_Patch((u16*)vs1053b_patch,VS1053B_PATCHLEN);
 }
 res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//打开文件失败,返回6号错误FR_INVALID_NAME
 printf("pname=%s\n",pname);
 printf("res=%u\n",res);//结果为6
 if(res==0)//打开成功.
 {
 VS_SPI_SpeedHigh();        //高速
 while(rval==0)
 {
 res=f_read(fmp3,databuf,4096,(UINT*)&br);//读出4096个字节
 i=0;
 do//主播放循环
 ..............................................
 
 
 
 
 
 
 | 
 |