Linux mmc framework2:基本组件之mmc
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的更多相关文章
- Linux MMC framework2:基本组件之core
1.前言 本文主要core组件的主要流程,在介绍的过程中,将详细说明和core相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API TODO 3. 主要流程 3.1 mm ...
- Linux mmc framework2:基本组件之block
1.前言 本文主要block组件的主要流程,在介绍的过程中,将详细说明和block相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API 2.1 struct mmc_ca ...
- 关于Linux开源项目基础组件make编译流程
关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia. ...
- Linux mmc framework2:基本组件之queue
1.前言 本文主要介绍card下queue组件的主要流程,在介绍的过程中,将详细说明和queue相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API 2.1 struct ...
- Linux MMC framework2:基本组件之host
声明:本文很多内容和思路参考了http://www.wowotech.net/comm/mmc_host_driver.html,对原作者表示感谢! 1.前言 本文是Linux MMC framewo ...
- php 将office文件(word/excel/ppt)转化为pdf(windows和linux只要安装对应组件应该就行)
一.配置环境 (1)配置php.ini 添加:extension=php_com_dotnet.dll com.allow_dcom = true // 去掉号,改为true 重启环境 (2) 安装 ...
- linux 下安装开发组件包
最初安装redhat 时, 系统自己装的,只安装了base 包,在开发过程中,需要不停的安装某个需求包, 图省事,安装光盘下的开发组件包: 在安装光盘下,,,用命令: yum grouplist ...
- Linux常用的基础组件
Linux服务器(新机器) yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf git yum ...
- 【Linux】netdata监控组件
github:https://github.com/firehol/netdata 安装:https://github.com/firehol/netdata/wiki/Installation 内存 ...
随机推荐
- Leetcode 125.验证回文串 By Python
思路 显然一个字符串不止包括字母和数字字符,所以我们可以先提取出来我们要进行比较的字符 还有一个问题是,字母是分大小写的,我们要统一大写或者统一小写,就是规范化 代码 class Solution(o ...
- LOJ 2664. 「NOI2013」向量内积 解题报告
#2664. 「NOI2013」向量内积 两个 \(d\) 维向量 \(A=[a_1, a_2 ,...,a_d]\) 与 \(B=[b_1 ,b_2 ,...,b_d]\) 的内积为其相对应维度的权 ...
- bzoj4817/luogu3703 树点涂色 (LCT+dfs序+线段树)
我们发现,这个染色的操作他就很像LCT中access的操作(为什么??),然后就自然而然地想到,其实一个某条路径上的颜色数量,就是我们做一个只有access操作的LCT,这条路径经过的splay的数量 ...
- 【模板】Treap
Treap,又称树堆,是一种通过堆性质来维持BST平衡的数据结构.具体体现在对于树上每一个点来说,既有BST维护的值,又有一个堆维护的随机生成的值.维护平衡性的办法是根据堆维护的值的相对大小关系进行左 ...
- MUI 选项卡切换+下拉刷新动态 完整实现一例
前台最终呈现的代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- can't open file 'manage.py': [Errno 2] No such file or directory
python Django创建数据库时can't open file 'manage.py': [Errno 2] No such file or directory 参考https://blog.c ...
- java生成二维码(最初版)
研究了2个小时,发现自己竟然智障,用原先的图片覆盖另一个图片 package com.tz.util; import java.awt.Color;import java.awt.Graphics2D ...
- java连接mysql的过程
今天突然心血来潮,想要用java连接mysql,记得以前是在vs2010的环境下用C#连接sql sever,其实他们的方法都差不多. 现在就可以简单的介绍下java如何连接mysql 第一步,设计m ...
- Linux集群部署自定义时间同步服务器(ntpd)
Linux集群部署自定义时间同步服务器(ntpd) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为一名运维人员,在搭建集群的时候,第一步需要做的就是同步每个机器的时间,尤其是在 ...
- Scala进阶之路-idea下进行spark编程
Scala进阶之路-idea下进行spark编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.创建新模块并添加maven依赖 <?xml version=&qu ...