17浏览
查看: 17|回复: 0

[ESP8266/ESP32] read读取sdcard数据速率太低怎么办

[复制链接]
第一次做esp32,有没有大佬解答下
背景:
esp32c6
esp-idf环境
esp版本:5.3.1
代码:
sdcard初始化
  1. void SD_card_Init(void)
  2. {
  3.   esp_vfs_fat_sdmmc_mount_config_t mount_config =
  4.   {
  5.     .format_if_mount_failed = false,    //If the hook fails, create a partition table and format the SD card
  6.     .max_files = 5,                    //Maximum number of open files
  7.     .allocation_unit_size = 512  //Similar to sector size
  8.   };
  9.   spi_bus_config_t bus_cfg =
  10.   {
  11.     .mosi_io_num = PIN_NUM_MOSI,
  12.     .miso_io_num = PIN_NUM_MISO,
  13.     .sclk_io_num = PIN_NUM_CLK,
  14.     .quadwp_io_num = -1,
  15.     .quadhd_io_num = -1,
  16.     .max_transfer_sz = 4000,   //Maximum transfer size   
  17.   };
  18.   ESP_ERROR_CHECK_WITHOUT_ABORT(spi_bus_initialize(SD_SPI, &bus_cfg, SDSPI_DEFAULT_DMA));
  19.   sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
  20.   slot_config.gpio_cs = PIN_NUM_CS;
  21.   slot_config.host_id = SD_SPI;
  22.   sdmmc_host_t host = SDSPI_HOST_DEFAULT();
  23.   host.slot = SD_SPI;
  24.   host.max_freq_khz = SDMMC_FREQ_DEFAULT;//20MHz
  25.   host.flags = host.flags | SDMMC_HOST_FLAG_4BIT;
  26.   ESP_ERROR_CHECK_WITHOUT_ABORT(esp_vfs_fat_sdspi_mount(SDlist, &host, &slot_config, &mount_config, &card));
  27.   if(card != NULL)
  28.   {
  29.     sdmmc_card_print_info(stdout, card); //Print out the card information
  30.     printf("practical_size:%.2fG\n",(float)(card->csd.capacity)/2048/1024);//g
  31.     example_test_file_operations();
  32.   }
  33. }
复制代码

读取数据
  1. FILE *f = fopen(path, "rb");
  2.   if (f == NULL)
  3.   {
  4.     printf("path:Read Wrong path\n");
  5.     return ESP_ERR_NOT_FOUND;
  6.   }
  7.   uint32_t unlen = 1024*30;
  8.   start_tick = xTaskGetTickCount();
  9.   uint32_t poutLen = fread((void *)pxbuf,1,unlen,f);
  10.   end_tick = xTaskGetTickCount();
复制代码

时钟节拍的频率我设置成了1000;及一个tick大约1ms;end_tick-start_tick大约为30ms(30个ticks)左右;
问题:
max_freq_khz最大频率为20MHz,理论上传输速率应该是10MB/s;但是读取30k的数据耗时30ms;速率为1MB/s;这和最大速率相差太多了吧?
请问是什么原因?怎么解决?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail