当前位置: 首页 > news >正文

【SDIO】【SDMMC】硬件层

kernel使用MMC subsystem 统一管理MMCSDSDIO 等设备

  • MMC实例:EMMC

  • SD实例:SD

  • SDIO实例:从SD演化出来的,强调的是接口(IOInput/Output)不再关注另一端的具体形态(可以是WIFI设备、Bluetooth设备等等)。

我们将针对 secure Digital(SD)进行讲解。

一、硬件电路

MMC分别从卡(card concept)、总线(Bus concept )以及控制器(Host controller )三个方面,定

义 MMc system 的行为。

在这里插入图片描述

  • CLK :CLK 信号用于从 Host 端输出时钟信号,进行数据传输的同步和设备运作的驱动。

  • CMD :CMD 信号主要用于HosteMMC发送 command eMMCHost 发送对于的 Response

  • DATA: DAT0-7 信号主要用于 Host和 eMMC之间的数据传输。在 eMMC上电或者软复位后,只有 DAT0可以进行数据传输,完成初始化后,可配置 DAT0-3 或者 DAT0-7 进行数据传输,即数据总线可以配置为4 bits 或者 8 bits 模式。

二、硬件抽象

eMMC 规范包含了对接口功能和器件控制器的描述。规范对 eMMC 系统的描述包含了 eMMC 外部的控制器和对应的 eMMC器件,而规范对接口做了详细的说明,但是对于外部的 eMMC 控制器不做过多规定,内部的 Flash 控制器由各个器件厂商自行设计,只需对外部提供符合 eMMC规范的标准 MMC接口即可。
在这里插入图片描述

三、MMC通信协议

器件上电或复位后,主控制器必须按照特定的携带特殊信息总线协议对 eMMC 器件进行初始化。这些特殊的信息传输是由命令、响应和数据组成的。 eMMC 的总线数据传输是由命令、响应和数据块的组合构成。一次数据传输就称为一次"总线操作”。操作总是包含命令和响应,有些操作还包含数据,如数据传输操作。

MMC 总线上传送的信息流可分为三类:

  • 命令( command)

命令的传输方向为从 MMC 卡控制器到 MMC 卡,用来表明一个操作的开始。

  • 响应(response)

响应的传输方向为 MMC 卡到控制器,为某一MMC 卡或总线上所有的卡同时对一命令执行情况的回应,命令和响应都通过 CMD 线传输。

  • 数据( data)。

数据的传输方向为 MMC 卡到控制器,或由控制器到 MMC 卡,数据的传输通过 DAT 线进行。

3.1 命令和响应

  • 命令
    在这里插入图片描述

传输控制部分是整个 MMC设计的核心。电路中的命令模块将要发送的命令进行打包,包括添加开始位,传输位,结束位,以及 CRC 校验位,组装成一个固定格式( 48 位)的一帧数据,串行输出到 MMC 命令线上。对于接收到的命令进行解包,并进行 CRC7 校验,如果正确,则将相应的值写入命令寄存器 。

在这里插入图片描述

如上表所示,指令在传输过程中总是以”01“作为起始位,标志指令开始传输;总是以”1”为结束位,标志该条指令发送完毕。指令[45:40]bit 为所发送指令的索引值,该值会被 SD 卡控制器进行解释。指令[39:8]bit为所发送指令附带的参数,通常不同的指令附带参数的意义不同,需根据指令的索引值进行相应的解释。指令在发送过程中需进行 CRC7 校验,以确认在主控制器和存储器之间指令传输是否正确。

  • 响应

在这里插入图片描述

3.2 数据读写操作

  • 读操作

读取数据和写入数据操作允许单块或多块的数据传输。与顺序读操作类似,当进行多块数据传输时是由“停止传输命令来终止操作的。下图描述了单块读操作和多块读操作。在进行单块数据读操作时,主控制器通过 CMD 信号线发送命令,eMMC 器件接收命令之后会做出响应,在 CMD 信号线上发送至主控制器,在命令和响应的传输中都是包含 CRC7 校验以保证传输的正确性的。同时在数据线 DAT0~DAT7(根据位宽的设置可以变化)上向主控制器发送数据,每根数据线上的数据都会在最后跟随一个 CRC16 校验保证数据传输的正确性,也为主控制器校验数据提供依据。而在多块数据的读操作中,主控制器发送读数据命令之后 eMMC 做出相应,并会连续的发送数据块直到主控制器发送停止读取数据的命令之后 eMMC 器件才不向外发送数据。
在这里插入图片描述

单个block读取流程

在这里插入图片描述

多个block读取流程
在这里插入图片描述

  • 写操作
    在这里插入图片描述

单个block 写入流程

在这里插入图片描述

多个block写入流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、 MMC寄存器

在这里插入图片描述

文件:include/linux/mmc/card.h

mmc_card 代表了一张MMC卡

4.1、mmc_cid

CID(Device Identification Register ,器件识别寄存器)寄存器的长度为 128 bits 。寄存器中包含了器件识别过程中的的识别信息,是符合 eMMC 协议的。需要注意的是每个 eMMC 芯片都具有唯一的器件识别码并且每种类型的 eMMC 芯片都会局域唯一的分类识别码。

目录:kernel/include/linux/mmc/card.h

4.2 mmc_csd

CSD (Device-Specific Data Register ,器件特征数据寄存器)寄存器提供了如何对器件进行访问的信息 。寄存器定义了数据格式、校验类型、最大数据访问时间、数据传输速度、 DSR 寄存器是否可用等信息。

目录:kernel/include/linux/mmc/card.h

4.3 mmc_csr

CSR Card Status Register(卡状态寄存器)的缩写,在 SD/MMC 存储卡系统中是最核心的状态寄存器。当主机控制器发送命令给存储卡时,卡会通过 CSR 返回命令执行结果和当前状态。

五、MMC控制命令

由于 SD/MMC 卡的操作命令不一致,在模块中并没有对命令作译码, 而是通过软件来设置命令的类型。单块(signal block data)读数据命令(CMD17),写数据命令(CMD24);多块(multi-block data)读数据命令(CMD18 ),写数据命令(CMD25 )等需要控制模块根据 SD_CMD_INDEX 寄存器的内容来发布相应的命令并作不同的状态转换。

文件目录:kernel/include/linux/mmc/mmc.h
在这里插入图片描述

文件目录:kernel\drivers\mmc\host\dw_mmc.h

这是 DesignWare MMC/SD 主机控制器驱动的状态机枚举,用于管理 SD/MMC 卡操作的状态流程。每个状态代表主机控制器在处理命令或数据传输时的特定阶段。

core/mmc_ops.c中完成cmd的发送

在识别和初始化 SD 卡的过程中,主机控制器会按顺序发送一系列命令(CMD)来配置和准备卡以进行数据传输

以下是典型的 SD 卡识别过程中使用的命令:

六、SD卡枚举CMD的过程

  • CMD0 (GO_IDLE_STATE):将卡复位到空闲状态。这是识别过程的第一步,用于复位卡的状态机。

  • CMD8 (SEND_IF_COND):检查卡是否支持电压范围,并确认卡是 SD 2.0 及以上版本。主机发送电压和检查模式信息,卡返回相同信息以确认。

  • CMD55 (APP_CMD) + ACMD41 (SD_SEND_OP_COND):

组合使用以初始化卡并获取其操作条件。

  • CMD2 (ALL_SEND_CID):

请求卡发送其唯一的卡标识符(CID)。所有卡都会回应此命令。

  • CMD3 (SEND_RELATIVE_ADDR):

分配一个相对地址(RCA)给卡。卡使用这个地址进行后续的命令通信。

  • CMD9 (SEND_CSD):

请求卡发送其卡特定数据(CSD),以获取卡的特性信息,如最大传输速度、块长度等。

  • CMD7 (SELECT/DESELECT_CARD):

选择卡以进入传输状态,准备进行数据传输。

https://cloud.tencent.com/developer/article/2161824

https://blog.csdn.net/yangguoyu8023/article/details/122820765

七、FTL层

学习链接:https://zhuanlan.zhihu.com/p/26944064
在这里插入图片描述

LBA — Logical Block Address(逻辑块地址)

  • 定义:LBA 是主机侧看到的地址。操作系统或文件系统通过 LBA 读写数据,它是“逻辑编号”,和实际物理位置无关。

  • 作用:隐藏了底层闪存的复杂性,让主机像操作传统硬盘一样访问数据。

  • 单位:通常每块 512B 或 4KB(依文件系统/块设备而定)。

PBA — Physical Block Address(物理块地址)

  • 定义:PBA 是闪存控制器内部使用的物理地址,指向 NAND 的实际页/块。

  • 作用:真实存储数据的地方,FTL 根据 LBA → PBA 映射来决定数据存放在哪里。

  • 特点

    1. 不可原地覆盖:NAND Flash 写入只能写空页,覆盖必须先擦除整个块;

    2. 动态映射:FTL 可以把同一个 LBA 的数据写到不同 PBA;

    3. 物理不连续:为了磨损均衡和垃圾回收,连续 LBA 可能映射到离散的 PBA。

FTL 核心就是维护一张 映射表

  • 顺序写:FTL 尽量把连续 LBA 映射到连续 PBA,顺序读/写速度高。

  • 随机写:FTL 分配空闲 PBA,原 LBA → PBA 连续性破坏,顺序读速度下降。

  • 垃圾回收:旧 PBA 失效,FTL 搬移有效页到新 PBA,再更新映射表。

http://www.dtcms.com/a/557205.html

相关文章:

  • 算法 - 差分
  • 定制制作网站哪家好北京seo关键词
  • Transformer:Decoder 中,Cross-Attention 所用的 K(Key)和 V(Value)矩阵,是如何从 Encoder 得到的
  • 矩阵系统全面解析:构建智能营销体系的核心引擎
  • 灵山县建设局网站设计论坛最好的网站
  • 整体设计 全面梳理复盘 之14 原型表结构深化与组织表关联重构
  • 使用 GitLab CI/CD 为 Linux 创建 RPM 包(一)
  • Go语言中error的保姆级认知学习教程,由易到难
  • Go语言中通过get请求获取api.open-meteo.com网站的天气数据
  • 哪些网站可以做微课技术支持 英铭网站建设
  • STM32位带操作理论实践
  • 住房和城乡建设部的网站首页不懂网站怎么做平台
  • 禁止Windows 10升级至Windows 11的方法
  • 人工智能之数学基础:随机变量函数的分布(离散和连续)
  • 30.16.2.表现层框架设计
  • DMS 迁移错误:String Length Exceeds DDL Length 完整解决方案
  • 福建建设厅网站官网宣传推广方案
  • 网站搭建的步骤百度网站怎样做
  • 网站的建设与开发discover wordpress
  • apk反编译修改教程系列-----读懂 Android 签名机制:从 V1 到 V4的签名区别
  • 人工智能本体论!
  • 将Git项目的所有远程分支打包成压缩包文件
  • 做液压的公司网站佛山网站建设格式有哪些
  • 深圳做微商网站的公司二维码生成器app
  • WebClient发送请求示例
  • Wireshark TS | 接收数据超出接收窗口续
  • mapset的使用
  • 要事优先-深耕目标
  • 禄劝彝族苗族网站建设食品 技术支持 东莞网站建设
  • 宁波市省网站建设济南工程建设交易信息网