SD NAND 的 SDIO在STM32上的应用详解(上篇)

news2025/3/24 12:58:22

目录

上篇:

  • 一.SDIO简介

  • 二.SD卡简介/内部结构

  •       1.SD卡/SD NAND引脚

  •       2.SD卡寄存器

  •       3.FLASH存储器

  • 三.SDIO总线拓扑

中篇:

  • 四.SDIO功能框图(重点)

  •       1.SDIO适配器

  •       2.控制单元

  •       3.命令通道(重点)

  •       4.数据通道

  • 五.命令与响应

  •       1.命令格式

  •       2.命令类型

  •       3.命令描述

  •       4.响应类型

  • 六.SD卡/SD NAND功能描述(重重点)

  •       1.操作条件确认

          2.卡识别模式

  •       3.数据传输模式

下篇:

  • 七.SDIO外设结构体

  •       1.SDIO初始化结构体

  •       2.SDIO命令初始化结构体

  •       3.SDIO数据初始化结构体

  • 八.SD卡读写测试实验

  •       1.硬件设计

  •       2.代码讲解

  •       3.实验结果

一.SDIO简介

SDIO (Secure Digital Input and Output)全称安全数字输入/输出接口,在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。

  • 多媒体卡(MMC)

MMC(MultiMedia Card)卡由西门子公司和首推CF的SanDisk于1997年推出多媒体卡(MMC)是一种小型(24x32或18x1.4mm)可擦除固态存储卡,其全称为Multi-Media Card,特别应用于移动电话和数字影像及其他移动终端中。

  • SD卡:(Secure Digital Memory Card)

SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。**

应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。

  • SD I/O 卡

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

  • CE-ATA设备

CE-ATA 一种基于为了节省接口IO数量,专为轻薄 笔记本硬盘 设计的笔记本硬盘高速通讯接口。 一种使用MMC接口界面,ATA指令集的笔记本电脑 硬盘接口

11.png

结论:MMC卡是SD卡的前身,也就是说SD将取代MMC卡的地位,MMC卡也用的越来越少,所以我们后面只讲SD卡.

  • SDIO的主要功能:
    (关于不是SD卡的就不介绍了)
    1.与SD存储卡规格版本2.0全兼容(向前兼容)
    2.数据和命令输出使能信号,用于控制外部双向驱动器。

  • SDIO外设挂载在STM32的AHB总线。

22_副本.png


这样一来,STM32(主机),就可以通过AHB总线,控制SDIO外设的寄存器进而控制SDIO外设读/写SD卡,SDIO外设向SD卡传输数据,或者向SD卡接收数据可以使用DMA进行传输(这样可以省去很多繁琐的步骤后面再讲)

当前版本的SDIO在同一时间里只能支持一个SD卡(这是ST公司限制的)

二.SD卡简介/内部结构

SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。**

应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。

SD卡采用的是采用了NandFlash存储器,稍后解释NandFlash与NorFlash的区别。

33.png


 

44.png

55.png

1.卡容量

  • 标准容量 SD 卡,支持最大 2GB 的容量。所有的物理规格文档都会定义这种。

  • 高容量 SD 卡(SDHC),支持超过 2GB 的容量。本文档解释的规格最大为 32GB 容量。只有 SDIO支持 2.0 协议才能够识别这种高容量 SD 卡(而SDIO外设正好最高支持到2.0协议)。

STM32F10x 系列控制器只支持 SD 卡规范版本 2.0,即只支持标准容量 SD 和高容量SDHC 标准卡,不支持超大容量 (大于32GB)SDXC 标准卡,所以STM32可以支持的最高卡容量是 32GB。

2.速度等级
我们定义了 4 个速度等级,来表示卡的最小速率:(实际上目前最高 Class10)
● Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡
● Class 2 – 最小 2MB/s 的性能
● Class 4 – 最小 4MB/s 的性能
● Class 6 – 最小 6MB/s 的性能
● Class 8 – 最小 8MB/s 的性能
● Class 10 – 最小 10MB/s 的性

SD卡的内部构造:

66.png

电源检测单元保证 SD 卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;

1.SD卡/SD NAND引脚

1)SD卡引脚

77.png

88.png


SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线,具体说明如下:

  • CLK:时钟线,由 SDIO 主机产生,即由 STM32 控制器输出,最高 25MB/s 的接口速度(使用4条并行数据线);

  • CMD:命令控制线,SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应答(响应),SD 卡也是通过该线传输应答信息(即命令响应都是通过CMD命令控制线来串行传输的);

  • D0-3:数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态; VDD、VSS1、VSS2:电源和地信号。

2.SD卡寄存器

卡控制单元控制 SD 卡的运行状态,它包括有 8 个寄存器,接口驱动器控制 SD 卡引脚的输入输出

SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息,这些寄存器只能通过对应的命令访问(STM32主机通过驱动SDIO外设通过CMD命令线向从机SD卡发送命令),SDIO 定义了 64 个命令,每个命令都有特殊意义,可以实现某一特定功能,SD 卡接收到命令后,根据命令要求对 SD 卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现 SD 卡的控制以及读写操作。

1_副本.png

  • 1.CID 寄存器(重点了解)
    卡识别(CID)寄存器是一个 128 位的寄存器。包含了卡的识别信息,用于卡识别解析(具有唯一性)。每个读/写卡都有一个特殊的识别号。CID 寄存器的结构如下:

    2_副本.png

  • 2.RCA 寄存器(重点了解)
    可写的 16 位SD卡相对地址寄存器,在SD卡的初始化期间,由SD卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。(在主机向SD卡读写数据时,就是发送CMD7选择/取消选择 RCA 地址卡,就是靠RCA来确定主机与哪张卡通信)
    为啥不用上面的CID呢 ?
    答:因为它太长了128位呢,仅此而已

  • 3.CSD 寄存器(2.0)
    CSD V2.0 只适用于高容量

    3_副本.png

  • 4.SCR 寄存器
    作为 CSD 寄存器的补充,另一个配置寄存器称为 SD 卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR 是一个 64bit 的寄存器,这个寄存器应该由 SD 厂家设置。

    4_副本.png

  • 5.OCR 寄存器(重点了解)

32 位的操作条件寄存器(OCR)存储了卡的 VDD 电压描述。另外,还包括了状态信息位。如果卡的上电程序完成,一个状态位会被设置。寄存器还包括另一个状态位,在设置上电状态位后,用来表明卡的容量状态。

Bit31 – 卡上电状态位(busy),这个状态位在卡的上电流程完成后设置。
Bit30 – 卡容量状态位(CCS),如果是高容量卡,设置为 1,如果是标准卡,设置为 0。

卡容量状态位只有在上电流程完成,且 Bit31 设置为 1 之后才有效。主机可以读取这个状态位来判断卡的种类

上面这些寄存器的只要了解即可,后面用的不多,等后面用到再讲这样就能有个更深刻的认识。

3.FLASH存储器

1)FLASH简介
FLSAH 存储器又称闪存,它与 EEPROM 都是掉电后数据不丢失的存储器,但 FLASH存储器容量普遍大于 EEPROM,现在基本取代了它的地位。我们生活中常用的 U 盘、SD卡、SSD 固态硬盘以及我们STM32 芯片内部用于存储程序的设备,都是 FLASH 类型的存储器。在存储控制上,最主要的区别是 FLASH 芯片只能一大片一大片地擦写,而在“I2C章节”中我们了解到 EEPROM 可以单个字节擦写。

2)NOR FLASH 和 NAND FLASH的区别
FLASH 存储器又分为 NOR FLASH 和 NAND FLASH

5_副本.png

NOR 与 NAND 的共性是在数据写入前都需要有擦除操作,而擦除操作一般是以“扇区/块”为单位的。

而 NOR 与 NAND 特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。由于 NOR 的地址线和数据线分开,它可以按“字节”读写数据,符合 CPU 的指令译码执行要求,而由于 NAND 的数据和地址线共用,只能按“块”来读写数据,所以不符合CPU指令译码要求。

所以NOR FLASH 一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间。

而 NAND FLASH 一般应用在大数据量存储的场合,包括 SD 卡、U 盘以及固态硬盘等,都是 NAND FLASH 类型的。

总结一句话:NOR FLASH贵而精,NAND FLASH大而便宜

所以我们的SD卡用 NAND FLASH 作为存储单元

存储单元是存储数据部件,存储单元通过存储单元接口与卡控制
单元进行数据传输

三.SDIO总线拓扑

总线上的通信是通过传送命令和数据实现。
在SD卡总线上的基本操作是命令/响应结构(主机发送命令给SD卡,SD卡是否进行响应,主机发生命令和SD卡响应都是通过命令线(CMD)传输的(有一个响应例外等下说)),这样的总线操作在命令或总线机制下实现信息交换。

在SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或数据流的形式传输;

6_副本.png


SD 卡总线有一个主机,多个SD卡,时钟线(CLK),电源(VDD)和地信号(VSS)是所以卡共用。命令线(CMD)和数据线(DAT0-3)信号是根据每张卡的。

理论上主机可以与多张卡进行数据交互,虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独 SD 总线应该连接一个单独的 SD 卡。
即STM32只能接一张SD卡

SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效。SD 卡操作过程会使用两种不同频率的时钟同步数据:
识别卡阶段:时钟频率 FOD,最高为 400kHz
数据传输模式:时钟频率FPP,默认最高为 25MHz
如果通过相关寄存器配置使 SDIO 工作在高速模式,此时数据
传输模式最高频率为 50MHz

为什么卡识别阶段的频率低?
卡识别的时候为了兼容识别不同版本的SD卡

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

7_副本.png


SD 数据是以块形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要 CRC 位来校验数据。CRC 位由 SD卡系统硬件生成。STM32 控制器可以控制使用单线或 4 线传输(D0-D3)。

8_副本.png

9_副本.png


SD 数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测 SD 卡忙状态,因为 SD 卡在接收到数据后存储到存储区(NandFlash)过程需要一定操作时间。SD 卡忙状态通过把 D0 线拉低表示。

  • 数据传输:

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

  • 1.常规数据(8bit 宽):常规数据发送是先低字节,再高字节的顺序,但是每个字节则是先高位后低位
     

    10_副本.png


    数据位在四线顺序排列发送,DAT3 数据线发较高位,DAT0 数据线发较低位。

  • 2.宽位数据(SD 存储寄存器):宽位数据从高位开始传输。

对 SD 卡而言宽位数据包发送方式是针对 SD 卡 SSR(SD 状态)寄存器内容发送的,SSR 寄存器总共有 512bit,在主机发出ACMD13 命令后(当然在发送ACMD13 之前需要发送CMD55 ) SD 卡将 SSR 寄存器内容通过数据线发送给主机。
在这里插入图片描述

11_副本.png

全文目录内容分为三篇【上/中/下】原文链接跳转如下:

SD NAND 的 SDIO在STM32上的应用详解(上篇): SD NAND 的 SDIO在STM32上的应用详解(上篇) 

SD NAND 的 SDIO在STM32上的应用详解(中篇): SD NAND 的 SDIO在STM32上的应用详解(中篇) 

SD NAND 的 SDIO在STM32上的应用详解(下篇): SD NAND 的 SDIO在STM32上的应用详解(下篇) 

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

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

相关文章

基于图像处理的裂缝检测与特征提取

一、引言 裂缝检测是基础设施监测中至关重要的一项任务,尤其是在土木工程和建筑工程领域。随着自动化技术的发展,传统的人工巡检方法逐渐被基于图像分析的自动化检测系统所取代。通过计算机视觉和图像处理技术,能够高效、精确地提取裂缝的几何特征,如长度、宽度、方向、面…

执行pnpm run dev报错:node:events:491 throw er; // Unhandled ‘error‘ event的解决方案

vite搭建的vue项目,使用pnpm包管理工具,执行pnpm run dev,报如下错误: 报错原因: pnpm依赖安装不完整,缺少esbuild.exe文件,导致无法执行启动命令。 解决方案: 根据错误提示中提到…

「软件设计模式」建造者模式(Builder)

深入解析建造者模式:用C打造灵活对象构建流水线 引言:当对象构建遇上排列组合 在开发复杂业务系统时,你是否经常面对这样的类:它有20个成员变量,其中5个是必填项,15个是可选项。当用户需要创建豪华套餐A&…

uniapp 安卓10+ 选择并上传文件

plus.io.chooseFile({title: 选择文件,filetypes: [mp3], // 允许的文件类型multiple: false, // 是否允许多选}, (res) > {console.log(虚拟路径666:, res);var arr[{name: files,uri: res.files[0],}]let obj {"tableName": "mingmen_daily_mi…

【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】

嘿,各位老铁们,今天咱们来一场深度学习框架的深度探索之旅。在这个充满无限可能的深度学习时代,深度学习框架就像是连接理论与实践的桥梁,帮助我们从算法设计走向实际应用。随着技术的飞速发展,深度学习框架的选择变得越来越多样化,每一种框架都有其独特的优势和适用场景…

网页制作02-html,css,javascript初认识のhtml的文字与段落标记

用一首李白的将进酒,对文字与段落标记进行一个简单的介绍演示: 目录 一、标题字 1、标题字标记h 2、标题字对其属性align 二、文本基本标记 1、字体属性face 2、字号属性size 3、颜色属性 Color 三、文本格式化标记 1、粗体标记 b ,strong 2、…

一.数据治理理论架构

1、数据治理核心思想: 数据治理理论架构图描绘了一个由顶层设计、管控机制、核心领域和管理系统四个主要部分组成的数据治理框架。它旨在通过系统化的方法,解决数据治理机制缺失引发的业务和技术问题,并最终提升企业的数据管理水平。 数据治…

PHP基础部分

但凡是和输入、写入相关的一定要预防别人植入恶意代码! HTML部分 语句格式 <br> <hr> 分割符 <p>插入一行 按住shift 输入! 然后按回车可快速输入html代码(VsCode需要先安装live server插件) html:<h1>标题 数字越大越往后</h1> <p…

人工智能 - 主动视觉可能就是你所需要的:在双臂机器人操作中探索主动视觉

AV-ALOHA 系统使用用于 AV 的 VR 耳机实现直观的数据收集&#xff0c;并且 用于作的 VR 控制器或引线臂。这有助于捕捉全身和头部 远程作我们的真实和模拟系统的运动&#xff0c;记录来自 6 个的视频 不同的摄像头&#xff0c;并为我们的 AV 仿制学习策略提供训练数据。 加州大…

DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Kafka偏移量管理全攻略:从基础概念到高级操作实战

#作者&#xff1a;猎人 文章目录 前言&#xff1a;概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

java练习(28)

ps&#xff1a;练习来自力扣 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 // 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.va…

Web安全|渗透测试|网络安全

基础入门(P1-P5) p1概念名词 1.1域名 什么是域名&#xff1f; 域名&#xff1a;是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。 什么是二级域名多级域名&am…

OpenHarmony 系统性能优化——默认关闭全局动画

笔者最近发现&#xff0c;关闭OpenHarmony全局动画&#xff0c;系统UI的响应速度会极大的提升 1.全局动画的开关由系统属性persist.sys.arkui.animationscale来控制&#xff0c;默认为1。也就是 动画缩放 1x 2.如果让persist.sys.arkui.animationscale默认为0,也就是关闭的状态…

C 程序多线程拆分文件

C 程序多线程拆分文件 在C语言中&#xff0c;实现多线程来拆分文件通常需要借助多线程库&#xff0c;比如 POSIX 线程库&#xff08;pthread&#xff09;或者 Windows 的线程库&#xff08;CreateThread 或类似的函数&#xff09;。下面我将分别展示在 Linux 和 Windows 环境下…

【Linux】Ubuntu Linux 系统——Python集成开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周四了&#xff0c;明天就周五了&#xff0c;再坚持坚持又能休息了&#xff01;&#xff01;&#x1f606; 本文是有关Linux 操作系统中Python集成开发环境基础知识&#xff0c;后续将添加更多相关知识噢&#xff0c;谢谢各位…

数据库加密全解析:从传输到存储的安全实践

title: 数据库加密全解析:从传输到存储的安全实践 date: 2025/2/17 updated: 2025/2/17 author: cmdragon excerpt: 数据加密是数据库安全的最后一道物理防线。传输层SSL/TLS配置、存储加密技术及加密函数实战应用,覆盖MySQL、PostgreSQL、Oracle等主流数据库的20+生产级加密…

【Prometheus】prometheus结合domain_exporter实现域名监控

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

计算机专业知识【软件开发中的常用图表:E - R图、HIPO、DFD、N - S、PAD详解】

在软件开发过程中&#xff0c;有许多种图表工具被用于不同阶段的设计和分析&#xff0c;帮助开发者更清晰地理解系统结构、数据流程和算法逻辑。下面将详细介绍E - R图、HIPO图、DFD图、N - S图和PAD图&#xff0c;包括它们的样子和用途。 一、E - R图&#xff08;实体 - 联系…