EMMC协议

转载RK3399 eMMC硬件设计要点_rk3399原理图-优快云博客

参考:

eMMC 的工作模式 

U-Boot命令之EMMC和SD卡操作命令

RK3399启动模式
RK3399有三种启动模式:

Normal 模式
Loader 模式
MaskRom 模式
Normal 模式
Normal 模式就是正常的启动过程,各个组件依次加载,正常进入系统。
这个模式无法刷固件, 一般板子通电就是这个模式。

Loader 模式
在 Loader 模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。
要进入 Loader 模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。

PS:
大多数嵌入式处理器都有在处理器内部有固化代码(ROM),这个代码可以把bootloader从处理器指定的地方(一般是flash,SD卡,USB等)加载到内存,然后跳到bootloader开始执行。或者把nor flash的地址映射到处理器的RESET地址直接执行nor flash中的代码

Bootloader多数有两个阶段的启动过程:
Stage1:
基本的硬件初始化
为加载stage2准备RAM空间
拷贝内核映像和文件系统映像到RAM中
设置堆栈指针sp
跳到stage2的入口点
Stage2:
初始化本阶段要使用到的硬件设备
检测系统的内存映射
加载内核映像和文件系统映像
设置内核的启动参数
嵌入式系统中广泛采用的非易失性存储器通常是 Flash,而 Bootloader就位于该存储器的最前端,所以系统上电或复位后执行的第一段程序便是 Bootloader。

MaskRom 模式
MaskRom 模式用于 bootloader 损坏时的系统修复。
一般情况下是不用进入 MaskRom 模式的,只有在 bootloader 校验失败(读取不了 IDR 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入 MaskRom 模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。

如果开发板上电后遇到以下情况之一:

eMMC 内容为空。
eMMC 上的 bootloader 损坏。
将 eMMC 数据/时钟引脚接地,eMMC读取数据失败。(所以硬件设计要预留eMMC clock PIN用于进入MaskROM模式 )
CPU 在 eMMC 中就会找不到有效的 IDB (IDentity Block),转而执行一段小型的 ROM 代码,等待主机通过 USB 上传 bootloader 来初始化 DDR 内存并进入升级状态。这种模式称为 Maskrom 模式 。

RK3399 eMMC硬件设计原理图
eMMC 芯片介绍

### eMMC协议技术规范与工作原理 eMMC(Embedded Multi-Media Controller)是一种嵌入式存储解决方案,广泛应用于移动设备和嵌入式系统中。其核心优势在于将NAND闪存控制器和存储介质集成在一个封装中,从而简化了存储子系统的复杂性,并提高了设备的整体性能和可靠性。 eMMC协议定义了主机(Host)与eMMC设备之间的通信规范,涵盖了命令集、数据传输机制、错误处理流程以及硬件接口定义等关键部分。这些内容对于开发人员在设计和调试支持eMMC存储设备时至关重要。 #### 命令集 eMMC协议支持多种命令,用于控制和管理eMMC设备。命令可以分为基础命令(Class 0)、块读取命令(Class 2)和块写入命令(Class 4)等类别。例如,CMD16用于设置数据块长度,CMD17用于单块读取,CMD24用于单块写入。这些命令的使用确保了主机能够有效地与eMMC设备进行交互[^2]。 #### 数据传输机制 eMMC支持多种数据传输模式,包括单线模式(Single Line Mode)和四线模式(Quad Line Mode)。此外,eMMC4.51版本还引入了更高的数据传输速率,支持高达200 MHz的时钟频率,从而实现更快的数据读写速度。数据传输通常以块为单位进行,每个块的大小可以配置,通常为512字节或更大[^3]。 #### 错误处理流程 在数据传输过程中,eMMC设备可能会遇到各种错误情况,如CRC校验错误、超时或电源故障。eMMC协议定义了详细的错误处理机制,包括状态寄存器(Status Register)和错误标志位,用于指示当前设备的状态和可能发生的错误。主机可以通过读取状态寄存器来判断设备是否处于忙状态或是否发生了错误,并采取相应的处理措施[^1]。 #### 硬件接口定义 eMMC设备的硬件接口通常包括电源引脚(VCC、VCCQ)、时钟引脚(CLK)、命令引脚(CMD)以及数据引脚(DAT0-DAT7)。其中,CLK用于同步主机与设备之间的通信,CMD用于发送命令和接收响应,而DAT0-DAT7则用于数据传输。eMMC4.51版本支持8位数据总线宽度,进一步提升了数据传输效率。 #### 命令队列 eMMC协议引入了命令队列(Command Queue)的概念,允许主机一次性发送多个命令,从而提高数据传输效率。命令队列机制减少了主机等待每个命令完成的时间,使得多个读写操作可以在后台并行执行。这种机制特别适用于需要高吞吐量的应用场景,如视频录制和大文件传输。 #### 电源管理 eMMC4.51版本在电源管理方面进行了优化,提供了更低的功耗模式,如待机模式(Standby Mode)和深度睡眠模式(Deep Sleep Mode)。这些模式可以根据设备的实际需求动态切换,从而延长电池寿命并降低整体功耗[^3]。 #### 示例代码 以下是一个简单的eMMC命令发送示例,展示了如何使用Python模拟发送CMD17(单块读取)命令: ```python def send_emmc_command(command, argument): # 模拟发送eMMC命令 print(f"Sending command: {command}, Argument: {hex(argument)}") # 发送CMD17(单块读取)命令,读取块号为0x00000000的数据 send_emmc_command("CMD17", 0x00000000) ``` 该示例仅用于演示目的,实际的eMMC命令发送需要通过硬件接口(如SDIO或SPI)与eMMC设备进行通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值