IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> SD卡笔记 -> 正文阅读

[嵌入式]SD卡笔记

SD卡的分类

在这里插入图片描述

SD I/O 卡本身不是用于存储的卡,它是指利用 SDIO 传输协议的一种外设。比如 Wi-Fi Card,它主要是提供Wi-Fi 功能,有些 Wi-Fi 模块是使用串口或者 SPI 接口进行通信的,但 Wi-Fi SDIO Card 是使用SDIO 接口进行通信的。

即使目前 SD 协议提供的 SD 卡规范版本最新是 4.01 版本,stm32f4xx 系列控制器只支持 SD 卡规范版本 2.0,即只支持标准容量 SD 和高容量 SDHC 标准卡,不支持超大容量SDXC 标准卡,所以可以支持的最高卡容量是 32GB。

SD卡的结构与寄存器

一张 SD 卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器 5 个部分。

  • 存储单元是存储数据部件;
  • 存储单元通过存储单元接口与卡控制单元进行数据传输;
  • 电源检测单元保证 SD 卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;
  • 卡及接口控制单元控制 SD 卡的运行状态,它包括有 8 个寄存器;
  • 接口驱动器控制 SD 卡引脚的输入输出。
    在这里插入图片描述
    在这里插入图片描述

SD总线协议

SD 卡一般都支持 SDIO 和 SPI 这两种接口,一般使用SDIO接口
SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线

在这里插入图片描述

在这里插入图片描述
虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独 SD 总线应该连接一个单独的 SD 卡。

SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效。

SD 卡操作过程会使用两种不同频率的时钟同步数据,
一个是识别卡阶段时钟频率 FOD,最高为 400kHz,
另外一个是数据传输模式下时钟频率 FPP,默认最高为 25MHz,如果通过相关寄存器配置使 SDIO 工作在高速模式,此时数据传输模式最高频率为 50MHz。

SD 总线通信是基于命令和数据传输的。通讯由一个起始位 (“0”),由一个停止位 (“1”) 终止。
SD 通信一般是主机发送一个命令 (Command),从设备在接收到命令后作出响应 (Response),如有需要会有数据 (Data) 传输参与。

在这里插入图片描述
SD 数据是以块 (Black) 形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,
也可以是从卡到主机。数
据块需要 CRC 位来保证数据传输成功。CRC 位由 SD 卡系统硬件生成。
在这里插入图片描述
SD 卡忙状态通过把 D0 线拉低表示。

数据块读操作与之类似,只是无需忙状态检测。

数据包格式

SD 卡数据包有两种格式,一种是常规数据 (8bit 宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位
在这里插入图片描述

4 线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3 数据线发较高位,DAT0 数据线发较低位

另外一种数据包发送格式是宽位数据包格式,对 SD 卡而言宽位数据包发送方式是针对 SD 卡SSR(SD 状态) 寄存器内容发送的,SSR 寄存器总共有512bit,在主机发出 ACMD13 命令后 SD 卡将 SSR 寄存器内容通过 DAT 线发送给主机。

在这里插入图片描述

命令

SD 命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与 SD 主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输(初始化的时候,地址由SD卡动态建议,主机核准,地址信息存储在RCA寄存器中)。

SD 命令格式固定为 48bit,都是通过 CMD 线连续传输的的(数据线不参与)

在这里插入图片描述
在这里插入图片描述
SD 命令有 4 种类型:

  • 无响应广播命令 (bc),发送到所有卡,不返回任务响应;
  • 带响应广播命令 (bcr),发送到所有卡,同时接收来自所有卡响应;
  • 寻址命令 (ac),发送到选定卡,DAT 线无数据传输;
  • 寻址数据传输命令 (adtc),发送到选定卡,DAT 线有数据传输。

特定命令:SD 卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令 (ACMD) 和常规命令 (GEN_CMD)。要使用 SD 卡制造商特定的 ACMD 命令如 ACMD6,需要在发送该命令之前无发送 CMD55 命令,告知 SD 卡接下来的命令为特定应用命令。CMD55 命令只对紧接的第一个命令有效,SD 卡如果检测到 CMD55 之后的第一条命令为 ACMD 则执行其特定应用功能,如果检测发现不是 ACMD 命令,则执行标准命令。

命令列表

表中填充位和保留位都必须被设置为 0。

  • 基本命令

在这里插入图片描述

  • 面对块的读命令,读块(512B)命令
    在这里插入图片描述
  • 面对块的写/擦除命令,写块(512B)命令
    在这里插入图片描述
  • 其他命令
    在这里插入图片描述

响应

响应由 SD 卡向主机发出,部分命令要求 SD 卡作出响应,这些响应多用于反馈 SD 卡的状态。
SDIO 总共有 7 个响应类型 (代号:R1~R7),其中 SD 卡没有 R4、R5 类型响应。
特定的命令对应有特定的响应类型,比如当主机发送 CMD3 命令时,可以得到响应 R6。

与命令一样,SD 卡的响应也是通过 CMD 线连续传输的

根据响应内容大小可以分为短响应和长响应。短响应是 48bit长度,只有 R2 类型是长响应,其长度为 136bit。

除了 R3 类型之外,其他响应都使用 CRC7 校验来校验,对于 R2 类型是使用 CID 和 CSD 寄存器内部 CRC7。

响应列表

在这里插入图片描述
在这里插入图片描述

SD卡操作模式

SD 卡系统 (包括主机和 SD 卡) 定义了两种操作模式:卡识别模式和数据传输模式在系统复位后,主机处于卡识别模式,寻找总线上可用的 SDIO 设备;同时,SD 卡也处于卡识别模式,直到被主机识别到,即当 SD 卡接收到 SEND_RCA(CMD3) 命令后,SD 卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。

在这里插入图片描述

卡识别模式

  • 确认卡的有效状态
    主 机 上 电 后, 所 有 卡 处 于 空 闲 状 态, 包 括 当 前 处 于 无 效 状 态 的 卡。 主 机 也 可 以 发 送GO_IDLE_STATE(CMD0) 让所有卡软复位从而进入空闲状态,但当前处于无效状态的卡并不会复位。

  • 确认卡的工作电压是否正常
    主机在开始与卡通信前,需要先确定双方在互相支持的电压范围内。SD 卡有一个电压支持范围,主机当前电压必须在该范围可能才能与卡正常通信。SEND_IF_COND(CMD8) 命令就是用于验证卡接口操作条件的 (主要是电压支持)。卡会根据命令的参数来检测操作条件匹配性,如果卡支持主机电压就产生响应,否则不响应。而主机则根据响应内容确定卡的电压匹配性。CMD8 是 SD卡标准 V2.0 版本才有的新命令,所以如果主机有接收到响应,可以判断卡为 V2.0 或更高版本SD 卡。

  • 确认卡的容量
    SD_SEND_OP_COND(ACMD41) 命令可以识别或拒绝不匹配它的电压范围的卡。ACMD41 命令的 VDD 电压参数用于设置主机支持电压范围,卡响应会返回卡支持的电压范围。对于对 CMD8有响应的卡,把 ACMD41 命令的 HCS 位设置为 1,可以测试卡的容量类型,如果卡响应的 CCS 位为 1 说明为高容量 SD 卡,否则为标准卡。卡在响应 ACMD41 之后进入准备状态,不响应 ACMD41的卡为不可用卡,进入无效状态。ACMD41 是应用特定命令,发送该命令之前必须先发 CMD55。

  • 卡进入识别状态
    ALL_SEND_CID(CMD2) 用来控制所有卡返回它们的卡识别号 (CID),处于准备状态的卡在发送CID 之后就进入识别状态

  • 确认卡的相对地址
    主机就发送SEND_RELATIVE_ADDR(CMD3) 命令,让卡自己推荐一个相对地址 (RCA) 并响应命令。这个 RCA 是 16bit 地址,而 CID 是 128bit 地址,使用 RCA简化通信。卡在接收到 CMD3 并发出响应后就进入数据传输模式,并处于待机状态,主机在获取所有卡 RCA 之后也进入数据传输模式。

数据传输模式

只有 SD 卡系统处于数据传输模式下才可以进行数据读写操作。数据传输模式下可以将主机 SD时钟频率设置为 FPP,默认最高为 25MHz,频率切换可以通过 CMD4 命令来实现
在这里插入图片描述

  • 选定/取消选定预通信的SD卡
    CMD7 用来选定和取消指定的卡,卡在待机状态下还不能进行数据通信,因为总线上可能有多个卡都是出于待机状态,必须选择一个 RCA 地址目标卡使其进入传输状态才可以进行数据通信。同时通过 CMD7 命令也可以让已经被选择的目标卡返回到待机状态。

  • 读/写卡
    数据传输模式下的数据通信都是主机和目标卡之间通过寻址命令点对点进行的。卡处于传输状态下可以使用SD命令描述 中面向块的读写以及擦除命令对卡进行数据读写、擦除。CMD12可以中断正在进行的数据通信,让卡返回到传输状态。CMD0 和 CMD15 会中止任何数据编程操作,返回卡识别模式,这可能导致卡数据被损坏。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:31:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:31:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码