SD卡简单介绍-数据传输、模式流程_sd卡的crc是必须的吗

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取


SD卡数据包

使用 4 数据线传输时,每次传输 4bit 数据,每根数据线都必须有起始位、终止位以及 CRC 位, CRC 位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过 D0 线反馈给主 机。

SD卡有两种数据包格式。

  • 常规数据(8位宽度):常规数据(8位宽度)首先以LSB(最低有效字节)顺序发送,最后以MSB(最高有效字节)顺序发送。但在单个字节中,它首先是MSB(最高有效位),最后是LSB(最低有效位)。
  • 宽数据(SD内存寄存器):宽数据从MSB位移位。

常规数据格式

来自[野火]《STM32库开发实战指南》

DAT3 数据线发较高位,DAT0 数据线发较低位。先发低字节再发高字节,每个字节先发高位再发低位。每根线发送一个字节的其中两位。

宽位数据包格式

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

来自[野火]《STM32库开发实战指南》


命令格式

命令编码格式

来自[野火]《STM32库开发实战指南》

命令组成:

  • 起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为 0,终止位为 1。
  • 传输标志:用于区分传输方向,该位为 1 时表示命令,方向为主机传输到 SD 卡,该位为 0 时表示响应,方向为 SD 卡传输到主机。
  • 命令号:它固定占用 6bit,所以总共有 64 个命令 (代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于 SD 卡操作,只是专门用于 MMC 卡或者 SD I/O 卡。
  • 地址/参数:每个命令有 32bit 地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这 32bit 用于指定参数,而寻址命令这 32bit 用于指定目标 SD 卡的地址。
  • CRC7 校验:长度为 7bit 的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD 卡不执行命令。

命令类型

SD 命令有 4 种类型:

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

响应编码格式

在 CMD 中,最高有效位(MSB)首先传输,最低有效位(LSB)最后传输。

响应由 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 卡支持 SDIO 模式和 SPI 模式。

SDIO模式

SD卡模式针脚定义

针脚名称类型描述
1CD DAT 3I/O/PP卡监测数据位3
2CMDPP命令、回复
3VSSS
4VCCS供电电压
5CLKI时钟
6VSS2S
7DAT 0I/O/PP数据位 0
8DAT 1I/O/PP数据位 1
9DAT 2I/O/PP数据位 2

注:S:电源供电,I:输入 O:输出 I/O:双向 PP:I/O 使用推挽驱动

SD 总线允许强大的 1 线到 4 线数据信号设置。当默认的上电后,SD 卡使用 DAT0。 初始化之后,主机可以改变线宽(即改为 2 根线,3 根线,4 根线。)。

CLK时钟线,由 SDIO 主机产生。
CMD命令控制线,SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应 答 (响应),SD 卡也是通过该线传输应答信息。
D0-3数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态。

SPI模式

如果接到复位命令(CMD0)时,CS 信号有效(低电平),SPI 模式启用。

SIP 模式允许较为简单的 SPI 通道接口,相比于 SDIO 模式传送速度降低。

SPI模式需要两根数据线,一根片选。SPI 兼容模式使得 MMC 主机系统通过很小的改动就可使用SD卡。SPI 模式使用字节传输。

注意:SPI 模式时,这些信号需要在主机端用 10~100K 欧的电阻上拉


SD卡的操作模式及其切换

SD 卡系统 (包括主机和 SD 卡) 定义了两种操作模式:卡识别模式和数据传输模式。在系统复位 后,主机处于卡识别模式,寻找总线上可用的 SDIO 设备;同时,SD 卡也处于卡识别模式,直 到被主机识别到,即当 SD 卡接收到 SEND_RCA(CMD3) 命令后,SD 卡就会进入数据传输模式, 而主机在总线上所有卡被识别后也进入数据传输模式。在每个操作模式下,SD 卡都有几种状态, 参考表 SD 卡状态与操作模式 ,通过命令控制实现卡状态的切换。

SD卡的几种状态

操作模式SD卡状态
无效模式(Inactive)无效状态(Inactive State)
卡识别模式(Card identification mode)空闲状态(Idle State) 准备状态(Ready State) 识别状态(Identification State)
数据传输模式(Data transfer mode)待机状态(Stand-by State) 传输状态(Transfer State) 发送数据状态(Sending-data State) 接收数据状态(Receive-data State) 编程状态(Programming State) 断开连接状态(Disconnect State)

SD卡状态转换

重新上电时为Idle状态

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

SD存储卡状态图

来自[野火]《STM32库开发实战指南》

主机上电后,所有卡处于空闲状态,包括当前处于无效状态的卡。主机也可以发送 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。

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

9)]
[外链图片转存中…(img-HxrhQYLZ-1715903848730)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值