1、MMC、SD卡、eMMC介绍

1.1、三者关联

(1)最早出现的是MMC卡,卡片式结构,按照MMC协议设计。(相较于NandFlash芯片来说,MMC卡有2个优势:第一是卡片化,便于拆装;第二是统一了协议接口,兼容性好。)
(2)后来出现SD卡,兼容MMC协议。SD卡较MMC有一些改进,譬如写保护、速率、容量等。
(3)SD卡遵守SD协议,有多个版本。多个版本之间向前兼容,SD卡除了支持SD协议还支持SPI协议。
(4)iNand/eMMC在SD卡的基础上发展起来,较SD卡的区别就是将SD卡芯片化了(解决卡的接触不良问题,便于设备迷你化)。
(5)iNand和eMMC的关联:eMMC是协议,iNand是Sandisk公司符合eMMC协议的一种芯片系列名称
总结:MMC卡、SD卡、eMMC卡是一脉相承的,并且都是向前兼容,所以在Soc中都是用SD/MMC控制器去操作。SD/MMC控制器在初始化时会通过发命令去判断当前接的是哪种卡、哪个版本的协议,然后再进行相应的操作。SD卡和eMMC卡在时序操作上几乎一样,在物理接线上有些差别,后面就以SD卡来进行讲解。

1.2、三者相同点

(1)组织框架:都是存储介质+控制电路,向外提供统一的接口;
(2)存储介质都是NandFlash;

1.3、三者区别

(1)接口协议不同:MMC卡是MMC协议,SD卡支持SD协议和SPI协议,eMMC卡/iNand支持eMMC协议,接口协议不同导致物理接线也不一样;
(2)控制电路的功能不同,接口协议不同所以控制电路也不一样;

1.4、和NandFlash的区别

(1)iNand和SD卡在储存介质上都是使用的MLC的NandFlash,价格便宜;
(2)iNand和SD卡是在NandFlash的基础上,完善了控制电路,控制电路可以进行ECC校验、坏块管理、提供统一的接口。NandFlash芯片在通信协议上不同一,导致兼容性很差;
(3)iNand接口电路还提供了cache机制,所以inand的操作速度更快。

1.5、SD卡和iNand芯片的引脚差异

从上面的电路原理图可以看出,SD卡和iNand的引脚几乎一样,差别就是iNand芯片的数据线是8根,而SD卡的数据线是4根,所以iNand支持8bit并行传输,SD卡最多支持4bit并行传输。

2、SD卡的结构框图

(1)最上面是SD卡的引脚,可以看到有4根data线,1根cmd线,1根CLK线,其余是电源线和接地线;
(2)中间部分是控制电路,相当于一个状态机,负责与主机通信和管理内部的存储颗粒,主要包含接口控制器和寄存器;
(3)最下面的存储器内核就是NandFlash存储颗粒,负责存储数据。使用的NandFlash存储颗粒是MLC的。

3、SD卡的引脚

(1)SD卡有4根数据线,支持1bit和4bit模式,是并行接口;
(2)主机的SD/MMC控制器是通过CMD线给SD卡发命令;
(3)主机和SD卡是同步通信,主机通过CLK线把时钟信号传给SD卡;
(4)还有两根接地线和一根电源线;

4、SD/MMC控制器

学习SD/MMC控制器主要就是熟悉相关寄存器的操作,并且SD/MMC控制器的寄存器很多,功能也很复杂,没有对SD卡、eMMC卡了解很深入很多寄存器的说明是看不明白的。推荐的学习方法:根据操作SD卡的代码,再结合SD卡数据手册、SD/MMC控制器的寄存器说明去学习。

5、SD卡的操作模式

5.1、命令码CMD和ACMD

(1)在SD卡协议中,命令码是已经定义好的,在代码里用宏定义去表示;
(2)命令码分为CMDn(n代表1、2、3······)和AMDn(n代表1、2、3······)。CMDn是单命令命令,就是单独发一个CMDn即可表示一个意思。ACMDn是一种扩展,就是发2个CMDn加起来表示一个意思。可以认为ACMDx = CMDy+CMDz,其中y一般是55;

5.2、命令响应模式

(1)SD协议里已经定义好了命令码,主机去操作SD卡就是给SD卡发送相应的命令码;
(2)主机和SD卡通信是一个周期一个周期进行的,每个周期都是主机给SD卡发命令,SD卡解析并执行命令,有的命令需要响应和数据,有的不需要;
(3)命令都是主机给SD卡发送的,在通过CMD线发送命令时需要先判断CMD线是否忙,要等上一条命令执行完毕再发送新的命令;

5.3、SD卡的寄存器

SD卡的不同寄存器位数是不一样的,具体含义要查看数据手册,这里不做详细的说明。

6、SD卡的初始化流程图

(1)上电后SD/MMC控制器先发送CMD0和CMD8命令,然后根据SD卡返回的数据最终判断当前连接的SD卡是采用的哪个版本的SD协议。

7、SD卡的状态转换

(1)这副图是承接上面的初始化流程图,SD/MMC控制器在得知SD卡的协议版本后会再发送CMD2和CMD3命令;
(2)这里描述的状态转换实际就是SD卡控制器的工作逻辑,SD卡控制器就相当于一个状态机,根据主机发送的命令切换到不同的状态执行不同的任务。
(3)刚开始SD卡是待命状态(Stand by State),然后就根据主机发送的命令在不同的状态之间切换。

8、SD卡的SD模式和SPI模式

(1)SD卡支持SD卡协议和SPI协议,单片机操作SD卡通常用SPI协议,复杂Soc(带SD/MMC控制器)一般用SD卡协议去操作SD卡;
(2)SD卡协议是6线制(4根数据线+CMD线+CLK线),SPI协议采用4线制(2根数据线+CMD线+CLK线);
(3)SD卡的SD模式比SPI模式传输速率更快;

芯片的SD/MMC控制器以及SD卡介绍相关推荐

  1. BL8810芯片最新版规格书|BL8810高速读卡芯片|USB2.0 SD/MMC闪存读卡器单芯片

    BL8810是由台湾旺玖半导体推出的一款USB2.0 SD/MMC闪存读卡器单芯片.支持USB2.0高速传输,并符合通用串行总线规范.该芯片集成了一个高速的8051微处理器和一个最好的数据引擎,它的引 ...

  2. SD/MMC 卡读写模块---SD/MMC 卡的外部物理接口

    转载地址:http://www.8951.com/book/jiao1n21.htm SD/MMC    卡是一种大容量(最大可达 4GB).性价比高.体积小.访问接口简单的存储卡.SD/MMC 卡大 ...

  3. SD/MMC卡块设备驱动程序

    SD/MMC 卡组成的存储系统是许多嵌入设备的主要存储设备,相当于PC机的硬盘,在嵌入设备上的SD/MMC卡控制器通过MMC协议来解析命令控制SD/MMC卡的操作.SD/MMC卡上有一些寄存器来控制卡 ...

  4. 在SD/MMC卡上实现hive (Implement WinCE HIVEROM system on NAND or SD system )

    本是个很简单的topic,但无奈的是很多客户都没有实现.所以只能写一个guide给客户,让他们依葫芦画瓢. 在SD卡上实现hive以及实现binfs最精髓的思想是,在boot stage 1依次加载s ...

  5. 在SD/MMC卡中可读写的FAT文件系统

    2019独角兽企业重金招聘Python工程师标准>>> FAT文件系统 关于eLua中FAT文件系统的实现是使用了来自Elm Chan的一个很好的FatFS文件包.它可以在读写模式中 ...

  6. Linux驱动中SD/MMC卡增加多个分区

    当前,Linux下sd/mmc卡的驱动已经实现.需要在此基础上实现,给这个mmc/sd块设备加多个分区.有人会问,那等系统启动后,通过fdisk工具去分区不也可以吗?回答是,本身sd/mmc驱动加载后 ...

  7. linux mmc分区_【经验记录】如何给嵌入式Linux的SD/MMC卡驱动中添加多个分区

    How to add multi partition for SD/MMC card in Linux Driver 之所以写这个,是因为,在这个过程中,自己明显感觉到了,做事情一定要有一定的方法,方 ...

  8. cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新)

    一.SD/MMC/SDIO概念区分 SD(SecureDigital)与 MMC(MultimediaCard) SD 是一种 flash memory card 的标准,也就是一般常见的 SD 记忆 ...

  9. MMC子系统识别SD设备过程简述

    一 :引子–WIFI 模块移植 二 : MMC 识别 SD设备过程 第一步: 注册虚拟总线 第二步: 初始化并挂载设备驱动 第三步:初始化注册主控驱动 第四步:Host驱动的prob() 4.1 mm ...

最新文章

  1. Shell脚本基础介绍
  2. FPGA开发要懂得使用硬件分析仪调试——ILA
  3. python和c++哪个好用-python和C++语言哪个好?老男孩教育
  4. pandas指南:做更高效的数据科学家
  5. 信息学奥赛一本通(1236:区间合并)
  6. 【读书笔记0102】Beginning linux programming-3rd
  7. oracle数据库查表_oracle数据库之多表查询二
  8. eclipse3的jsp支持简单配置
  9. 使用SetUnhandledExceptionFilter()让程序优雅的崩溃
  10. vue css隐藏_Vue+BootStrapV4,构建响应式、移动优先项目——BootstrapVue
  11. python微信聊天机器人_Python搭建一个微信聊天机器人
  12. android6.0重力工具箱,真正免root的重力工具箱详细使用教程
  13. Spring Cloud Netflix Eureka
  14. C++:初始值设定项
  15. 网页版python编辑器-史上超强 Python 编辑器,竟然是张网页?!
  16. Matlab c2d离散用法
  17. 微分方程求解matlab冲激信号,用Matlab求冲激响应的几种方法
  18. 光源专家的8个打光技巧
  19. elementUI级联选择器(Cascader)回显问题和clearCheckedNodes无效的解决方法
  20. 小谈Intel SGX

热门文章

  1. linux更新nvidia驱动程序,NVIDIA 440.64 for Linux显示驱动程序下载,附更新内容及安装方法...
  2. cannot be cast to javax.servlet.Servlet 解决
  3. 注册表计算机性能设置怎么应用,教你几招怎么玩注册表
  4. Vue 传值方式 ——子向父传递数据
  5. html+word+clou,d3.js – 用d3.wordcloud重绘文字云
  6. 小米MIX2手机忘了开机账号和密码
  7. I.Gree的心房(思维题)
  8. 05.概念数据模型CDM
  9. 幼儿园教案我和计算机比本领,幼儿园大班教案《谁的本领大》
  10. Mac 修改系统默认Java版本