SD卡读写实验(SPI模式)

2023-11-18

对于 SD 卡的 SPI 模式而言,采用的 SPI 的通信模式为模式 3,即 CPOL=1,CPHA=1,在 SD 卡 2.0 版

本协议中,SPI_CLK 时钟频率可达 50Mhz。

SD 卡的 SPI 模式,只用到了 SDIO_D3(SPI_CS)、SDIO_CMD(SPI_MOSI),SDIO_SC(SPI_SCK)和 SDIO_D0(SPI_MISO)引脚

sd卡初始化命令

1、SD 卡在正常读写操作之前,必须先对 SD 卡进行初始化,SD 卡的初始化过程就是向 SD 中写入命令。在对 SD 卡进行读写操作时同样需要先发送写命令和读命令,SD 卡的命令格式由 6 个字节组成(先发送高位再发送低位)

写入命令:

byte1:命令号,格式为01xx_xxxx,

byte2~byte5:命令参数

byte6: 前 7 位为 CRC(循环冗余校验)校验位,最后一位为停止位 0. 在 SPI 模式下默认不开启CRC 校验(校验位全部设为1),在 SDIO 模式下开启 CRC 校验.SD 卡上电默认是 SDIO模式,在接收 SD 卡返回 CMD0 的响应命令时,拉低片选 CS,进入 SPI 模式.

SD 卡的命令号(byte1)分为标准命令(如 CMD0)和应用相关命令,在发送应用相关命令之前,必须先发送 CMD55 命令

返回的R1数据格式

返回的 R3 数据格式

返回的R7 数据格式

电压范围比较重要,具体内容如下:

判断SD卡版本:( SD1.0 和SD2.0(SD2.0才支持 CMD8 命令) )

发送CMD8有响应:SD2.0

无响应:发送 CMD55 + ACMD41

返回0 : SD1.0

返回错误: 则是MMC卡,发送CMD1返回0 ,MMC卡初始化成功,否则是错误卡。

SD2.0初始化

1、先对从机 SD 卡发送至少 74 个以上的同步时钟,在上电同步期间,片选 CS 引脚和 MOSI 引脚必须为高电平(MOSI 引脚除发送命令或数据外,其余时刻都为高电平)

2,拉低片选 CS 引脚,发送命令 CMD0(0x40)复位 SD 卡,等待返回数据

3,在接收返回信息期间片选 CS 为低电平,判断数据为复位完成信号 0x01,SD 卡返回响应数据的 8 个时钟周期后再拉高片选 CS 信号,SD 卡进入 SPI 模式。如果返回其他值,重新上一步。

4,拉低片选 CS 引脚,发送命令 CMD8(0x48)查询 SD 卡的版本号,等待返回数据。

5,SD 卡返回响应数据后,先等待 8 个时钟周期再拉高片选 CS 信号,此时判断返回的响应数据,如果为4'b0001,(即2.7V~3.6V), SD卡位2.0版本,否则上一步。

6、拉低片选 CS 引脚,发送命令 CMD55(0x77)告诉 SD 卡下一次发送的命令是应用相关命令,等待返回数据。

7、SD 卡返回响应数据后,先等待 8 个时钟周期再拉高片选 CS 信号,此时判断返回的响应数据。如果返

回的数据为空闲信号 0x01,开始进行下一步

8、拉低片选 CS 引脚,发送命令 ACMD41(0x69)查询 SD 卡是否初始化完成,等待返回数据。

9、SD 卡返回响应数据后,先等待 8 个时钟周期再拉高片选 CS 信号,此时判断返回的响应数据若为0x00,则初始化完成。否则第6步。

SD 卡在初始化的时候,SPI_CLK 的时钟频率不能超过 400KHz,在初始化完成之后,再将 SPI_CLK 的时钟频率切换至SD 卡的最大时钟频率。

SD卡写操作

  1. 拉低片选 CS 引脚,发送命令 CMD24(0x58)读取单个数据块,等待返回数据。

  1. 返回正确响应数据 0x00 后,等待至少 8 个时钟周期,开始发送数据头 0xfe;

3、 发送完数据头 0xfe 后,接下来开始发送 512 个字节的数据(要发送512字节的整数倍)

4、 数据发送完成后,发送 2 个字节的 CRC 校验数据。由于 SPI 模式下不对数据进行 CRC 校验,

直接发送两个字节的 0xff 即可;等待返回数据。

5、SD 卡返回响应数据(xxx0_0101)后会进入写忙状态(MISO 引脚为低电平),即此时不允许其它操作。当检测到 MISO 引脚为高电平时,SD 卡此时退出写忙状态;

6、拉高 CS 引脚,等待 8 个时钟周期后允许进行其它操作。

SD卡读操作

1、 拉低片选 CS 引脚,发送命令 CMD17(0x51)读取单个数据块,等待返回响应数据;

2、 SD 卡返回正确响应数据 0x00 后,准备开始解析 SD 卡返回的数据头 0xfe;

3、 解析到数据头 0xfe 后,接下来接收 SD 卡返回的 512 个字节的数据;

4、 数据解析完成后,接下来接收两个字节的 CRC 校验值。由于 SPI 模式下不对数据进行 CRC

校验,可直接忽略这两个字节;

6、 拉高片选 CS 引脚,等待 8 个时钟周期后允许进行其它操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SD卡读写实验(SPI模式) 的相关文章

  • 此av非彼"AV"

    作者 王亨 R语言中文社区专栏作者 跟着菜鸟一起一步步学习R语言 争做R语言高手 个人公众号 跟着菜鸟一起学R语言 微信ID learn R 最近发现一个特别有意思的包 av 为什么有意思 首先名字有意思吧 其次这个包可以捕获图像 添加背景

随机推荐

  • 华为OD机试真题(Java),最小步骤数(100%通过+复盘思路)

    一 题目描述 一个正整数数组 设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数 要求 第一步 必须从第一元素起 且 1 lt 第一步步长
  • Java企业微信开发_01_接收消息服务器配置

    一 准备阶段 需要准备事项 1 一个能在公网上访问的项目 见 Java微信公众平台开发01本地服务器映射外网 http www cnblogs com shirui p 7308856 html 2 一个企业微信账号 去注册 https w
  • 链式存储结构-----栈

    链式存储结构实现栈 上一节我们说了关于线性表的链式存储结构的实现 今天的栈也是建立在线性表的基础上 栈的特性 先进后出 1 删除时 出栈 我们考虑时间复杂度时发现 删除时的头删的复杂度为O 1 而尾删的时间复杂度为O n 故而我们出栈选择从
  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    操作系统 键盘敲入字母时 操作系统期间发生了什么 参考资料 键盘敲入 A 字母时 操作系统期间发生了什么 操作系统 浅谈 Linux 中的中断机制 文章目录 操作系统 键盘敲入字母时 操作系统期间发生了什么 设备控制器 I O 控制方式 设
  • html 自定义简单的时间轴 timeline 并与 table 图表和 echarts 进度甘特图联动

    1 需求 最近有需求需要实现 table 图表与 eharts 柱状图的联动 完整的效果图如下所示 这里时间轴要实现的效果要基本如下图所示 该时间轴并不是要实现选中单独的某一个月份并查看单月的数据 而是要将当前数据的时间跨度控制在时间轴的跨
  • uniapp 电商app支付倒计时处理

    电商app支付倒计时 所有电商app支付页面都是有倒计时的 一来可以促进消费 二来可以减少恶意减库存的问题发生 因为创建订单的时候 除了预售的商品外 实际销售的商品是需要减库存的 一般的电商app倒计时都是30分钟或者45分钟的 如果在此页
  • 带调速功能的arduino摇头避障小车

    一 材料同上篇文章 二 接线同上篇文章 L298N红板有两个使能端口ENA和ENB 这两个端口默认是有跳线帽的 也就是接5V的 此时输出就是HIGH或者LOW 摘掉跳线帽 将外边端口分别接arduino的PWM接口就好 本文接的是3和11
  • 3.[人脸识别] python-opencv 人脸特征采集与录入

    目录 1 环境 2 描述 3 代码 4 效果 1 环境 1 python 3 6 6 64bit 2 python packages 1 opencv python 3 4 1 15 2 opencv contrib python 4 4
  • 李沐动手学深度学习V2-微调练习

    1 继续提高finetune net的学习率 模型的准确性如何变化 原实验参数 lr 5e 5 batch size 128 num epochs 5 lr 5e 4 lr 5e 6 2 2 在比较实验中进一步调整finetune net和
  • 2018.5.21 . XMLSpy激活的方法

    127 0 0 1 altova com XMLspy 127 0 0 1 www altova com XMLspy 127 0 0 1 link altova com XMLspy 追加加到 C WINDOWS system32 dri
  • Python爬虫

    一 什么是代理 二 代理服务器的作用 可以进行请求的响应和转发 三 在爬虫中为何要使用代理 如果我们使用爬虫对一个网站在一段时间内发起一个高频请求 该网站会检测出这个异常的现象 并将异常的请求 IP 获取 将 IP 加入到黑名单 然后改 I
  • [无线通信基础-14]:图解移动通信技术与应用发展-2-第一代移动模拟通信大哥大

    前言 第一代移动通信主要采用的是模拟通信技术和频分多址 FDMA 技术 模拟通信 analog communication 是利用正弦波的幅度 频率或相位的变化 或者利用脉冲的幅度 宽度或位置变化来模拟原始信号 以达到通信的目的 故称为模拟
  • PyTorch中的符号索引和函数索引用法

    Pytorch中很多函数都采用的是函数式索引的思路 而且使用函数式索引对代码可读性会有很大提升 张量的符号索引 张量也是有序序列 我们可以根据每个元素在系统内的顺序位置 来找出特定的元素 也就是索引 一维张量的索引 一维张量索引与Pytho
  • 基于MATLAB的二进制数字调制与解调信号的仿真——2ASK

    实现二进制数字调制与解调信号的仿真是我的MATLAB课程设计的一部分 我参考了网上的一些资料 并加入了一些自己的想法 代码已在本地MATLAB编译通过且能正常运行 2ASK 二进制振幅键控 i 10 10个码元 j 5000 t linsp
  • java线程分析工具

    下载网站 IBM Thread and Monitor Dump Analyzer for Java TMDA 效果图
  • java8新特性-总览

    转眼真正工作的时间也一年多了 说实话虽然老板对我是肯定的 但是我对自己还是很不满意所以学习吧骚年们 Java8新特性 Java8算是java语言的一个大版本还是很有必要学习的 包括函数式编程 新的JavaScript引擎 新的日期API 新
  • 【附带配置疑问解决】Keil5配置ST-Link仿真器下载程序的方法

    0 首先需要安装好ST Link驱动 方法参阅CSDN其他文章或自行百度 1 点击魔术棒 2 选择Debug 按下图下拉框选择ST Link后 点击Settings 3 Flash Download设置如下 4 Pack设置 要把Enabl
  • 【Linux】【Ubuntu】在VMware虚拟机中安装Ubuntu18.04(UEFI启动图文教程)

    在VMware虚拟机中安装Ubuntu18 04 以UEFI方式启动 VMware 版本 15 5 以UEFI启动的Ubuntu系统安装方式与 Linux Ubuntu 在VMware虚拟机中安装Ubuntu18 04 保姆级图文教程 中记
  • BeagleBone 实施 Yocto 项目

    特点 Yocto 项目生产工具和流程 支持为嵌入式软件创建 Linux 发行版 独立于架构 BeagleBone Black 是一个平台 允许用户根据自己的喜好快速轻松地执行安装和自定义 从 Yocto Project 构建系统的基本介绍开
  • SD卡读写实验(SPI模式)

    对于 SD 卡的 SPI 模式而言 采用的 SPI 的通信模式为模式 3 即 CPOL 1 CPHA 1 在 SD 卡 2 0 版 本协议中 SPI CLK 时钟频率可达 50Mhz SD 卡的 SPI 模式 只用到了 SDIO D3 SP