该节学习Linux Kernel的MMC子系统,也称为块设备驱动,正如其名,与字符驱动相比,MMC子系统以块为单位进行操作。
同时,由于MMC Card、SD Card、SDIO Card等设备协议基本大同小异,所以在Linux Kernel中使用MMC子系统来统一管理!
2、MMC/SD/SDIO介绍上面我们了解到,Linux Kernel使用统一的子系统模型来管理MMC、SD、SDIO等设备,那么为什么要这样设计呢?
答案当然是:三者协议有一定的共通性。
MMC(MultiMediaCard)多媒体卡设备,从本质上看,它是一种用于固态非易失性存储的内存卡(memory card)规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。
1997年,MMC规范正式发布,至今已经进化出了SD、MicroSD、SDIO、EMMC等多种不同的规范,虽然眼花缭乱,但是追其根源,都源于MMC规范,所以Linux Kernel可以将其统一管理!
mmc_sd_sdio_historyMMC:强调的是多媒体存储(MM:MultiMedia)
SD:强调的是安全数据(SD:Secure Digital)
SDIO:强调的是IO接口(IO:Input/Output)
3、总线接口更多干货可见:高级工程师聚集地,助力大家更上一层楼!
MMC、SD、SDIO其物理接口也十分相似,我们以MMC为例进行分析。
Card Concept(eMMC)我们的MMC卡如上图所示,内部我们不展开分析,直接将其作为一个完整的设备来分析。
其通过CLK、CMD、DATA等管脚与我们的SOC通信,两者之间当然少不了Controller了。
mmc_sd_sdio_hw_block把通信总线部分,拿出来看:
image-20240103073934443CLK:提供SOC和设备之间的通信时钟,常用的通信频率为400KHz(识卡)、25MHz,50MHz
CMD:提供SOC和设备之间的通信命令,标识不同的命令编号,类型多达50多种。
DATA:提供SOC和设备之间的数据通信,其通信总线有8根,可自定义设置,一般默认的是1-bit (默认)模式、4-bit模式和8-bit模式。当然数据线越多,传输越快嘛,但是处理起来也稍微繁琐。
除了上面的一些管脚,当然还少不了VCC、GND等管脚喽,与其它外设不同的是,MMC类的设备,还会有一个检测引脚DET,用于检测是否存在卡设备(热插拔)。
好啦,上面我们对MMC、SD、SDIO进行简单了解,也知道了通信的常用方式与物理接口,当然其最核心在于通信的协议啦!由于协议过于复杂,我们放到后面了解。
4、参考文章[1]:http://www.wowotech.net/basic_tech/mmc_sd_sdio_intro.html
作者: _嵌入式艺术_, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-4040659.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论