本文主要是介绍优化瑞芯微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卡启动开发板的小伙伴有一定的帮助。
这篇关于优化瑞芯微rk3566 tf卡速度uhs SDR104的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!