SD卡SPI模式入门教程
▼我是阿荣,关注我,在技术路上一起精进!▼
SD卡简介
SD卡是一种基于半导体快闪记忆器的新一代记忆设备,英文全称Secure Digital Memory Card,中文名又称安全数码卡。
尺寸分类
按尺寸分类,SD卡分为:标准尺寸,Mini SD,Micro SD(TF卡)。
SD卡和TF卡有哪些区别呢?
SD卡和TF卡主要有以下区别和联系:
- 卡体尺寸不同,SD卡要比TF卡大(TF卡称作Micro SD card);
- 管教定义不同;SD卡管脚要比TF卡多;
- 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。
- 主机首次上电后,所有的卡进入“Idle”状态,包括“Inactive”状态的卡;主机发送GO_IDLE_STATE(CMD0)后,除“Inactive”状态的卡外,其他卡都进入“Idle”状态。
- 主机发送SEND_IF_CON(CMD8)验证SD卡接口操作条件。CMD8中包含了主机支持的电压信息,并询问卡是否支持。
- 如果卡支持该电压,那么响应会传回命令参数里设置的支持的电压和检测模式。
- 如果卡不支持该电压,那么就不会发送响应,并保持在“Idle”状态。
特别的,V2.0规定在发送第一个ACMD41之前要线发送CMD8。CMD8是V2.0协议新增的命令,通过该命令可以识别SD卡是否支持V2.0及以上的协议版本。
- SD_SEND_OP_COND(ACMD41)是用来提供给主机一种机制来识别和拒绝那些不匹配它期望的VDD范围的卡。主机应该重复发送ACMD41直到没有卡返回BUSY(CCS中的字段)。至此,完成对卡的初始化和识别。支持的SD卡进入“Ready”状态。
- 主机通过发送READ_OCR(CMD58)命令,可以查询OCR寄存器的各项参数。
数据传输模式
注:在数据传输模式下,时钟可以设置为更高的频率,最高到25MHz。
当进入到数据传输模式后,主机即可通过命令完成对SD卡数据的读写操作。
SD卡SPI模式入门教程相关推荐
- SPI初始化C语言编程,SD卡spi模式读写,初始化和复位都成功了
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:SD卡spi模式读写,初始化和复位都成功了 问题详情:我用的是内存卡 12M的!有知道是怎么回事的吗?是写入数回答:应该还得格式化, ...
- SD卡 SPI模式操作(1)初始化SD卡
原文(本人转载):帆登小站-SD卡 SPI模式操作(1)初始化SD卡 作者是初学者,水平有限,本文仅作为个人学习笔记使用,不能保证内容的正确性.部分资料来源于网络,参考了SD卡协议2.0手册等资料,如 ...
- SD nand与SD卡 SPI模式驱动
SD nand 与 SD卡的SPI模式驱动 文章目录 SD nand 与 SD卡的SPI模式驱动 1. 概述 2. SPI接口模式与SD接口模式区别 2.1 接口模式区别 2.2 硬件引脚 2.3 注 ...
- cmd的发送 mmc_MMC卡SPI模式
MMC/SD卡简单SPI模式驱动 1. SPI模式下CRC检验无效的. 2. 命令格式是6个字节,采用大端法进行数据传输. 3. 第一个是(命令号|0x40). 4. 第2-5个是有些命令需要 ...
- SD卡SPI读写模式,基于51单片机的讲解
经过验证测试,sd卡使用的spi模式为模式3(mode3),即CPOL和CPHA均为1,时钟线高电平空闲,第二个边沿(上升沿)进行采样. 下面为51单片机软spi读写一个字节时序(模式3)的代码示例, ...
- SD Nand 与 SD卡 SDIO模式应用流程
SD Nand/SD卡 SDIO模式应用流程 文章目录 SD Nand/SD卡 SDIO模式应用流程 1. 前言 1.1 参考文档 1.2 概述 2. Response响应类型及格式 3. 各步骤流程 ...
- linux sd卡只读模式如何消除,SD内存卡写保护怎么去掉-奇迹可解决方案
大家都只读sd内存卡如果不能用了,比如电脑读不出,有些还不能打开,有些可以打开但是不能写入文件,也就是sd卡被写保护了,而遇到这些问题,U盘网之前都教过大家直接使用内存卡修复工具就可以解决,但万事无绝 ...
- 手机SD卡数据恢复【图文教程】
我们常说的TF卡,Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card,由SanDisk(闪迪)公司发明,是一种极细小的快闪存储器 ...
- Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)
一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...
最新文章
- 快速排序(quicksort)算法实现
- abap git - commnication failure错误消息的分析和定位
- 后端:Java中如何更优雅的处理空值,看完你就懂了!
- 回顾2012;展望2013
- QT练习9 Dialog学习
- [渝粤题库]陕西师范大学《商业银行经营学》作业
- php的mbstring模块安装折腾记录
- WASM 成为 HTML、CSS 与 JS 之后的第 4 门 Web 语言
- python语言type board_Micropython TPYBoard开发板控制无线加速度小车
- mysql 创建表字段长度范围_老板要我把这份MySQL规范贴在工位上!
- 【论文写作】课程指导平台的开发中需求分析如何写
- 大快DKH大数据网络爬虫安装教程(详细图文步骤)
- 分别通过【buildpath】和【lib】倒入JAR包有什么不同
- linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
- Excel数据透视表数据源自动更新方法
- 「实战篇」开源项目docker化运维部署-前端java部署(八)
- jodatime java8交互_Joda-time学习笔记
- 一欧拉函数(Euler‘s totient function)
- 永恩上线服务器维护,lol永恩多久上线-英雄联盟:激斗峡谷(国际服 LOL:Wild Rift)问答专区-OurPlay...
- [FPGA]关于Xilinx与Altera两家FPGA结构的对比
热门文章
- 【英语学习】【WOTD】hamartia 释义/词源/示例
- 救世之树服务端架设开服需要哪些东西
- 在hive3.1.2中插入数据,报could not find or load main class org.apache.hadoop.mapred.YarnChild
- 2023年4月动漫新番最新资讯已公布52部!
- 安装R包报错 [tcl] grab failed: window not viewable.的解决方案
- HarmonyOS开发详解(四)——鸿蒙Page Ability功能及UI界面开发详解
- mysql 多主多从
- net-java-php-python-伊犁旅游网站计算机毕业设计程序
- 一个完整的项目管理流程!
- C# 实现对PPT插入、编辑、删除表格