SD卡规范解读

sd 卡驱动--基于高通平台 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍SD卡硬件) http://blog.csdn.net/wavemcu/article/details/7366852     linux2.6内核SD Card Driver详细解析之一 http: 阅读详情

1. SD卡介绍

1.1 各类型储存卡/接口

首先了解一下我们在SD卡驱动学习中会碰到的主要几个储存卡名词:

SD:Security Digital Memory Card,新一代多媒体储存卡,高速,安全(但安全机制貌似很少用到)
MMC:Multimedia Card,SD卡的上一代多媒体储存卡,已基本被SD卡代替
eMMC:Embedded Multimedia Card,内嵌式存储器,一般焊在PCB上。内置主控制器,以实现统一MMC接口(在传统MMC接口上拓展,集成了整套理论),Nand Flash就是eMMC
SDIO:Secure Digital Input and Output Card,SD标准上定义了一种外设接口,有很多设备模块采用。如Wifi,GPS,Bluetooth

1.2 SD卡特性

以下是SD卡的部分特性。

  • 正向兼容MMC卡:能插SD卡的接口也可以插MMC卡
  • 最大10个堆叠的卡
  • SD模式和SPI模式
  • 可变时钟(0~25MHz),可变电压(2.0~3.6V)
  • 带电插拔保护
  • 安全系统,双方认证和“新的密码算法”技术

更多的特性请阅读SD卡官方规范。

2. SD卡硬件规范

2.1 SD卡物理接口

下图是SD卡和MMC卡的针脚:

SD,MMC卡针脚

可以看到,SD卡在MMC卡基础上增加了8、9两个针脚,这两个针脚将被用作数据传输,以支持SD传输模式。SD卡支持SD模式(4数据线)和SPI模式(2数据线),MMC卡只支持SPI模式。

SD卡针脚对应的功能:(SD模式)

SD卡针脚对应功能

 

SD模式:数据并行传输,2地,1电源,1时钟,1命令,4数据线(4出入)(SD模式的命令通过命令线传输)
SPI模式:数据串行传输,2地,1电源,1时钟,1片选,2数据线(1入1出)(SPI模式的命令通过数据线传输)

以下内容,如无分开说明,默认指SD模式。(本文不会涉及SPI模式学习)

2.2 SD卡与主机的连接

SD模式和SPI模式中与主机的连接拓扑图如下:

image

在SD模式中,数据线和命令线是分开连接到主机各GPIO口中的。在SPI模式中,片选线分别连接到主机各GPIO口,数据线在同一条总线上。

因为SPI模式的数据线在同一总线上,所以需要片选来选择不同的储存卡;SD模式分别连接到主机,不需要片选线。

3. SD卡命令规范

3.1 命令类型

SD卡有数十种指令,但无非都是一些获取信息,数据传输的功能,并不会很难理解。规范书上有详细的状态转换图,下面会有介绍。

下面是4种指令类型:

  • 广播指令,无应答(代号bc):发送完此类命令后,并不会有反馈,但操作已经生效。
  • 广播指令,有应答(代号bcr):发送完此类命令后,SD卡会给予反馈。可能是一些寄存器信息,可能是
  • 寻址(点对点)指令(代号ac):发送完此类命令后,只有指定地址的SD卡会给予反馈(地址通过命令请求SD卡发布,是唯一的)。此时DAT线上无数据传输。
  • 寻址(点对点)数据传输指令(adtc):发送完此类命令后,只有制定地址的SD卡会给予反馈。此时DAT线上有数据传输。

3.2命令表

官方文档将命令分成了好几种功能。下面将所有命令列出,仅作查阅了解用,不需要每个命令都记住:

基础命令:用于重置、切换SD卡状态,获取相关信息

SD卡命令表class0

读块命令:读单个、多个块数据,设置块长度

SD卡命令表class2

写块命令:写单个、多个块数据,设置块长度

SD卡命令表class4

擦除块命令:把对应的块数据擦除

SD卡命令表class5

写保护命令:设置、取消对应地址的数据的写保护,可以使其他程序无法写入指定的地址,达到保护目的。用的情况不太多。

SD卡命令表class6

锁卡命令:设置、取消锁卡。锁卡后需要密码才能访问SD卡。

SD卡命令表class7

应用特殊命令:CMD55,使用ACMD前必须先发送的命令;CMD56是标准的读、写命令,会读、写一个block的数据。

SD卡命令表class8_thumb[1]

SDIO命令:预留给SDIO设备使用(CMD5也是预留给SDIO设备),在SD卡官方文档中没有说明具体用途

SD卡命令表class9

SD卡专用命令:MMC卡无法使用这些命令,里面包括如设置数据总线位宽,获取SD卡信息(寄存器)。

SD卡命令表ACMD1

SD卡命令表ACMD2

3.2 命令/数据传输方式

命令的传输协议大致如下:

  • 0开头,1结尾
  • 大端传输:先MSB,最后LSB
  • CRC校验

下面这幅图是无响应和无数据两种命令的传输情况:

SD卡命令传输方式(无数据传输)

非常清晰易懂,就不赘述了。

下面这幅图是多块数据读的数据传输情况:

SD卡命令传输方式(有数据传输)

主机发送多块读命令时,首先sd卡会做出回应,同时准备数据。数据准备完成后开始发送,并在每个block传输完成后加入crc校验码。传输完一个block和crc后紧跟着下一个block的数据传输,直到传输完成,或主机发送了新的命令。

SD模式有4根数据线,一次可以传输半个字节,两次一个字节。他们的传输方式如下图:

SD卡命令传输方式

同样是先传MSB,再传LSB,一次传半个字节,这样做可以方便主机做位移组合成一个字节。如果每条线单独传一个字节,则需要移位8次才可以获得一个完整的byte。

3.3 状态转换

下图为SD卡状态转换图。重新上电时为Idle状态:

SD卡状态转换图1

SD卡状态转换图2

看起来这个状态图很复杂,其实我们要走的流程并不复杂。Linux驱动对SD卡做初始化会经过如下步骤:

CMD0上电重置到idle状态(防止一些机型关机不掉电,如某些FPGA平台)->ACMD41获取SD卡支持的电压信息(还需要通过主机控制器设置电压)->CMD2获取卡商信息->CMD3请求SD卡发布相对地址->CMD9获取CSD寄存器,即卡的电气特性数据(需要使用SD卡相对地址)->CMD7通过相对地址选择对应的SD卡,该卡进入数据传输Transfer State状态->各种CMD进行block读写

3.4 流程差异

不同种类的卡初始化过程是不一样的,通过流程差异我们可以判断不同类型的卡。

SDIO:CMD0之后执行CMD5,CMD5只有SDIO类型才会有响应。

MMC:ACMD 41换为CMD1,ACMD类命令只有SD或SDIO卡才有响应。所以要先检测是否是SDIO,再检测是否是SD,最后检测是否是MMC(core层代码中也是这个顺序),否则会出现误判。

 

4. SD卡寄存器

SD卡一共有6个寄存器,我们用的对多的是CID(卡商信息),RCA(相对地址)和OCR(电压信息):

SD卡寄存器

CID:卡信息:生产商,OEM,产品名,版本,出产日期,CRC校验(所有寄存器都有,下同),常用
RCA:卡地址:在初始化时发布,用于与host通信,0x0000表示与所有卡通信,常用
DSR:驱动相关,总线电流大小,上升沿时间,最大开启时间,最小开启时间
CSD:数据传输要求:包括读写时间,读写电压最大最低值,写保护,块读写错误
SCR:特性支持,如CMD支持,总线数量支持
OCR:支持的电压,常用
SSR:特有特性,卡类型(OTP,SD等),一次擦除块数量
CSR:R1返回指令的卡状态,此寄存器用与传输卡状态给host

命令系统中有对应的指令获取这6个寄存器。

08-SD卡-TF卡硬件电路设计 SD卡-TF卡硬件电路设计 阅读详情

相关推荐

别再折腾了!用Rufus和官方固件,5分钟搞定友善R2S的OpenWrt刷机

本文提供了一种极简的R2S OpenWrt刷机方案,使用Rufus工具和官方固件,5分钟内即可完成。详细介绍了SD卡选择、固件下载、Rufus参数设置及首次启动的注意事项,帮助新手避免常见问题,快速上手软路由配置。

weixin_30902251的博客 345

SD卡驱动-基础知识

在进行SD卡驱动介绍之前,我的思路是先讲一下我们要驱动的对象-SD卡,他的一些基本信息,从这些信息里我们能了解、抽象出来通用信息,这些信息也是我们做驱动的时候,需要了解的内容,力求在开始正式驱动工作前,通过这篇文章就能对SD卡的信息了解的非常详细。

优快云mianfeixiazai001的博客 5048

【RK3588】正点原子开发板资料全解析:从SDK到镜像一站式指南

本文全面解析正点原子RK3588开发板资料,从SDK下载到镜像烧录提供一站式指南。详细介绍了开发板配套资料的完整性,包括硬件参考、SDK资源及预装Ubuntu虚拟机的使用技巧,助力开发者快速上手RK3588开发。

weixin_42522374的博客 612

TF/SD卡开发驱动(SPI)

对于SD卡的SPI模式在上电同步后应该马上进行CM0复位进入SPI模式,SDIO模式这步非必要,复位时序在正常情况下都是要求四线都是高电平,这也是为什么外接上拉电阻的原因,如果CS交给硬件管理,那么只会在发送数据的时候拉低CS,完成马上拉高CS,所以不符合这里的时序,还有一个问题就是MOSI在空闲时必须保持高电平,这点非常重要,就算外接上拉电阻复用后也会被拉下来,因为是输出,默认是输出低电平的,所以在发送时钟脉冲的时候MOSI初始为输入IO口就好了,在需要发送数据之前在复用到SPI上。

Ender_LJY的博客 4726

STM32的SD卡与SDIO接口

STM32的SD卡与SDIO接口

扬帆起航 3514

AP11说明书解读:云台USB线连接与GPS状态码读取指南

运动相机功能丰富,但说明书常以编号和缩写压缩信息,让用户面对一堆接口索引和状态代码时无从下手。理解设备接口映射与状态字符串背后的原理,是高效使用设备的基础。通过实物对照表重建接口编号,掌握云台USB线的接线顺序和USB枚举验证,能避免线缆反插和供电不稳;读懂GPS状态栏中的NRM、S1-S4和DF/M等缩写,可快速判断定位质量,还能利用GPS校时和NMEA日志进行轨迹归档。在SD卡选型与格式化上,U3/V30和FAT32是保障录像稳定性的关键。这些技巧既适用于AEE AP11,也能迁移到同类带云台和GPS功

weixin_29184371的博客 219

SD卡规范更新介绍:新一代SD卡规范的全面解读

SD卡规范更新介绍:新一代SD卡规范的全面解读 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在数字存储领域,SD卡作为广泛使用的存储介质,其规范更新始终备受关注。本文将为您详细介绍SD卡规范的最新版本——SD Specifications Part1 Physical Layer Specification Version 3.00。这一版本的更新不仅提升了SD卡的...

gitblog_06751的博客 1139

Altium Designer MP3播放器原理图工程实践指南

原理图设计是嵌入式硬件开发的基础环节,其核心在于信号完整性、器件选型依据与接口约束显化。Altium Designer 作为主流PCB设计工具,支持层次化设计、跨页网络管理及严格电气规则检查(ERC),显著提升MP3解码系统等音视频终端的工程可靠性。通过VS1053B解码芯片、SD卡接口、音频输出通道等典型模块的参数配置与连接验证,工程师可系统掌握电源去耦、SPI时序匹配、RC滤波设计等关键技术。该实践适用于毕业设计、小批量终端开发及Altium Designer从入门到规范交付的全流程进阶,尤其助力OrC

weixin_29165725的博客 166

SD卡TF卡封装大全资源介绍

SD卡TF卡封装大全资源介绍 去发现同类优质开源项目:https://gitcode.com/ 本文档包含了SD卡和TF卡各类封装的详细资料,适合电子工程师、硬件开发者和爱好者参考使用。资源内含以下内容: SD长卡封装 SD短卡封装 弹出式SD卡封装 非弹出式SD卡封装 TF卡封装 TF卡外焊封装 TF卡内焊封装 带检测脚的TF卡封装 PCB封装文件 封装相关PDF文档 资源中的PCB库文件适...

gitblog_06726的博客 430

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3813

SD卡TF卡封装大全资源介绍:开源封装库助力硬件开发

SD卡TF卡封装大全资源介绍:开源封装库助力硬件开发 去发现同类优质开源项目:https://gitcode.com/ SD卡TF卡封装大全资源是电子工程师和硬件开发者的实用工具,包含了各类SD卡和TF卡封装的详尽资料。以下是关于此项目的详细介绍。 项目介绍 在电子设计和硬件开发中,SD卡和TF卡是常见的存储介质。为了便于电子工程师和开发者进行电路设计和集成,SD卡TF卡封装大全资源应运而生。该项...

gitblog_06750的博客 689

Flash芯片的VCC上电到可操作时间过长

Flash的VCC上电到操作时间(tVSL)通常有最大值限制,如果超过这个时间,核心风险是状态机不同步和指令锁存错误。比如芯片内部振荡器可能已经尝试启动又休眠了,但主控却在这之后才发送指令,导致完全 misinterpreted。Flash芯片的(从电源上电到可以正常进行读写操作的时间)如果过长,会产生一系列负面影响简单来说,这个时间过长意味着电源上升速度太慢,违反了芯片的要求。

qq_61918649的博客 722

别再为SD卡格式化头疼了!手把手教你用FAT32格式搞定DGUS屏程序下载

本文详细介绍了如何正确使用FAT32格式处理SD卡,以确保DGUS屏顺利识别并下载程序。从格式化设置到文件存放规则,再到常见问题排查,提供了全面的解决方案和实用技巧,帮助嵌入式工程师高效完成DGUS屏开发任务。

weixin_42657024的博客 338

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1922

Hcaptcha验证码破解深度解析:从环境检测到n值算法的攻防实战

本文深入解析Hcaptcha验证码的攻防技术,从环境检测到n值算法的全面突破策略。详细介绍了浏览器指纹模拟、图像识别工程化解决方案及协议层逆向分析,为安全研究人员提供高效破解Hcaptcha的实战指南。

weixin_42563415的博客 372

SD 2.0协议标准完整版---中文版:为存储技术提供高效安全保障

SD 2.0协议标准完整版---中文版:为存储技术提供高效安全保障 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当前数字时代,数据存储的需求日益增长,SD(Secure Digital)卡凭借其安全、高效、容量大的特点,成为音视频电子存储的首选。SD 2.0协议标准完整版---中文版项目,为技术人员和爱好者提供了全面的SD存储卡技术规范解读,是理解SD卡技术核心和...

gitblog_06729的博客 345

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1495

15_实验十四_eMMC和SD卡操作命令

本实验通过U-Boot的mmc命令族,全面探查FS-MP1A开发板上eMMC与SD卡的存储结构。重点实测并确认:设备号0为SD卡、1为eMMC,当前设备由启动源决定;eMMC采用GPT分区表,共五分区(ssbl/bootfs/vendorfs/rootfs/userfs),各分区起止扇区已精确获取。通过mmc info/list/dev/part/read完成基础操作验证,明确扇区单位(512字节)、进制转换规则及分区编号体系。强调write/erase/hwpartition等高危命令仅作了解,禁止在U-

GaoYang0729的博客 316

uniapp | vue2 | vue3 - 解决调用天地图功能服务时 http 网络请求报错 net::ERR ABORTED 503(Service Temporarily Unavailabl)

vue,uni-app,天地图,请求报错,503,请求失败,map.tianditu,天地图503,天地图请求503,接口503错误怎么办,vue天地图,uniAPP天地图,获取定位接口服务器报错503,获取当前定位,定位功能,IP属地定位,天地图服务器报错,如何解决报错,net::ERRABORTED503(ServiceTemporarilyUnavailabl),GET,POST,服务暂时不可用,react天地图,一直等待吗,报错怎么办,定位报错,轨迹,经纬度,天地图服务器503,在vue2

🏆 前端领域优质创作者 4438

Cursor使用教程:用 Cursor 创建第一个 Java 项目

Cursor是一款基于VS Code的AI编程编辑器,专为开发者设计。安装前需确保JDK 8+、Maven 3.8+等环境配置,支持Windows系统。编辑器提供中文界面选项,可通过扩展市场安装语言包。创建Java项目支持手动和AI提示词两种方式:手动需创建目录结构并编写代码;AI方式则通过自然语言描述快速生成项目框架和代码。标准Java项目包含src/main/java主代码目录、src/test/java测试目录及pom.xml等配置文件。Maven项目中,pom.xml是核心配置文件,管理项目依赖与构

博客 3547

树莓派系统安装避坑指南:从SD卡选择到首次SSH登录的全流程解析

本文详细解析树莓派系统安装全流程,从SD卡选择到首次SSH登录的关键步骤。重点分析SD卡性能指标、系统烧录工具对比、无头启动配置技巧及常见问题解决方案,帮助用户避开安装过程中的常见陷阱,顺利完成树莓派系统部署。

weixin_33671935的博客 403

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入解析SD卡CMD指令集:从寄存器操作到数据传输实战

本文深入解析SD卡底层通信的CMD指令集,涵盖从关键寄存器(如OCR、CSD、SCR)操作到完整初始化流程的实战指南。详细讲解了如何通过CMD8、ACMD41等指令进行电压协商与卡类型识别,并阐述了单块与多块读写(CMD17/24, CMD18/25)以及擦除等高级操作,帮助开发者彻底掌握SD卡驱动原理,解决初始化失败、读写不稳定等常见问题。

hill8的博客 986

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

FLUX LoRA 训练实战:从 kohya 环境搭建到单卡多卡 Accelerate 配置全指南

随着扩散模型在图像生成领域的演进,基于 Transformer 架构的新一代模型带来了更强的语义理解与生成能力。微调技术中的低秩适配(LoRA)因其参数高效、训练成本可控,成为个性化风格迁移与概念注入的主流手段。然而,实际落地中往往面临硬件适配、依赖版本冲突、分布式调度复杂等挑战。理解模型加载、文本编码器缓存、梯度计算与混合精度优化等底层原理,能够帮助开发者有效规避显存溢出(OOM)与训练不收敛等问题。结合 HuggingFace Accelerate 工具,可在单卡或多卡环境下统一管理训练流程,提升资源利

weixin_31062533的博客 96

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SD协议物理层简化规范文档下载:全面掌握SD卡技术规范

SD协议物理层简化规范文档下载:全面掌握SD卡技术规范 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在数字存储领域,SD(Secure Digital)卡因其小巧便携、存储容量大以及安全性高等特点,被广泛应用。然而,对于工程师和研究人员来说,深入理解SD卡的物理层技术规范是一项挑战。为此,SD协议物理层简化规范文档下载项目应运而生,为技术人员提供了宝贵的资源。 项目...

gitblog_06797的博客 291

android 获取sd卡目录失败_树莓派对SD卡的大小,速度有哪些要求?

SD卡容量的大小通过NOOBS安装带有桌面和推荐软件(完整)的 Raspberry Pi OS,SD卡最小为16GB。 对于带有桌面和推荐软件的 Raspberry Pi OS 镜像安装,SD卡最小为8GB。对于安装 Raspberry Pi OS Lite,建议 SD 卡最小为4GB。某些发行版,例如LibreELEC和Arch,可以在容量更小的卡上运行。如果要在64GB或更大的卡上使用NOOB...

weixin_39771987的博客 600
上一篇: USB协议基本知识
下一篇: SPI 协议详解
LinuxWorking
博客等级 码龄10年 24粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值