RK3568 SD卡调试记录
文章目录
- 1、环境介绍
- 2、概念理清
- 3、原理图查看
- 4、dts配置
- 5、验证
- 6、SD卡启动
- 6.1、启动优先级
- 6.2、启动流程
- 6.2.1、Maskrom(Boot ROM)启动优先级
- 6.2.2、Pre-loader(SPL)启动优先级
- 6.3、如何从sd卡启动?
- 6.3.1、制作sd启动卡
- 6.3.2、sd卡启动
- 7、总结
1、环境介绍
硬件:飞凌ok3568-c开发板
软件:原厂rk356x sdk
2、概念理清
SD卡就是标准SD卡。而TF卡早期叫TF卡,后被SD标准化组织命名为Micro SD。SD卡和Micro SD卡支持SDIO协议和SPI协议。
RK3568有三个SDIO 3.0接口,用于连接外部SDIO卡设备,而SD卡或Micro SD卡就可以作为外部卡设备与SDIO控制器相连。
3、原理图查看
ok3568开发板中,tf卡接到了rk3568的SDMMC0接口,也就是SDIO0控制器。
4、dts配置
&sdmmc0 {
max-frequency = <150000000>; /* 配置SDMMC0的最大工作频率为150MHz */
supports-sd; /* 表明该SDMMC控制器支持SD卡 */
bus-width = <4>; /* 设置数据总线宽度为4位 */
cap-mmc-highspeed; /* 表明该SDMMC控制器支持MMC卡的高速模式 */
cap-sd-highspeed; /* 表明该SDMMC控制器支持SD卡的高速模式 */
disable-wp; /* 禁用写保护(Write Protect)功能,这意味着系统可以忽略SD卡上的写保护开关 */
sd-uhs-sdr104; /* 表明该SDMMC控制器支持SD UHS-SDR104模式(Ultra High Speed - SDR104,一种高速数据传输模式) */
vmmc-supply = <&vcc3v3_sd>;
vqmmc-supply = <&vccio_sd>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
status = "okay";
};
5、验证
请使用MBR分区表,fat32格式文件系统的tf卡验证。
登入系统后,查看未插入tf卡的挂载情况:
插入tf卡后,打印信息和挂载情况如下:
6、SD卡启动
6.1、启动优先级
rk文档《Rockchip_Developer_Guide_UBoot_Nextdev_CN.pdf》有描述如下:
6.2、启动流程
第一阶段:Boot ROM(Maskrom)从存储设备加载Pre-loader(SPL),其中emmc优先级大于sd卡。
第二阶段:Pre-loader(SPL)会从存储设备加载uboot,其中sd卡优先级大于emmc。
6.2.1、Maskrom(Boot ROM)启动优先级
关于Maskrom的启动优先级可以通过硬件来配置,如下图:
但似乎所有的配置中,emmc的优先级一直大于sd卡。
6.2.2、Pre-loader(SPL)启动优先级
SPL启动优先级可以通过设备树rkxxx-u-boot.dtsi来指定,但目前没体会到其作用:
6.3、如何从sd卡启动?
6.3.1、制作sd启动卡
6.3.2、sd卡启动
提前把emmc里的镜像擦除掉,系统断电,插入sd启动卡,系统上电,最后就可以从sd卡启动了。这是因为maskroom阶段中,在emmc找不到preloader,从而去sd卡里找。
那如何在emmc有镜像的前提下,还能从sd卡启动?
看很多博客说可以在uboot设备树rkxxxx-u-boot-dtsi里指定spl的启动优先级,但不知道为什么没有效果。
7、总结
参考文章:
RK3568开发笔记-sdmmc3.0 error -110 whilst initialising SD card问题解决-CSDN博客
https://zhuanlan.zhihu.com/p/654132684
RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序_zhangsz的技术博客_51CTO博客