优化瑞芯微rk3566 tf卡速度uhs SDR104

环境

开发板:orangepi3B
CPU:rk3566
TF卡速度标识:C10,U3,V30

起因

对于tf卡启动的系统来说,io会成为一个很关键的瓶颈,所以总希望系统能跑得快一点。我手头用的是一张金士顿的高性能tf卡,开机启动发现比emmc慢不少,用dd命令简单测速发现tf卡读写速度都只有25Mb/s而这个卡在usb3.0读卡器加持下可以达到80Mb/s的写入,150Mb/s的读取速度,最后发现SDIO工作模式不正确导致的,下面说一下解决过程,方法理论上适用于所有支持sdio uhs的开发板。

解决过程

翻阅orangepi3b内核设备树配置,发现这个板子是支持uhs SDR104并且已经启用了uhs SDR104功能的。
从tf卡启动系统之后查看内核日志发现tf卡工作在high speed模式,频率只有50MHz,这里orangepi3b tf卡用了mmc1这个位置,mmc0是emmc

root@orangepi3b:/home/orangepi# dmesg |grep mmc1
[   10.260135] vccio_sd: ramp_delay not set
[   10.272792] mmc_host mmc1: Bus speed (slot 0) = 375000Hz (slot req 400000Hz, actual 375000HZ div = 0)
[   10.314653] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz, actual 50000000HZ div = 0)
[   10.314992] mmc1: new high speed SDXC card at address 5048
[   10.316478] mmcblk1: mmc1:5048 SD128 116 GiB 
[   10.325545]  mmcblk1: p1 p2

查看debugfs亦是如此:

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios 
clock:          50000000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    2 (sd high-speed)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)

但是,但是,但是,从emmc启动系统之后再插入tf卡,而不是从tf卡启动系统,情况就变得不一样了

root@orangepi3b:/home/orangepi# dmesg |grep mmc1
[ 4156.323455] vccio_sd: ramp_delay not set
[ 4156.346018] mmc_host mmc1: Bus speed (slot 0) = 148500000Hz (slot req 150000000Hz, actual 148500000HZ div = 0)
[ 4156.610947] dwmmc_rockchip fe2b0000.dwmmc: Successfully tuned phase to 270
[ 4156.610973] mmc1: new ultra high speed SDR104 SDXC card at address 5048
[ 4156.612291] mmcblk1: mmc1:5048 SD128 116 GiB 
[ 4156.617655]  mmcblk1: p1 p2
root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios 
clock:          150000000 Hz
actual clock:   148500000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    6 (sd uhs SDR104)
signal voltage: 1 (1.80 V)
driver type:    0 (driver type B)

那问题也显而易见了,tf卡在uboot启动阶段被初始化成了high speed模式,然后内核在初始化的时候并没有再去重新配置tf卡的速度和工作模式了,这里有一个比较简单的办法在tf卡启动系统过后切换到uhs SDR104模式:

root@orangepi3b:/home/orangepi# echo 150000000 > /sys/kernel/debug/mmc1/clock

只需要将sdio口的评率设置上去即可,这个时候再看debugfs会发现评率其实已经切换了,但是模式还没有切换,这个不用担心,之后对tf进行读写操作就会切换tf卡的模式为uhs SDR104了

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios 
clock:          150000000 Hz
actual clock:   148500000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    2 (sd high-speed)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)

切换过后一会儿的效果,可以看到模式已经切换到SDR104

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios 
clock:          150000000 Hz
actual clock:   148500000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    6 (sd uhs SDR104)
signal voltage: 1 (1.80 V)
driver type:    0 (driver type B)

这个方法的缺点是系统启动完成过后才能切换,开机速度依然上不去。
这个方法理论上适用于其他芯片和板子,希望这边文章能对tf卡启动开发板的小伙伴有一定的帮助。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值