请问CH378Q这个芯片扇区读写和字节读写各有什么优劣啊?
还有你们有字节读写的例程吗?
08H模式下能达到480Mbps高速USB通讯吗?
还有个程序问题请麻烦一一回答下.
你好,网上下载的例程里面有一个 EXAM8这么个例程.里面的
mFlushBufferToDisk属实让人看不懂?
void mFlushBufferToDisk(UINT8 force)
{
UINT8 status;
if (force) /* 强制刷新 */
{
status = (total + DEF_SECTOR_SIZE - 1) / DEF_SECTOR_SIZE; /* 将缓冲区中的字节数转换为扇区数(除以DEF_SECTOR_SIZE),长度加上DEF_SECTOR_SIZE-1用于确保写入最后的零头数据 */
if (status)
{
/* 有数据 */
status = CH378SecWrite(FileDataBuf, status, NULL); /* 以扇区为单位向文件写入数据,写入缓冲区中的所有数据,含最后的零头 */
mStopIfError(status);
/* 有些U盘可能会要求在写数据后等待一会才能继续操作,所以,如果在某些U盘中发生数据丢失现象,建议在每次写入数据后稍作延时再继续 */
mDelaymS(1); /* 写后延时,可选的,大多数U盘不需要 */
memcpy(FileDataBuf, & FileDataBuf[ total & ~(DEF_SECTOR_SIZE - 1) ], total & (DEF_SECTOR_SIZE - 1)); /* 将刚才已写入U盘的零头数据复制到缓冲区的头部 */
total &= DEF_SECTOR_SIZE - 1; /* 缓冲区中只剩下刚才已写入U盘的零头数据,继续保留在缓冲区中是为了方便以后在其后面追加数据 */
}
NewSize = CH378GetFileSize(); /* 读取当前文件长度,如果没有零头数据,那么文件长度是DEF_SECTOR_SIZE的倍数 */
if (total)
{
NewSize -= DEF_SECTOR_SIZE - total; /* 以扇区为单位,有零头数据,计算出真正的文件长度(有效数据的长度) */
}
CH378WriteVar32(VAR32_FILE_SIZE, NewSize); /* 将正确的当前文件长度写入CH378内存 */
printf("Current File Size is %ld\n", NewSize);
status = CH378SecWrite(FileDataBuf, 0, NULL); /* 写0长度,实际是刷新文件长度,将CH378内存中当前文件长度信息真正写入U盘或者SD卡中 */
mStopIfError(status);
status = CH378SecLocate(0xFFFFFFFF); /* 重新回到原文件的尾部,以扇区为单位,所以会忽略文件尾部的零头数据,下面如果再写入数据将覆盖尾部零头数据,不过该零头数据有一份副本保留在缓冲区中,所以请放心 */
mStopIfError(status);
}
标红的地方为什么要这样操作,CH378GetFileSize(); 不就是获取的实际文件长度吗? 为什么还要判断total一下,而且如果获取的文件长度是 515那么这么处理(NewSize -= DEF_SECTOR_SIZE - total;)了一下 不就剩下了5了吗?