RK3568 SD卡调试记录

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、总结

嵌入式Linux学习交流群:424571391
参考文章:

RK3568开发笔记-sdmmc3.0 error -110 whilst initialising SD card问题解决-优快云博客

https://zhuanlan.zhihu.com/p/654132684

RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序_zhangsz的技术博客_51CTO博客

### RK3568 芯片通过 SD 启动的相关配置与设置 RK3568 是一款高性能、低功耗的处理器,广泛应用于嵌入式设备中。为了实现通过 SD 启动的功能,通常需要完成以下几个方面的操作: #### 1. 启动模式的选择 RK3568 支持多种启动方式,包括 eMMC、SPI-NOR Flash 和 SD/MMC 等。默认情况下,启动顺序可以通过硬件引脚或软件配置来决定。如果希望优先从 SD 启动,则需确保 BootROM 的引导逻辑能够识别并加载来自 SD 的数据。 对于某些开发板而言,可能还需要手动调整跳线帽(Jumper Cap),以指定从哪个存储介质启动[^4]。 #### 2. 配置 U-Boot 引导程序 U-Boot 是一个常用的开源引导加载程序,负责初始化硬件并将控制权交给操作系统内核。针对 RK3568 平台,可以下载官方支持的 U-Boot 版本,并按照以下步骤进行编译和烧录: - **获取源码** ```bash git clone https://github.com/u-boot/u-boot.git cd u-boot/ ``` - **选择目标平台** ```bash make rk3568_defconfig ``` - **编译** ```bash make -j$(nproc) ``` 完成后会生成 `u-boot.img` 文件,该文件需要写入到 SD 的第一个扇区位置以便被 BootROM 加载运行。 #### 3. 准备根文件系统 除了 U-Boot 外,还需要准备适合的目标系统的根文件系统镜像(rootfs)。常见的做法是从 Linux 发行版提取现成的 rootfs 或者自行构建定制化版本。之后将其放置于 FAT32 格式的分区上供后续挂载使用。 注意:部分 Rockchip SoCs 可能要求特定布局结构,请参照具体文档说明执行相应处理过程[^5]。 #### 4. 测试验证流程 将制作好的 SD 插入开发板对应的插槽后通电开机即可进入测试阶段。正常状况下应该能看到串口调试终端打印出来的日志消息表明成功完成了整个启动链路。 --- ```python import os def check_sd_boot(): """模拟检查SD启动状态""" sd_path = "/dev/mmcblk0" if os.path.exists(sd_path): print(f"Detected SD Card at {sd_path}") else: print("No SD Card detected.") check_sd_boot() ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值