CMD0 RESET

发送CMD0 eMMC会进入自行复位busy状态后进入idle状态

 #define MMC_CMD_GO_IDLE_STATE       0   struct mmc_cmd cmd;int err;udelay(1000);cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;cmd.cmdarg = 0;cmd.resp_type = MMC_RSP_NONE;err = mmc_send_cmd(mmc, &cmd, NULL);if (err)return err;udelay(2000);

CMD1 CHECK_BUSY

CMD1命令得到eMMC的OCR寄存器值

代码发送命令,bit[31]为1表示ready状态,为0表示busy状态

 #define MMC_CMD_SEND_OP_COND        1cmd.cmdidx = MMC_CMD_SEND_OP_COND;cmd.resp_type = MMC_RSP_R3;cmd.cmdarg = 0;if (use_arg && !mmc_host_is_spi(mmc))cmd.cmdarg = OCR_HCS |(mmc->cfg->voltages &(mmc->ocr & OCR_VOLTAGE_MASK)) |(mmc->ocr & OCR_ACCESS_MODE);err = mmc_send_cmd(mmc, &cmd, NULL);if (err)return err;mmc->ocr = cmd.response[0];

CMD2 GET_CID

发送CMD2进行认证(获取CID),寄存器描述,128比特,16字节

代码发送命令

 #define MMC_CMD_ALL_SEND_CID        2/* Put the Card in Identify Mode */cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */cmd.resp_type = MMC_RSP_R2;cmd.cmdarg = 0;err = mmc_send_cmd(mmc, &cmd, NULL);if (err)return err;memcpy(mmc->cid, cmd.response, 16);

打印出CID数据

 printf("Manufacturer ID: %x\n", mmc->cid[0] >> 24);printf("OEM: %x\n", (mmc->cid[0] >> 8) & 0xffff);printf("Name: %c%c%c%c%c \n", mmc->cid[0] & 0xff,(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
 Manufacturer ID: feOEM: 14eName: P1XXX 

CMD3 STBY

然后发送CMD3,之后eMMC进入stby状态

        #define SD_CMD_SEND_RELATIVE_ADDR    3if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;cmd.cmdarg = mmc->rca << 16;cmd.resp_type = MMC_RSP_R6;err = mmc_send_cmd(mmc, &cmd, NULL);if (err)return err;if (IS_SD(mmc))mmc->rca = (cmd.response[0] >> 16) & 0xffff;}

CMD7

使用CMD7进入transfer状态,此命令用来设置eMMC的状态,因为当使用CMD0使eMMC复位后,eMMC处于idle或pre_idle状态,如果需要数据传输,必须将eMMC置于transfer_state

 #define MMC_CMD_SELECT_CARD     7/* Select the card, and put it into Transfer Mode */if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */cmd.cmdidx = MMC_CMD_SELECT_CARD;cmd.resp_type = MMC_RSP_R1;cmd.cmdarg = mmc->rca << 16;err = mmc_send_cmd(mmc, &cmd, NULL);if (err)return err;}

CMD8

CMD8命令用来获取EXT_CSD的值,虽然回复为R1,但是EXT_CSD的512字节值会被读取并存储到内存里,然后用户可以根据这些数据分析出eMMC当前支持的各种参数和状态,EXT_CSD是eMMC4之后才引入的寄存器组

 struct mmc_cmd cmd;struct mmc_data data;int err;/* Get the Card Status Register */cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;cmd.resp_type = MMC_RSP_R1;cmd.cmdarg = 0;data.dest = (char *)ext_csd;data.blocks = 1;data.blocksize = MMC_MAX_BLOCK_LEN;data.flags = MMC_DATA_READ;err = mmc_send_cmd(mmc, &cmd, &data);

CMD9 GET_CSD

获取CSD寄存器值,描述如下

代码实现

 #define MMC_CMD_SEND_CSD        9/* Get the Card-Specific Data */cmd.cmdidx = MMC_CMD_SEND_CSD;cmd.resp_type = MMC_RSP_R2;cmd.cmdarg = mmc->rca << 16;err = mmc_send_cmd(mmc, &cmd, NULL);/* Waiting for the ready status */mmc_send_status(mmc, timeout);if (err)return err;mmc->csd[0] = cmd.response[0];mmc->csd[1] = cmd.response[1];mmc->csd[2] = cmd.response[2];mmc->csd[3] = cmd.response[3];

IMX6UL eMMC命令分析相关推荐

  1. IMX6UL eMMC加锁和解锁代码分析与实现

    背景 最近在使用eMMC作为外部存储设备过程中,出现eMMC两个分区数据全部被清空,文件系统数据和用户数据全部为0 ,在网上看到一篇文件说对eMMC加锁后强制解锁会清除用户数据,这样达到的效果与我遇到 ...

  2. Linux EMMC子系统分析-初始化流程

    最近在解EMMC的一个bug,发现Linux EMMC有点小复杂,先整理个文档出来吧 用的是TI 平台,仅分析MMC,不分析SD和SDIO mmc_init 2769 static int __ini ...

  3. linux日常常用命令分析

    日志处理: 测试网络路由: xargs使用方法: tcpdump命令分析: dd 写入磁盘测试 cpu个数: 查看网卡流量 查看端口联通情况,临时加端口 ntpdate同步: 可以取出变动的密码: 导 ...

  4. 【JVM】通过javap命令分析Java汇编指令

    文章目录 javap命令简述 javap测试及内容详解 例子1 例子2 总结 转载说明 javap命令简述 javap是jdk自带的反解析工具.它的作用就是根据class字节码文件,反解析出当前类对应 ...

  5. ffmpeg命令分析【详细分析合集】

    ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...

  6. strace分析mysql_strace 命令分析mysql的相关的问题

    strace 命令分析mysql的相关的问题 使用方式: strace -p pid or strace command 本篇博文主要简单介绍下面关于MySQL的5个问题: 利用strace观察mys ...

  7. ffmpeg命令分析-vn

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...

  8. hadoop fsck命令分析 + 源码解析

    fsck命令分析 HDFS支持fsck命令用以检查各种不一致.fsck用以报告各种文件问题,如block丢失或缺少block等.fsck命令用法如下: $HADOOP_HOME/bin/ hdfs f ...

  9. jstack分析 in java_Jstack 命令分析

    Jstack 命令分析 jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Win ...

最新文章

  1. agv调度matlab程序,一种分布式AGV调度方法及调度系统与流程
  2. 微信公众号开发扫码登录(java版)
  3. []==![]为true
  4. php将数组中元素打乱顺序,PHP公开课|学会随机打乱数组元素顺序的函数,你的PHP会学的更好...
  5. JDK 伪异步编程(线程池)
  6. SpringBoot如何直接访问HTML页面
  7. struts集成spring官方例子
  8. 《编码规范和测试方法——C/C++版》作业 ·002——函数返回地址、static关键词用法整理
  9. C++之---class 的三种访问修饰符( public、private、protected )
  10. 做创业公司长期价值的共建者,高榕资本完成5亿美元新基金募资
  11. Excel-财务函数1
  12. python 计算变量的IV值
  13. regedit命令应用
  14. oracle宿主常量及变量,ORACLE之 LOB 数据类型
  15. Oracle rac集群笔记
  16. 2022最新 Emlog新版导航源码 带用户中心
  17. 亚马逊云科技在中国市场火了?真相令人想不到
  18. 无线网络设置的dns服务器,DNS怎么设置才能上网
  19. android 信息(mms)的故事(八)-- 彩信的解析
  20. Stacked DeBERT

热门文章

  1. Camtasia2023简体中文标准版免费更新下载
  2. 第五章第三十五题(加法)(Summation)
  3. STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯
  4. 物联网应用平台开发——项目总结报告
  5. 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
  6. 教育对人的改变有多大?
  7. 多线程学习笔记20210121
  8. 信贷、贷款行业如果利用运营商大数据精准获客?
  9. 简单css实现表格头部固定
  10. 【算法百题之四十】整数转罗马数字