新手上路
- 积分
- 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//主播放循环
..............................................
|
|