CH376扇区读取

CH376如何进行扇区读取...CH376SecRead这个函数怎么运用,公司给的资料解释太少了...初学者看得不是很明白

扇区读函数CH376SecRead( buf, ReqCount, RealCount )是从当前已打开文件中读取数据,每次读取后自动移动文件指针,第二次调用时将从第一次读取数据的后面继续读取数据。在调用该子程序前,应该在buf 中指定缓冲区起始地址,在ReqCount中指定准备读取的扇区数。具体应用参考EXAM8


EXAM8看过了...里面具体讲的还是写扇区...读扇区只是带过而已... 可以帮我看下下面这个程序吗...我用串口演示...不停地输出的文字...怎样才能读取完扇区就结束... while( NewSize ){ s = CH376SecLocate( 0 ); /* 移动到第一个字节 */ mStopIfError( s ); total = ( NewSize + DEF_SECTOR_SIZE - 1 ) / DEF_SECTOR_SIZE; /* 将文件的字节数转换为扇区数(除以DEF_SECTOR_SIZE),长度加上DEF_SECTOR_SIZE-1用于确保写入最后的零头数据 */ printf( "Read last tail = %d Bytes\n", total ); s = CH376SecRead( FileDataBuf, total, &RealCount ); /* 从文件读取数据 */ mStopIfError( s ); total -= RealCount; /* 计数,减去当前实际已经读出的字符数 */ printf( "NewSize = %d Bytes\n", NewSize ); printf( "RealCount = %d Bytes\n", RealCount ); for ( s=0; s!=512; s++ ) printf( "%C", FileDataBuf[s] ); /* 显示读出的字符 */ printf( "文件已经结束\n" ); if( total == 0 ) { printf( "\n" ); printf( "\n" ); printf( "文件已经结束\n" ); goto Close; } }


上面的流程没什么问题,但注意我们CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount )改成 CH376SecRead( PUINT8 buf, UINT8 ReqCount, UINT16 *RealCount )。因为实际读出扇区数定义类型与你定义类型不一致导致RealCount不正确,所以跳不出循环。


现在扇区读写成功了...用VS1053解码也成功了...但是两个模块整合起来不行...请问下376读取数据后让1053解码的思路是怎样的...我尝试读取一个扇区解码一次这个方法不行...不知是程序的哪个地方处理错误...

while( NewSize ){ /* 扇区有字节读出 */ s = CH376SecLocate( 0 ); /* 移动到第一个字节 */ mStopIfError( s ); /* 检错 */ total = ( NewSize + DEF_SECTOR_SIZE - 1 ) / DEF_SECTOR_SIZE; /* 将文件的字节数转换为扇区数(除以DEF_SECTOR_SIZE),长度加上DEF_SECTOR_SIZE-1用于确保写入最后的零头数据 */ printf( "Read sector = %d \n", total ); /* 准备要读的扇区数 */ while( total ) /* 如果扇区未读完,则继续读扇区 */ { s = CH376SecRead( FileDataBuf, 1, NULL ); /* 从文件读取数据 */ mStopIfError( s ); /* 检错 */ test_1053_PlayMP3File(); total --; /* 计数,减去当前实际已经读出的扇区数 */ } if( total == 0 ) /* 如果要读的扇区等于0,则文件读到尾部 */ { printf( "\n" ); printf( "文件已经结束\n" ); goto Close; /* 关闭文件 */ } }


建议采用双缓冲的方式来进行读取和播放,在播放过程中插入读取函数。你只需要保证读取U盘的速度在100KB/S的速度基本上播放就没有问题。


双缓冲方式?怎么用呢...


双缓冲方式就是你开启两个缓冲区,第一个缓冲区读取U盘数据后进行解码,在解码的时候可以用第二个缓冲区读取U盘数据,当第一个缓冲区解码完成第二个缓冲区也读满了,然后开始第二个缓冲区解码,此时第一个缓冲区读数据。如此循环即可


只有登录才能回复,可以选择微信账号登录