eMMC Spec —— 8.eMMC分区管理(BOOT操作模式——第二部分)

本文详细介绍了eMMC设备的替代引导操作模式,适用于v4.4及以上版本。在启用此模式后,设备在特定条件下进入BOOT模式,并准备BOOT数据。主机通过EXT_CSD寄存器设置引导分区、速度模式等参数,并可选择接收BOOT确认。BOOT数据的传输涉及单数据速率和双数据速率模式,遵循特定的CRC和时序规则。启动操作完成后,设备将准备进行CMD1操作,恢复正常MMC初始化序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二、Alternative boot operation —— 替换引导操作模式

对于v4.4版以上的设备,此启动功能是必需的。遵循v4.4标准的设备必须在扩展CSD字节[228]中bit0显示为1,表示支持Alternative boot operation。

如果使能了Alternative boot operation, 那么在上电或复位操作(参数0xF0F0F0F0的CMD0或硬件复位),然后在发送CMD1或拉低cmd线超过74的时钟周期之前就发送0xFFFFFFFA作为参数的CMD0, device会识别出正在启动BOOT模式,并开始内部准备BOOT数据。

可以使用EXT_CSD字节[179],位[5:3]预先选择要从主设备读取引导数据的分区。 主机在引导操作期间可以读取的数据大小可以计算为128KB×BOOT_SIZE_MULT(EXT_CSD字节[226])。

在发出参数为0xFFFFFFFA的CMD0之后的1秒钟内,设备开始在DAT线上将第一个BOOT数据发送给host。

主机必须使用推挽模式,直到启动操作终止

主机通过设置EXT_CSD寄存器字节[177]位[4:3]可以选择使用具有向后兼容接口时序的单数据速率模式,具有高速接口时序的单数据速率或具有双数据速率时序(如果支持)的方式。

EXT_CSD寄存器字节[228]的bit[2:1]告诉主机,设备是否支持BOOT期间的高速时序或双倍数据率

主机通过设置EXT_CSD寄存器的字节[179]的bit6,使得主机可以选择从device中接收BOOT确认(即ACK)。这样主机可以识别出device正在BOOT模式下运行。

如果使能了BOOT ACK,则device必须在收到带有参数0xFFFFFFFA的CMD0之后的50ms内向host发送

### H618 设备 EMMC 启动配置方法 H618 是一款基于 ARM 架构的处理器,广泛应用于嵌入式开发领域。其支持通过 EMMC 进行系统启动,这通常涉及多个阶段的引导加载程序以及文件系统的初始化。 #### 1. 引导加载器(Bootloader) 在 H618EMMC 启动过程中,引导加载分为几个主要阶段: - **BL1 阶段**: BL1 是 ROM 中固化的一段代码,在硬件加电后自动执行。它负责初始化基本硬件环境并检测存储介质是否存在有效的后续引导加载器[^1]。 - **BL2 阶段**: 此阶段由 BL1 加载到 RAM 并运行。它的职责包括进一步初始化 CPU 和外设,并准备加载 U-Boot 或其他高级引导加载器。 - **U-Boot 阶段**: U-Boot 是一个功能强大的开源引导加载器,用于加载操作系统内核和根文件系统。对于 H618 来说,U-Boot 可以从 EMMC 的特定分区读取 `BOOT.BIN` 文件以及其他必要的镜像文件。 以下是典型的 U-Boot 配置命令片段: ```bash setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rw' fatload mmc 0:1 $kernel_addr_r Image bootm $kernel_addr_r ``` 这些命令设置了内核参数、加载 Linux 内核映像至内存地址 `$kernel_addr_r`,并通过 `bootm` 命令启动内核。 --- #### 2. 存储布局与分区表 为了实现可靠的 EMMC 启动,需要合理规划存储设备上的分区结构。常见的分区方案如下: | 分区编号 | 名称 | 描述 | |----------|--------------|-------------------------| | 1 | BOOT | 存放 `BOOT.BIN`, DTB | | 2 | ROOTFS | 根文件系统 | | 3 | USERDATA | 用户数据 | 具体操作可以通过工具如 `fdisk` 创建 GPT 或 MBR 分区表。例如: ```bash parted /dev/mmcblk0 mklabel gpt parted /dev/mmcblk0 mkpart primary fat32 0% 10% parted /dev/mmcblk0 mkpart primary ext4 10% 90% mkfs.fat -F 32 /dev/mmcblk0p1 mkfs.ext4 /dev/mmcblk0p2 ``` 以上脚本创建了一个 FAT32 类型的引导分区和 EXT4 类型的根文件系统分区。 --- #### 3. Petalinux 工具链的支持 如果采用 Xilinx 提供的 Petalinux 开发框架,则可以简化部分流程。需要注意的是,即使选择了 Primary SD/SDIO (`psu_sd_1`) 作为默认启动选项,仍需修改底层配置文件来适配实际需求[^2]。 编辑 `<plnx-proj-root>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h` 文件中的相关内容,确保定义了正确的启动路径和支持特性。 --- #### 4. 调试技巧 当遇到无法正常启动的情况时,可尝试以下调试手段: - 使用串口终端观察打印日志,定位失败的具体环节; - 检查 EMMC 是否已正确烧录所需固件; - 更新最新版本的 U-Boot 或调整编译选项以匹配目标平台。 --- ### 示例代码:自动生成分区表 下面是一个 Python 脚本示例,用于自动化生成适合 H618EMMC 分区表: ```python import subprocess def create_emmc_partitions(device_path): commands = [ f'parted {device_path} --script mklabel gpt', f'parted {device_path} --script mkpart primary fat32 0% 10%', f'parted {device_path} --script mkpart primary ext4 10% 90%' ] for cmd in commands: result = subprocess.run(cmd.split(), capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Error executing command: {cmd}\n{result.stderr}") create_emmc_partitions('/dev/mmcblk0') print("EMMC partitions created successfully.") ``` 此脚本利用 `subprocess` 执行 shell 命令完成分区创建工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值