请问CH378Q这个芯片扇区读写和字节读写各有什么优劣啊?

请问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了吗?


您好,这两步骤是为了算出,当前文件里面,实际的数据长度是多少。后面再把写入378缓冲区的数据长度也加载里面。算出实际长度,进行U盘或者SD卡写入。


你好,烦请一一回答以下几个问题.

  1. 请问CH378Q这个芯片扇区读写和字节读写各有什么优劣

  2. 你们有字节读写的例程吗?

  3. 08H模式下能达到480Mbps高速USB通讯吗?

  4. 程序标红部分CH378GetFileSize();已经是获取了文件长度了呀,如果我没搞错的话NewSize -= DEF_SECTOR_SIZE - total;应该是等同于NewSize = NewSize-(DEF_SECTOR_SIZE - total);到这里就完全不能理解了. 这个获取到的NewSize为什么要减去一个扇区呢?


您好

  1. 扇区读写比字节读写,速度上会更加快

  2. 字节读写的Demo,您可以参考CH378EVT里面的EXAM1。或者发送邮件至mj@wch.cn。可以提供ST的相关工程。

  3. 读卡器模式下,USB为2.0高速,但是实际的带宽是小于这个的。

  4. 因为前面的处理中使用了扇区写,扇区写是针对一整个扇区的,再加上这个零头数据的时候,指针就得偏回去去掉一个扇区大小。


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