想通过枚举找到MP3文件,然后顺序播放,但是未能如愿。程序如下:帮忙看下问题出在哪?谢谢了
while(1) { while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ { delay_ms(100); } delay_ms(200); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */
USART1_SendByte(0xe3); /* 初始化磁盘并测试磁盘是否就绪 */ for ( k = 0; k < 100; k ++ ) /* 最长等待时间,100*50mS */ { delay_ms( 50 ); if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 准备好 */ else if ( CH376DiskMount( ) == ERR_DISK_DISCON ) break; /* 检测到断开,重新检测并计时 */ if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && k >= 5 ) break; /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */ } if ( CH376DiskMount( ) == ERR_DISK_DISCON ) { continue; }
/***********************/ pCodeStr = (char *)"\\*"; /* 列出根目录下的文件 */ for ( searchFileIndex = 0; searchFileIndex < 255; searchFileIndex++ ) { /* 最多搜索前255个文件 */ USART1_SendByte(0xe4); strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr ); /* 搜索文件名,*为通配符,适用于所有文件或者子目录 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 计算文件名长度,以处理文件名结束符 */ mCmdParam.Open.mPathName[ i ] = searchFileIndex; /* 根据字符串长度将结束符替换为搜索的序号,从0到255 */ ch375Result = CH376FileOpen( mCmdParam.Open.mPathName ); /* 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 */ if ( ch375Result == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */ if ( ch375Result == ERR_FOUND_NAME ) { /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */ nameLen = strlen( (char const *)mCmdParam.Open.mPathName ); if(nameLen < 4) continue; pExt = ((char *)mCmdParam.Open.mPathName) + nameLen - 4; if(strcmp(pExt, (char *)".MP3") == 0) { ch375Result = CH376FileOpen(mCmdParam.Open.mPathName ); /* 打开文件 */ if ( ch375Result != ERR_MISS_DIR && ch375Result != ERR_MISS_FILE ) { //mStopIfError( ch375Result ); //readSecCount = FILE_DATA_BUF_LEN / 512; if (ch375Result == USB_INT_SUCCESS) { u32FileLen = CH376GetFileSize(); /* 获取文件大小 */ while (u32DataCnt < u32FileLen) { SPI2_SetSpeed(SPI2_SPEED_8);//高速 pu8Temp = u8SectorBuf; CH376SecRead(pu8Temp, 1, 0); /*以扇区为单位从当前位置读取数据块,不支持SD卡*/ u32DataCnt += 512; SPI1_SetSpeed(SPI1_SPEED_16); //高速,对VS1003B,设置为4.5M
VS_XDCS = 0; m = 0; while (m < 512) //循环发送512个字节 { while (VS_DREQ == 0); //等待DREQ为高 for (j=0; j<32; j++) { SPI1_ReadWriteByte(*pu8Temp++); } m += 32; } VS_XDCS = 1; /*VS_XDCS = 1*/ } } } } } }