1.前言

本文主要mmc组件的主要流程,在介绍的过程中,将详细说明和mmc相关的流程,涉及到其它组件的详细流程再在相关文章中说明。

2.主要数据结构和API

TODO

3. 主要流程

3.1 mmc_attach_mmc

以eMMC为例,则扫描时会回调mmc_attach_mmc

mmc_attach_mmc->

mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN)

mmc_send_op_cond

mmc_attach_bus_ops

mmc_select_voltage

mmc_init_card->

  mmc_add_card

  • mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN)
identification阶段需要设为opendrain模式,协议约定;
  • mmc_send_op_cond
发送CMD1,arg为0,获取OCR寄存器的内容,设备支持的电压范围
  • mmc_attach_bus_ops
关联mmc_bus_type的ops
  • mmc_select_voltage
根据host支持的电压范围和OCR寄存器中读取的电压范围,得出两者都支持的电压范围,然后选取最小的电压值。对于我们的host一般会采用固定输出的电压值。
  • mmc_init_card
处理卡的检测和初始化:

a). mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);初始前将busmode设为opendrain 主要是用于identify mode执行线与,进入transfer模式将设为pushpull模式

b). mmc_go_idle(host):发送CMD0,由于改变了OCR的值,需要让卡重新回到idle状态

c).mmc_send_op_cond(host, ocr | ( << ), &rocr):发送CMD1,设置访问mode,前一个CMD1是获取ocr值,此处设置为sector模式???,进入ready状态

d).mmc_all_send_cid:发送CMD2,获取CID寄存器的值,进入identification状态

e).mmc_alloc_card:分配一个mmc_card设备,它是mmc子系统最顶层的设备,也是与block层打交道的设备

f).mmc_set_relative_addr:CMD3,mmc_set_relative_addr设置相对地址,此时设备进入standby状态

g).mmc_send_csd: 首先mmc_send_cxd_native(card->host, card->rca << ,csd, MMC_SEND_CSD)发送CMD9,获取csd 寄存器的值

h).mmc_decode_csd:对获取的csd寄存器值解析

i).mmc_decode_cid:对前面获取的cid寄存器解析

j).mmc_select_card:发送CMD7,在standby和transfer状态之间进行转换,此处转换到transfer状态
k).mmc_get_ext_csd-> mmc_send_ext_csd-> mmc_send_cxd_data-> sg_init_one mmc_set_data_timeout-> mmc_wait_for_req 发送CMD8,获取ext_csd内容 mmc_set_data_timeout:设置延时时间,主要通过CSD寄存器读出,然后进行设置 l).mmc_read_ext_csd:解析ext_csd的内容 m).mmc_set_erase_size:设置擦除单位大小,依赖于ext_csd和csd n).mmc_switch:设置分区相关信息,其中part_config配置访问分区信息,part_time为switch命令执行时间。
  • mmc_add_card
如果mmc_init_card初始化成功,则将调用mmc_add_card将mmc_card通过device_add加入到设备驱动模型中,此处就会触发执行前文所述的mmc_blk_probe函数

Linux mmc framework2:基本组件之mmc的更多相关文章

  1. Linux MMC framework2:基本组件之core

    1.前言 本文主要core组件的主要流程,在介绍的过程中,将详细说明和core相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API TODO 3. 主要流程 3.1 mm ...

  2. Linux mmc framework2:基本组件之block

    1.前言 本文主要block组件的主要流程,在介绍的过程中,将详细说明和block相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API 2.1 struct mmc_ca ...

  3. 关于Linux开源项目基础组件make编译流程

     关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia. ...

  4. Linux mmc framework2:基本组件之queue

    1.前言 本文主要介绍card下queue组件的主要流程,在介绍的过程中,将详细说明和queue相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API 2.1 struct ...

  5. Linux MMC framework2:基本组件之host

    声明:本文很多内容和思路参考了http://www.wowotech.net/comm/mmc_host_driver.html,对原作者表示感谢! 1.前言 本文是Linux MMC framewo ...

  6. php 将office文件(word/excel/ppt)转化为pdf(windows和linux只要安装对应组件应该就行)

    一.配置环境 (1)配置php.ini 添加:extension=php_com_dotnet.dll com.allow_dcom = true  // 去掉号,改为true 重启环境 (2) 安装 ...

  7. linux 下安装开发组件包

    最初安装redhat 时, 系统自己装的,只安装了base 包,在开发过程中,需要不停的安装某个需求包,   图省事,安装光盘下的开发组件包: 在安装光盘下,,,用命令: yum grouplist ...

  8. Linux常用的基础组件

    Linux服务器(新机器) yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf git yum  ...

  9. 【Linux】netdata监控组件

    github:https://github.com/firehol/netdata 安装:https://github.com/firehol/netdata/wiki/Installation 内存 ...

随机推荐

  1. 在 Ali Kubernetes 系统中,我们这样实践混沌工程

    在传统的软件测试中,我们通常通过一个给定的条件来判断系统的反馈,通过断言来判断是否符合预期,测试条件和结果通常比较明确和固定.而混沌工程,是通过注入一些“不确定”因素,象放进了一群淘气的猴子,在系统资 ...

  2. android广播(内部类)使用

    1.广播定义在一个单独的文件中 源码: public class MessageReceiver extends BroadcastReceiver{ @Override public void on ...

  3. Codeforces Round #548

    没打,简单补档 C.Edgy Trees 容斥,把黑边断掉数联通块,每个联通块贡献$siz^k$ #include<cstdio> #include<cstring> #inc ...

  4. (转) JVM——Java类加载机制总结

    背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. ...

  5. 【数学】NOIP数论内容整理

    NOIP数论内容整理 注:特别感谢sdsy的zxy神仙以及lcez的tsr筮安帮助审稿 一.整除: 对于\(a,b~\in~Z\),若\(\exists~k~\in~Z\),\(s.t.~b~=~k~ ...

  6. 淘宝助理导出的csv文件使用的是什么编码,您猜?

    今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...

  7. 国内互联网公司UED博客

      1,淘宝UED http://ued.taobao.com/blog淘宝网用户体验团队博客,有关用户体验设计和研究的经验分享.UED的本意是用户体验设计,是英文User Experience De ...

  8. java futureTask的使用

    futureTask 它的意义在于去除主函数的等待时间,使得主函数在执行耗时操作时无需死等,只需要在未来task执行完毕,再获取结果. 下面的 futureTask 的一个简单例子. public c ...

  9. springboot下实现邮件发送功能

    springboot给我们封装好了邮件功能,非常简单,只需要稍微配置下就ok. 引入jar <dependency> <groupId>org.springframework. ...

  10. Spring RMI (Spring 远程方法调用)【原】

    所需jar包...?    不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy 先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成j ...