I.MX6UL核心模块使用连载-eMMC读写测试 (四)

本文档详细介绍了在Iot-6ULX/EVB-6ULX平台上进行eMMC存储设备的读写速度测试过程。通过dd指令在root目录下创建并填充80MiB的largefile,测试写速度为12.2MB/s。随后,清除缓存以准确测量读速度,读取相同文件的速度达到101MB/s。测试完成后,使用rm指令删除了测试文件。

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

以下内容已经在Iot-6ULX/EVB-6ULX平台上验证通过,Iot-6ULX/EVB-6ULX介绍如下:

 3. eMMC读写测试

3.1 eMMC写速度测试

eMMC根文件系统下包含了多个目录,我们需要选择其中的某个目录进行测试。可以执行以下指令查看根目录下包含的目录。

root@embfly ~# cd /                         //进入根目录

root@embfly /# pwd                         //查看当前所在目录

root@embfly /# ls                            //显示当前目录下的文件和目录 

                                                                根目录下的内容

从上图中可以看到,根目录下包含了多个子目录。其中,root目录就是系统登陆时的默认所在目录(主目录)。在测试过程中,我们进入到root目录下进行测试。

root@embfly /# cd /root                   //进到root目录

root@embfly ~# pwd                      //查看当前所在目录

                                                             进入到root目录下 

使用dd指令往root目录下写入数据,并生成largefile文件,文件大小为80 MiB,测试写速度。

root@embfly ~# dd if=/dev/zero of=./largefile bs=8k count=10240 conv=fdatasync

                                                            eMMC写速度测试 

从终端显示的信息中,写入的文件大小为80MiB,速度为12.2MB/s。

3.2 eMMC读速度测试

说明:因为Linux的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache内容可以增加文件的读写速度。

测试过程是为了能够测试出从eMMC中读取数据的准确速度,所以需要先清除缓存。

执行以下指令,清除缓存:

root@embfly ~# sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"       //清除页面缓存,目录项和inode

                                                                         清除缓存 

再次使用dd指令读取前面用dd指令写入的largefile文件,测试读速度:

root@embfly ~# dd if=./largefile of=/dev/null bs=8k

                                                              eMMC读速度测试 

从终端显示的信息中,读取的文件大小为80MiB,速度为101MB/s。

测试完成后,用指令删除掉测试文件:

root@embfly ~# ls -alh largefile              //查看largefile文件

root@embfly ~# rm largefile                 //移除largefile文件

                                                                 删除测试文件 

 

 

<think>嗯,用户想了解eMMC协议的学习路线和相关代码推荐。首先,我得确认用户的基础,可能有一定嵌入式或存储领域的背景,但可能对eMMC的具体细节不太熟悉。需要从基础开始引导,逐步深入。 首先,得介绍eMMC的基本概念,包括它的结构、应用场景和与SD卡的区别。这部分内容要简明扼要,让用户有个整体认识。然后,学习路线需要分步骤,从协议文档开始,比如JEDEC的标准文档,但用户可能觉得直接读协议太枯燥,可能需要结合实践。 接下来,硬件接口部分,需要讲解物理层和电气特性,比如引脚定义、时钟信号等。这部分可能涉及硬件设计,用户如果是软件背景,可能需要补充相关知识。然后是协议层,命令和响应格式是关键,比如CMD、RESPONSE的结构,需要具体举例说明,比如CMD0是GO_IDLE_STATE,这样用户更容易理解。 状态机部分可能比较复杂,需要解释不同的操作模式,比如初始化、数据传输、睡眠模式。这部分可能需要结合流程图或状态转换图,但文本描述要尽量清晰。错误处理机制也是重点,比如CRC校验和重试机制,用户在实际开发中可能会遇到相关问题。 代码实现方面,推荐实际的开源项目,比如Linux内核中的eMMC驱动,或者uboot的代码。需要具体指出代码路径,方便用户查找。另外,模拟器如QEMU可能对学习有帮助,用户可以在不接触硬件的情况下进行实验。 学习资源方面,除了官方文档,书籍和在线课程可能也是用户需要的。推荐的书需要确保有中译本或中文资源,比如《嵌入式系统存储技术》可能适合。在线课程和论坛需要推荐活跃的社区,比如Stack Overflow和eLinux社区,方便用户提问和交流。 实践建议部分,硬件工具如逻辑分析仪和开发板是必须的,用户可能需要购买或使用已有的设备。调试技巧也很重要,比如如何抓取命令日志,分析错误状态。这部分需要具体的方法指导,帮助用户快速上手。 最后,学习难点部分,协议复杂性和兼容性问题需要提前预警,让用户有心理准备。建议分阶段学习,结合理论与实践,逐步深入。整体结构要清晰,步骤明确,确保用户能按部就班地学习。 需要检查是否有遗漏的部分,比如是否覆盖了协议版本差异,或者最新的eMMC标准。另外,代码推荐部分要确保链接或路径正确,避免用户找不到资源。同时,语言要口语化,避免过于技术化,让不同层次的用户都能理解。</think>好的!我将从学习路径、核心知识点和代码实践三个维度为您梳理eMMC协议的学习路线,并提供具体的学习资源推荐。 # 一、eMMC协议学习路径规划 $$学习路线 = 基础概念 \rightarrow 协议解析 \rightarrow 驱动开发 \rightarrow 实践调试$$ **阶段1:基础认知(1-2周)** 1. 理解eMMC物理架构:掌握NAND Flash + 控制器的组合结构 2. 对比SD/MMC协议差异:重点理解eMMC的集成优势 3. 熟悉总线拓扑:CLK/CMD/DAT[0-7]信号线的作用 **阶段2:协议解析(3-4周)** 1. 精读JEDEC标准文档:重点章节4.3(电气特性)和章节7(命令集) 2. 掌握关键操作时序:包括初始化流程、单块/多块读写时序 3. 分析错误处理机制:CRC校验、重试策略、异常状态恢复 **阶段3:驱动开发(2-3周)** 1. 研究Linux MMC子系统:`drivers/mmc/`目录代码结构 2. 重点分析host controller驱动:三星exynos-mmc.c等典型实现 3. 调试技巧:使用mmc-utils工具进行底层寄存器操作 # 二、核心知识要点解析 **1. 物理层特性** $$信号时序要求:T_{su} \geq 2ns,\ T_{hd} \geq 1ns\ (在200MHz时钟下)$$ - 总线宽度配置:1-bit/4-bit/8-bit模式切换流程 - 电压域管理:1.8V/3.3V电源切换机制 **2. 协议层关键命令** | 命令类型 | 示例命令 | 作用描述 | |-----------|----------------|-------------------------| | 广播命令 | CMD0 (GO_IDLE) | 复位所有设备 | | 寻址命令 | CMD7 (SELECT) | 选择/取消选择设备 | | 数据传输 | CMD17/18 | 单块/多块读操作 | **3. 寄存器系统** - CID(设备ID):128-bit包含厂商/产品信息 - CSD(特征集):存储容量、最大传输速率等参数 - EXT_CSD(扩展配置):访问需要发送CMD8 # 三、实践推荐与代码资源 **1. 推荐学习代码** - Linux内核驱动: ```c // 典型操作流程示例: struct mmc_host *host; struct mmc_card *card; mmc_power_up(host); // 上电序列 mmc_go_idle(host); // 发送CMD0 mmc_send_op_cond(host, 0); // 发送CMD1 ``` 代码路径:`drivers/mmc/core/`,重点研究`mmc_ops.c`和`block.c` **2. 硬件调试工具** - 逻辑分析仪:抓取CMD/DAT总线信号(建议采样率≥500MHz) - eMMC训练板:推荐使用i.MX6UL开发板(成本较低且文档完善) **3. 进阶学习资源** - 必读文档:JESD84-B51(最新eMMC 5.1标准) - 参考书籍:《嵌入式Linux设备驱动开发》第9章存储设备驱动 - 在线课程:Coursera "Embedded Storage Systems" # 、学习难点预警 $$调试难点 = 时序校准 + 错误恢复 + 性能优化$$ 1. 初始化失败常见原因: - 电压切换未完成(CMD11处理异常) - 总线宽度配置错误(EXT_CSD[183]设置) 2. 性能优化方向: - 合理配置cache策略(EXT_CSD[33]) - 使用HS400模式需满足: $$T_{DS} \leq 0.5ns,\ T_{DH} \geq 0.5ns$$ 建议学习过程中配合示波器观测实际波形,并使用`mmc-utils`工具进行寄存器读写实验。初期可从SPI模式入手,逐步过渡到HS200/HS400高速模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值