SD卡SPI模式入门教程

news/2025/2/10 23:03:27/

▼我是阿荣,关注我,在技术路上一起精进!▼

SD卡简介

SD卡是一种基于半导体快闪记忆器的新一代记忆设备,英文全称Secure Digital Memory Card,中文名又称安全数码卡。

尺寸分类

按尺寸分类,SD卡分为:标准尺寸,Mini SD,Micro SD(TF卡)。

在这里插入图片描述

SD卡和TF卡有哪些区别呢?

SD卡和TF卡主要有以下区别和联系:

  1. 卡体尺寸不同,SD卡要比TF卡大(TF卡称作Micro SD card);
  2. 管教定义不同;SD卡管脚要比TF卡多;
  3. TF卡插入卡套可作为SD卡使用;反之则不行。

在嵌入式领域,尤其是小设备,通常使用TF卡。下文中除特殊说明外,用SD卡统一称呼而不做区分。

容量分类

按容量分类,SD卡分为:SDSC卡(小于等于2GB),SDHC卡(大于2GB且小于等于32GB),SDXC卡(大于32GB且小于等于2TB)。其中SDSC卡和SDHC卡协议兼容,而与SDXC卡有很大的差异。本文中主要讨论前者。

工作电压范围

高电压SD卡工作电压范围:2.73.6V;双电压SD卡工作电压范围:低电压范围(T.B.D)和2.73.6V。

速度等级

SD卡V2.0标准协议定义了4个速度等级,来表示卡的最小速率。

  • Class 0 - 这种卡不定义具体性能,代表了这种规范出来之前的所有卡。
  • Class 2 - 最小2MB/s的性能。
  • Class 4 - 最小4MB/s的性能。
  • Class 6 - 最小6MB/s的性能。
  • Class 8 - 最小8MB/s的性能。
  • Class 10 - 最小10MB/s的性能。

高容量SD卡应该支持速度等级规格,并且最小要到Class 2。

注意:性能单位表示的是1000x1000字节/秒,而数据大小的MB单位指的是1024x1024字节。这是因为最大SD总线速度是由最大SD时钟频率决定的,而数据大小是基于存储范围。

这个Class一般标记在卡上,带有一个不闭合的圆圈,形如字母C。如下图的卡为Class 4。

在这里插入图片描述

操作模式

SD卡主要有两种操作模式:SD卡模式(使用SDIO接口),SPI模式(使用SPI接口)。

SD卡接口说明

两种模式下各引脚的定义见下图所示意。本文主要讨论后者。

SD卡引脚定义

在这里插入图片描述

TF卡引脚定义

在这里插入图片描述

SD卡通信协议

随着技术的发展,SD卡的标准已经更新了好多版。然而,对于速率要求不高的嵌入式产品而言,选择支持V2.0标准的SD卡已经足够了。因此本文仅讨论V2.0的情况,感兴趣的读者可自行搜索更高版本的资料进行查看。

SPI协议请求命令格式

在这里插入图片描述
SD卡的命令由三部分组成:Command,Command Argument和CRC。

CMD和ACMD

标准协议中定义了两类命令类型:CMD和ACMD。其中,ACMD指的是特定于应用程序的命令,即应用命令。这类命令在使用前要先发送CMD55命令,指示下一步要发送应用命令。而CMD则指的是标准命令。
根据标准文档中的说明,CMD0表示Command值为0,CMD1表示Command值为1,如此类推。注意使用的是十进制表示。

SPI协议响应命令格式

对于SPI模式,标准中定义了5种应答格式,分别为:R1,R1b,R2,R3,R7。具体每条命令对应的应答及其格式,请查看文档的P102页说明。此处不做阐述。

在这里插入图片描述

命令举例

下图中采集的是ACMD41命令的波形图。在命令发送前多发了一个字节数据用于判断SPI总线是否就绪。
在这里插入图片描述
0x77表示CMD55,即55 + 0x40 = 0x77。
0x69表示ACMD41,即41 + 0x40 = 0x69。
0x77,0x00,0x00,0x00,0x00,0x01整包命令发送完后,通过发送0xFF接收响应帧。此处CMD55的响应帧为R1,即0x01字节。
CMD55发送完后,发送ACMD41:0x69,0x40,0x00,0x00,0x00,0x01。此处ACMD41的响应帧为R1,即0x01字节。

SD卡初始化序列

操作模式

SD卡系统定义了两种操作模式:卡识别模式和数据传输模式
卡识别模式:在复位后,查找总线上的新卡的时候,主机会处于“卡识别模式”。卡在复位后会处于识别模式。
数据传输模式:当RCA第一次发布后,卡会处于“数据传输模式”。主机会在总线上所有的卡都被识别后进入这个模式。
在这里插入图片描述

上电

上电时,主机给SD卡供电,电压在250ms之内达到Vdd最小值,并且开始提供最少74个SD卡时钟序列给SD卡。期间,保持CMD线为高电平。如果是SPI模式,那么CS应该在74个时钟周期内保持高电平。
上电之后,卡会进入idle状态,如果是使用SD模式,CMD0非必需;而使用SPI模式时,第一条命令就应该发送CMD0并保持CS为低电平,让SD卡进入SPI模式。

卡识别模式

不同的SD卡可能支持不同版本的协议或者不同的工作电压。因此,作为主机,在与SD卡进行交互之初,主机需要获取卡的工作电压范围和卡的类型。
注:在卡识别器件,时钟频率应保持在100~400kHz。

  1. 主机首次上电后,所有的卡进入“Idle”状态,包括“Inactive”状态的卡;主机发送GO_IDLE_STATE(CMD0)后,除“Inactive”状态的卡外,其他卡都进入“Idle”状态。
  2. 主机发送SEND_IF_CON(CMD8)验证SD卡接口操作条件。CMD8中包含了主机支持的电压信息,并询问卡是否支持。
  • 如果卡支持该电压,那么响应会传回命令参数里设置的支持的电压和检测模式。
  • 如果卡不支持该电压,那么就不会发送响应,并保持在“Idle”状态。
    特别的,V2.0规定在发送第一个ACMD41之前要线发送CMD8。CMD8是V2.0协议新增的命令,通过该命令可以识别SD卡是否支持V2.0及以上的协议版本。
  1. SD_SEND_OP_COND(ACMD41)是用来提供给主机一种机制来识别和拒绝那些不匹配它期望的VDD范围的卡。主机应该重复发送ACMD41直到没有卡返回BUSY(CCS中的字段)。至此,完成对卡的初始化和识别。支持的SD卡进入“Ready”状态。
  2. 主机通过发送READ_OCR(CMD58)命令,可以查询OCR寄存器的各项参数。

数据传输模式

注:在数据传输模式下,时钟可以设置为更高的频率,最高到25MHz。
当进入到数据传输模式后,主机即可通过命令完成对SD卡数据的读写操作。


http://www.ppmy.cn/news/256412.html

相关文章

华为 java sd卡,手机添加存储卡 内存变大不卡顿——华为SD卡扩容实例

手机的基本功能是接听电话收发短信,电脑是人工智能机器人,二者合并便是智能手机,也就是今天所说的“手机”。 手机用于记忆和工作的“脑海”里拥挤不堪时便会卡顿频发,这”脑海”就是手机的“内存”。 人的脑海分为大脑和小脑&…

关于Android读取SD卡存储的动态申请

关于Android读取SD卡存储的动态申请 介绍Android的目录结构数据的主要存储方式疑惑原来的代码:MainActivity.java修改后代码: 介绍 这篇文章主要关于我学习SD卡的动态获取权限时的一些问题。 Android的目录结构 参考自解析Android内部存储、外部存储的…

SD卡及SDIO协议简介

1、SD卡分类 STM32F4里,只支持SD 2.0协议,SD和SDHC属于这个范畴,SDXC是4.0协议,所以不支持;另外SDHC卡,有些数据块大小是512,有的是1024,STM32F4只支持读取512大小的,意…

STM32完成SD卡的数据写入

文章目录 一、SD卡模块简介二、读取SD卡三、总结四、参考 一、SD卡模块简介 简介 SD存储卡是一种基于半导体快闪记忆器的新一代记忆设备,由于它体积小、数据传输速度快、可热插拔等优良的特性,被广泛地于便携式装置上使用,例如数码相机、平板…

龙芯2K1000实战开发-kernel 开发

文章目录 概要整体架构流程技术名词解释技术细节小结概要 提示:这里可以添加技术概要 例如: 本文主要解释龙芯2K1000的内核开发。 整体架构流程 提示:这里可以添加技术整体架构 1.从 ftp 上下载的 Kernel 源码一般都会有一个 mymake 的脚本,编译和配置可以 直接借用此…

如何使用 Git

Git 是一种分布式版本控制系统,它可以记录文件的变化历史,并且可以在不同的分支上进行开发。在软件开发中,Git 是一个必不可少的工具。本文将介绍如何使用 Git。 安装 Git 首先,你需要在你的电脑上安装 Git。你可以在 Git 的官网…

DETR模型转RKNN

目录 1.前言 2.准备工作 3.开始转模型 4.测试代码 5.不想转,直接用也可以,转好的给你,请关注评论一下 1.前言 RKNN出最新版本了,测试了一下,rk在transformer方面做了很多的工作,至少之前不能转的模型&am…

【面试宝典】优秀求职者的必备技能-如何回答“小伙子,请做一下自我介绍?”

前言 我是沐风晓月,今天起,我的付费专栏《面试宝典》上线了,此专栏由互联网老辛,IT民工金鱼哥,漂流客,极客运维之家,逃离广寒宫的兔子,等多位大佬加持,有以下几个优势: 最贴近面试市场,都是大佬们的学员或者公司的最新面试题 最详细的面试方法,近千名学员面试复盘…