硬汉嵌入式论坛

 找回密码
 立即注册
查看: 228|回复: 2
收起左侧

[Zephyr] Zephyr usb msc 写入sd卡速度只有350KB/s

[复制链接]

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2025-9-9 15:48:31 | 显示全部楼层 |阅读模式
大家好,我在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,也没看到啥可以配置的。请问大家有没有什么方法能够提高写入速度?
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
发表于 2025-9-9 17:56:06 | 显示全部楼层
本帖最后由 bricle 于 2025-9-9 17:57 编辑

1. 先看sd卡单独读写速度
sdmmc1节点下加上这个属性,
        clocks = <&rcc STM32_CLOCK(AHB3, 16U)>,
                                 <&rcc STM32_SRC_PLL2_R SDMMC_SEL(1)>;
目的是把时钟源设置为PLL2R,240M(默认是用HSI 48M时钟,太慢了),clk-div可以降低到2或者3

改了时钟配置需要加上这个配置CONFIG_SDMMC_STM32_CLOCK_CHECK=n

用tests/drivers/disk/disk_performance这个测试测试一下读写速度

2. zephyr的usb性能就是很差,不用怀疑
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2025-9-9 21:00:49 | 显示全部楼层
bricle 发表于 2025-9-9 17:56
1. 先看sd卡单独读写速度
sdmmc1节点下加上这个属性,
        clocks = ,

那完了,公司要做USB设备,我还准备用zephyr整整,看来只能退回去用threadx了,usbx的性能怎么样呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-9-26 09:28 , Processed in 0.042823 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表