SD卡读写

news2024/9/27 17:34:11

SD卡

    • SD卡分类
      • 根据存储容量
      • 根据性能
    • SD卡协议
      • 简介
      • SPI 模式
        • 命令
          • 命令格式
          • 命令类别
          • CMD
          • ACMD
        • 响应
          • R1
          • R2
          • R3
          • R7
        • 寄存器
          • CSD
        • 总线
          • 读操作
          • 写操作
          • 擦除&写保护
        • 初始化流程
      • SD 模式
    • IP 设计
      • IP 例化界面
      • IP 接口
      • IP 状态机
      • IP 验证
    • 雷龙贴片式TF卡
    • 参考资料

SD卡分类

根据存储容量

  • Standard Capacity SD Memory Card(SDSC):容量 <= 2GB (231 byte)
  • High Capacity SD Memory Card(SDHC):2GB< 容量 <= 32GB (235 byte)
  • Extended Capacity SD Memory Card(SDXC):32GB< 容量 <= 2TB (241 byte)
  • Ultra Capacity SD Memory Card(SDUC):2TB< 容量 <= 128TB (247 byte)

注:容量的单位 1MB = 1024x1024 B

根据性能

  • Class 0:未指定速率
  • Class 2:速率 >= 2MB/sec(默认速率模式)
  • Class 4:速率 >= 4MB/sec(默认速率模式)
  • Class 6:速率 >= 6MB/sec(默认速率模式)
  • Class 10:速率 >= 10MB/sec(高速模式)

注:性能的单位 1MB/sec = 1000x1000 B/sec

SD卡协议

简介

SD卡的协议是一种简单的命令/响应的协议。全部命令由主机发起,SD卡接收到命令后并返回响应数据。根据命令的不同,返回的数据内容和长度也不同。SD卡命令是一个 6 字节组成的命令包,其中第一个字节为命令号, 命令号高位 bit7-6 为固定的 “01“,其它 6bit 为具体的命令号。第 2-5 字节为命令参数。第 6 个字节为 7bit 的 CRC 校验加 1bit 的结束位。如果在 SPI 模式的时候,CRC 校验位为可选。如下图所示,Command 表示命令,通常使用十进制表示名称,例如 CMD17,这个时候Command就是十进制的17。

在这里插入图片描述

SD卡对每个命令会返回一个响应,每个命令有一定的响应格式。响应的格式跟给它的命令号有关。

SPI 模式

命令
命令格式

在这里插入图片描述

命令类别
  • 不同类别所支持的命令不同
  • 通过 CMD27 更改 CSD 寄存器中的 CCC 参数,但该寄存器只有部分参数可写,其余都是只读

在这里插入图片描述

CMD

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ACMD

在这里插入图片描述

响应

在 SPI 模式中,有 5 种响应格式:R1, R1b, R2, R3, R7,不同命令对应的响应格式也不一样,详细见上一章节“命令”。

R1
  • 除了 bit0(in idle state),其余状态都是读清

在这里插入图片描述

R2
  • 除了 bit0(Card is locked),其余状态都是读清

在这里插入图片描述

R3

在这里插入图片描述

R7

在这里插入图片描述

寄存器

SPI 模式除了不支持 RCA 寄存器,其余同 SD 模式一样

CSD

有三种不同寄存器定义,分别对应三种 SD 卡

在这里插入图片描述

总线
读操作
  • SPI 模式支持单块读(CMD17)和多块读操作(CMD18)
  • 对于标准容量卡,数据块的大小由 SET_BLOCKLEN 参数决定(CMD16)
  • 对于 SDHC 和 SDXC 卡,数据块大小固定为 512B,起始地址必须与块边界对齐
  • 每个数据块后面填充 16bit CRC 校验,使用标准 CCITT 多项式 X16 + X12 + X5 +1
  • 最大块长度固定为 512B,无论 READ_BL_LEN 参数值(CSD 寄存器),除非 READ_BL_PARTIAL 为 1,块长度才可以设置为 1-512B 任意大小
  • 每个块不能跨物理扇区
  • 多块读每一块都填充 16bit CRC 校验,通过 CMD12 停止多块读操作

在这里插入图片描述

写操作
  • SPI 模式支持单块读(CMD24)和多块读操作(CMD25)

  • 单块写时,每个数据块前需添加 “Start Block“;多块写只有第一块需要添加 ”Start Block“,但是最后一块需要添加 ”Stop Tran“

  • 可通过 CMD13 查看写结果;通过 ACMD22 查看多块写时正确写入的块个数

  • 当卡处于 busy 状态,置位 CS 信号不会中断写入进程,而且 busy 状态会忽略所有命令,除了 CMD0 可以复位卡,但是同时会破坏卡内数据(避免这样操作)

在这里插入图片描述

  • Data Response

    • 写每个数据块时,卡都会给 Data Response,格式如下:

在这里插入图片描述

  • 多块写操作时遇到 CRC 或者 Write Error时,主机要发送 CMD12 停止数据传输

  • 当遇到 Write Error 时,可通过 CMD13 查看写错误原因,并可通过 ACMD22 查看多块写时正确写入的块个数

  • Start Block、Stop tran

    • 对于单块写、单/多块读

      • 第 1 byte:Start Block(8‘hFE)
      • byte 2-513(具体取决于块大小):User data
      • 最后 2 byte:16bit CRC
    • 对于多块写

      • 每个需要写入的数据块前面发送 1 Byte 的 Start Block(8’hFC)
      • 停止写操作发送 1 Byte 的 Stop Tran(8‘hFD)

      注:多块读通过发送 CMD12 停止读操作

  • Data Error

    • 当读操作失败时,卡会响应 Data Error,格式如下:

在这里插入图片描述

擦除&写保护

在这里插入图片描述

初始化流程

在这里插入图片描述

  1. 上电后延时至少 74 个 clock,等待 SSD 卡内部操作完成
  2. SD 卡上电默认是 SD 模式,通过拉低 CS 信号,然后发送 CMD0 命令,试图进入 SPI 模式。若响应 R1 值为 0x01 时,则进入 SPI 模式,否则还是 SD 模式;(进入 SPI 模式后只有重新上电才能进入 SD 模式)

SD 模式

  • 使用 SDIO 接口- 实现

  • 参考如下链接:[SD2.0协议详解:命令格式、初始化/读取/写入 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/610495260#:~:text=SD2.0 Spec)

IP 设计

IP 例化界面

在这里插入图片描述

IP 接口

信号方向说明
ref_clkinput模块参考时钟,100MHz
ref_rstinput模块复位信号
spi_clk_ooutputSD 卡 SPI 模式时钟
spi_cs_n_ooutputSD 卡 SPI 模式片选信号
spi_miso_iinputSD 卡 SPI 模式主端数据输入
spi_mosi_ooutputSD 卡 SPI 模式主端数据输出
o_sd_init_doneoutputSD 卡初始化完成指示,高有效
o_status_flag[31:0]output状态机状态,定义见下图
o_card_type[3:0]outputSD 卡类型,定义见下图
i_sd_wr_eninput写使能,在 o_sd_wr_end 置位后更新状态。若只写一个 block,则在 o_sd_wr_end 拉低 i_sd_wr_en 信号
i_sd_wr_addr[31:0]input写地址,对于 SDHC 和 SDXC 卡,数据块大小固定为 512B,起始地址必须与块边界对齐
i_sd_wr_data[7:0]input写数据
o_sd_wr_data_reqoutput写数据请求,置位时下个时钟周期更新写数据 i_sd_wr_data
o_sd_wr_endoutput写完成指示,高有效
i_sd_rd_eninput读使能,在 o_sd_rd_end 或 o_sd_rd_err 置位后更新状态。若只读一个 block,则在 o_sd_rd_end 拉低 i_sd_rd_en信号
i_sd_rd_addr[31:0]input读地址,对于 SDHC 和 SDXC 卡,数据块大小固定为 512B,起始地址必须与块边界对齐
o_sd_rd_data[7:0]output读数据
o_sd_rd_data_vldoutput读数据有效指示
o_sd_rd_erroutput读操作错误
o_sd_rd_endoutput读完成指示,高有效

在这里插入图片描述

IP 状态机

在这里插入图片描述

IP 验证

这里使用 闪迪HC-16G雷龙 SD NAND (型号:CSNP32GCR01-BOW ) 进行单 block 读写测试。

注:SDHC 卡固定 block 大小为 512 bytes。

在这里插入图片描述

  • 首先读取第二个 block 的数据,一开始为全 0

在这里插入图片描述

  • 然后往第二个 block 写顺序数

在这里插入图片描述

  • 写完成后再次读取第二个 block 数据,发现与写入数据一致

在这里插入图片描述

  • 测试完成

雷龙贴片式TF卡

雷龙 SD NAND (型号:CSNP32GCR01-BOW ) 贴片式TF卡,,LGA-8封装,标准SDIO接口,兼容SPI/SD接口,可替代普通TF卡/SD卡,尺寸6x8mm毫米,内置SLC晶圆擦写寿命10万次,耐高低温,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)。

在这里插入图片描述

参考资料

  • Simplified Specifications | SD Association (sdcard.org)

  • SD NAND,贴片式TF卡,贴片式SD卡,SPI NAND, PSLC NAND,存储芯片,闪存芯片 (longsto.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五星级可视化页面(26):经常被模仿,从未被的超越的大屏界面。

Hello&#xff0c;各位老铁&#xff0c;本期分享的可视化界面&#xff0c;你可能在某些地方见过&#xff0c;或者被某些设计师临摹过&#xff0c;说明它们足够漂亮了&#xff0c; 你如果仔细观看细节&#xff0c;还是会发现很作出彩的地方不是轻易可以模仿的。 只有创新&#x…

linux网络编程8

24.9.25学习目录 一.原始套接字&#xff08;续&#xff09;1.sendto发送数据原始套接字1.ARP 二.Web编程1.概述2.HTML 一.原始套接字&#xff08;续&#xff09; 混杂模式&#xff1a; 指一台机器的网卡能够接受所有经过它的数据包&#xff0c;不论其目的地址是否是它&#xf…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近使用alpine操作系统上docker遇到了一些错误&#xff0c;尝试解决之后就准备输出一篇博客&#xff0c;帮助有需要的后人能够少踩坑&#xff0c;因为淋过雨所以想给别人撑伞 错误场景 我…

dump java内存并进行分析

一、确保机器存在jmap命令 jmap 如果不存在&#xff0c;可以从其他机器将完整的jdk拷贝过来&#xff0c;然后进行使用 二、dump内存 ./jmap -dump:formatb,file./dump.hprof 2853 其中2853是java的PID&#xff0c;将其改为自己想要dump的java进程ID 三、分析&#xff0c;…

系统敏感信息搜索工具(支持Windows、Linux)

目录 工具介绍 使用说明 search模块 browser模块 下载地址 工具介绍 可以快速搜索服务器中的有关username,passsword,账号,口令的敏感信息还有浏览器的账户密码。 使用说明 search模块 searchall64.exe search -p 指定路径 searchall64.exe search -p 指定路径 -s &q…

前缀和(3)_寻找数组的中心下标

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 前缀和(3)_寻找数组的中心下标 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1…

hackbar 插件安装(google版)

hackbar下载&#xff08;github&#xff09; 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/19 18:17 HackBar 是一个辅助进行网络渗透测试和安全评估的浏览器插件。它提供了一系列快捷工具和功能&#xff0c;可以帮助用户执行各种网络攻击和测试&#xff0c;包括 XS…

Linux宇宙-1

1.Linux的前世今生 1.计算机 根据摩尔定理&#xff0c;计算机快速向小型化和高性能化发展。 计算机私人公司也是蓬勃发展&#xff0c;包括面向企业的大型计算机&#xff1a;IBM&#xff1b;面向个人的计算机&#xff1a;苹果&#xff0c;微软和英特尔&#xff1b; 由于计算…

MySQL高阶1965-丢失信息的雇员

目录 题目 准备数据 分析数据 实现 题目 编写解决方案&#xff0c;找到所有 丢失信息 的雇员 id。当满足下面一个条件时&#xff0c;就被认为是雇员的信息丢失&#xff1a; 雇员的 姓名 丢失了&#xff0c;或者雇员的 薪水信息 丢失了 返回这些雇员的 id employee_id &…

定制几何尺寸组合测量仪 提高利用率 降低成本!

几何尺寸种类也包括很多类型&#xff0c;外径、圆度、长度、宽度、厚度、直线度等等均在其中&#xff0c;而通常的测量仪都是单一尺寸测量仪&#xff0c;但同一产品需要检测的尺寸往往不止一种&#xff0c;多台测量仪的应用会增加成本、增加占地面积&#xff0c;因此定制几何尺…

Java面向对象(二)(类的方法)(自己学习整理的资料)

目录 一.带参方法 带1个参数的方法 带2个参数的方法 带3个参数的方法 数组作为参数 &#xff08;图书管理系统&#xff09; 递归方法 二.简易银行存取款功能 一.带参方法 语法 <访问修饰符>返回类型<方法名>(<形式参数列表>){ //方法的主体 } 带1…

C++——认识STL及使用及实现第一个容器string

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 小伞的主页&#xff1a;xiaosan_blog 1. 什么是STL 1.1 STL的版本 STL(standard template libaray-标准模板库)&…

垃圾回收级别分类识别系统源码分享

垃圾回收级别分类识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

【线程】线程的同步---生产消费者模型

本文重点&#xff1a;理解条件变量和生产者消费者模型 同步是在保证数据安全的情况下&#xff0c;让我们的线程访问资源具有一定的顺序性 条件变量cond 当一个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了&#xff0c;…

电路 - 笔记2

1 555 芯片 2 类比 - pU*I 与 Fm*a 是不是可以与牛顿定律类比 - Fm*a 人的力量&#xff08;F&#xff09;有限。 当推大箱子&#xff08;m&#xff09;时&#xff0c;加速度&#xff08;a&#xff09;就不会很大 当推小箱子&#xff08;m&#xff09;时&#xff0c;加速度…

RTE 大会报名丨AI 时代新基建:云边端架构和 AI Infra ,RTE2024 技术专场第二弹!

所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0c;如何构建高可用的云边端协同架构&#xff1f; 语音 AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频的爆炸增长&#xff0c;给新一代编解码技术提出了什么新挑战&#xff1f; 当大模型进化到实时多模态&am…

mysql批量修改表前缀

现有表前缀xh,批量修改为fax_需要怎么做 SELECTCONCAT(ALTER TABLE ,table_name, RENAME TO fax_,substring(table_name, 3),;) FROMinformation_schema. TABLES WHEREtable_name LIKE xh_%; 运行之后可以但是生成了一批修改表明的命令 此时批量复制执行就可实现批量修改表前…

架构设计读后有感——原则

成为架构时是程序员的梦想&#xff0c;并不意味着把编程做好就能够自然的成为一个架构师&#xff0c;他们之间有一个鸿沟->“不确定性” 不确定性&#xff1a;编程本质上说是不存在不确定性的&#xff0c;因为一个输入可以通过逻辑的运算得到确定的值&#xff0c;即使是机器…

电脑ip变了后导致原来的虚拟机静态ip失效问题

电脑ip变了后导致原来的虚拟机静态失效问题处理 静态IP设置的几个要点 查看本地网络的配置 VMware虚拟机网络设置 子网IP必须和本地ip在同一个网段下&#xff0c;本地的ip是192.168.1.10&#xff0c;那我子网ip就应该是192.168.1.xxx&#xff0c; 网关ip需要保持一致。 DHCP…