大家好,我在Zephyr usb msc sd卡模拟u盘的例子中,使用stm32H743,测试向U盘拷贝文件,写入sd卡速度稳定在350KB/s。
以下是设备树节点配置
[C] 纯文本查看 复制代码 &sdmmc1 {
status = "okay";
pinctrl-0 = <&sdmmc1_ck_pc12
&sdmmc1_cmd_pd2
&sdmmc1_d0_pc8
&sdmmc1_d1_pc9
&sdmmc1_d2_pc10
&sdmmc1_d3_pc11>;
pinctrl-names = "default";
disk-name = "SD";
clk-div = <4>;
bus-width = <4>;
idma;
};
以下是conf配置
[C] 纯文本查看 复制代码 CONFIG_USB_DEVICE_STACK_NEXT=y
CONFIG_STDOUT_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UART_LINE_CTRL=y
CONFIG_USBD_MSC_CLASS=y
CONFIG_USBD_MSC_LUNS_PER_INSTANCE=3
CONFIG_LOG=y
CONFIG_USBD_LOG_LEVEL_WRN=y
CONFIG_UDC_DRIVER_LOG_LEVEL_WRN=y
CONFIG_SAMPLE_USBD_PID=0x0008
CONFIG_SAMPLE_USBD_PRODUCT="USBD MSC sample"
CONFIG_MAIN_STACK_SIZE=2048
CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_SDMMC_STM32_CLOCK_CHECK=n
# usbd_msc.c scsi_buf size, 64KB buffer for better performance
CONFIG_USBD_MSC_SCSI_BUFFER_SIZE=65536
# usbd_msc.c
# CONFIG_USBD_MSC_INSTANCES_COUNT=1
# usbd_msc.c
# CONFIG_USBD_MSC_LUNS_PER_INSTANCE=1
# usbd_core.c usbd_msgq max msg
CONFIG_USBD_MAX_UDC_MSG=64
# usbd_msg.c usbd_msg_slab slab count
CONFIG_USBD_MSG_SLAB_COUNT=64
我将SCSI的buffer放到了64K,但是持续写入的速度还是350KB/s。如果暂停传输,再开启传输,写入速度能达到1M/s,然后又回到了350KB/s。感觉是buffer满了,PC在等待zephyr写入SD卡。我查看了下stm32对应的驱动文件sdmmc_stm32.c,也没看到啥可以配置的。请问大家有没有什么方法能够提高写入速度?
|