CH376T 芯片的U盘写入速率问题

请问一下CH376T用SPI通讯,SPI速率8M,写入U盘的速率一般是多少?刚测试才几kB,差太远了,写入函数用的是CH376ByteWrite()。

应该是程序有问题,速率差太远了,是不是写入函数调用错了?或者流程问题?有没有写入U盘的例程?

SPI方式,数据流取决“时钟频率+数据间间隔时间”,

文件读写速度:

连续读出或写入 > 打开+读写+关闭+打开+读写+关闭…循环,

扇区方式操作(512Byte单位) > 字节方式操作(最小1Byte)


有看到说CH376S并口最高可以到200kB/s,CH376T SPI接口有测试过理论最高速率吗?


理论读取最大600K

写入大概只有一半


您说的这个速率是k Byte还是k bit?我实际测试写入只有16KByte/s,读取19KByte/s,用secWrite写入才9kByte/s,secRead读会卡住,不清楚什么原因。

大佬能帮忙看下哪里有问题吗?测试代码如下:


#define SEC_NUM 10

    UINT8  writedata[512], readbuf[512];

    UINT8  RealReadCount = 0, RealWriteCount = 0;


    memset(writedata, 'A', sizeof(writedata));

    xLastTickCount = xTaskGetTickCount();

    NRF_LOG_INFO("now systick:%d", xLastTickCount);


    //Write

    s = CH376FileOpen("/SEC.TXT");

    if(s = ERR_MISS_FILE) {

        s = CH376FileCreate("/SEC.TXT");

    }


    if ( s == USB_INT_SUCCESS ) {

        NRF_LOG_INFO("Open, write .txt file");

        for(i = 0; i < SEC_NUM; i++) {

            CH376SecWrite(writedata, 1, &RealWriteCount);

        }

        CH376FileClose( TRUE );

        NRF_LOG_INFO("write cnt: %d, total:%d", RealWriteCount, RealWriteCount*i*512);

    }

    else {

        NRF_LOG_INFO("error:0x%x", s);

    }

    xTickCount = xTaskGetTickCount();

    times = xTickCount - xLastTickCount;

    speed = RealWriteCount * i * 512 * 1000 / 1024 / times;

    NRF_LOG_INFO("write tick count: %d, speed:%d kb/s", times, speed);


    filesize = CH376GetFileSize( );

    NRF_LOG_INFO( "File size = %ld\n", filesize );

    xLastTickCount = xTaskGetTickCount();

    vTaskDelay(20);

    xTickCount = xTaskGetTickCount();

    NRF_LOG_INFO("delay cnt:%d\n", xTickCount - xLastTickCount);


    //Read

    s = CH376FileOpen("/SEC.TXT");

    if ( s == USB_INT_SUCCESS ) {

        NRF_LOG_INFO("Open, read .txt file");

        CH376SecLocate( 0 );

        for(i = 0; i < SEC_NUM; i++) {

            CH376SecRead( readbuf, 1, &RealReadCount );

        }

        CH376FileClose( TRUE );

        NRF_LOG_INFO("read cnt: %d, total byte: %d", RealReadCount, RealReadCount*i*512);

    }

    else {

        NRF_LOG_INFO("error:0x%x", s);

    }

    xTickCount = xTaskGetTickCount();

    times = xTickCount - xLastTickCount;

    speed = RealReadCount * i * 512 * 1000 / 1024 / times;

    NRF_LOG_INFO("read tick count: %d, speed:%d kb/s", times, speed);



CH376SecRead函数还是失败,一直卡住,另外,用10240Byte的buff进行测试,单次写入整个buff,10KB数据,分别测试写入1次和循环写入5次,测试结果如下:

Sector

    1. 一个sector512Byte,单次写入20sector,总计10KB数据,用时898ms,速度11KB/s

    2. 单次写入20sector,循环5次,总计50KB数据,用时4315ms,速度11KB/s

Byte

    1. 单次写入10240 Byte,总计10KB数据,用时613ms,速度16KB/s

    2. 读取10KB用时447ms,速度20KB/s

    3. 单次写入20sector,循环5次,总计50KB数据,用时2891ms,速度17KB/s

    4. 读取50KB用时2371ms,速度21KB/s

为什么扇区写入会比Byte写入速率更慢?并且最高速度才21KB,和您说的200KB相差10倍!

我使用的是CH376T,SPI通讯速度8M,能帮忙看下是什么问题吗?

主要遇到的困难:

  1. 扇区读函数会卡死

  2. 扇区写比Byte写速度慢1倍

  3. 最快速度仅20KB/s,是贵司测试速度的十分之一


你芯片工作电压是5V吧,还有376SPI最高到24M,你调到20M试试


CH376T的VCC给的是3.3V,datesheet中写支持5V,3.3V,3V三种供电电压,供电电路参考的是datesheet中的电路图。SPI目前最高只能是8M,能上20M的给屏幕用了。

能麻烦您帮忙测一下8M SPI下U盘的读写速度吗?分别测Byte读写和Sec读写。


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