0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

深圳市雷龙发展有限公司 2022-11-15 17:08 次阅读

目录

上篇:

一.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指令集的笔记本电脑 硬盘接口

poYBAGNzN42AcmqnAAHrs5DQNw4424.png

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

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

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

pYYBAGNzN76AKNLEAAIaf8ihjIo759.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的区别。

pYYBAGNzOBaAHBMqAAC_Cknu150506.png


poYBAGNzOB6AJ-m_AAQAGUMH8iU249.pngpYYBAGNzOCmAYXT3AA6Kpz3aMOU060.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卡的内部构造:

pYYBAGNzODiACqRMAAJy3JpGRqY347.png

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

1.SD卡/SD NAND引脚

1)SD卡引脚

pYYBAGNzOFiAQUxmAAD2PpCc630814.pngpYYBAGNzOGGADguLAAH0lOx9V8U985.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 卡的控制以及读写操作。

poYBAGNzOHKAZHjUAAQvLgVgJME127.png

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

poYBAGNzOHqAa2_4AAGGAtGtjvc450.png

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

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

poYBAGNzOIOAcvKMAAbanRPPcRY193.png

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

poYBAGNzOI6AeMMzAAHOl8BnimQ723.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

pYYBAGNzOOCACbcJAALPZiZAGOM982.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上传送的数据是以数据块或数据流的形式传输;

pYYBAGNzOfmAJx0LAAHS2qWukGE839.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)传输参与。

pYYBAGNzOgGAEUItAARQeQO3254240.png


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

poYBAGNzOgyAK4_AAAM4mRh5yz4182.pngpYYBAGNzOhCAaZVHAAJ_k_d-fCk296.png


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

数据传输:

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

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

pYYBAGNzOhyABP2VAAKDfXyZEKI082.png


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

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

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

poYBAGNzPgSAYWrDAAFe-DsCFgA727.png

【本文转载自CSDN,作者:rivencode】

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47821

    浏览量

    409207
  • 贴片
    +关注

    关注

    10

    文章

    797

    浏览量

    36380
  • SDIO接口
    +关注

    关注

    0

    文章

    2

    浏览量

    2221
收藏 人收藏

    评论

    相关推荐

    STM32F412使用SD卡,SDIO,FATFS系统,SD卡挂载文件系统失败的原因?

    求助,STM32F412RET6 使用SD卡,使用SDIO接口,FATFS系统,SD卡挂载文件系统失败。返回错误代码3: 网上查到信息 \"FR_NOT_READY:物理驱动没有工作
    发表于 04-11 07:15

    stm32 CubeMx 怎么实现SD卡/sd nand FATFS读写测试

    本实验仅用于记录和分享技术经验若涉及侵权请联系我删除。   stm32 CubeMx 实现SD卡/sd nand FATFS读写测试。   材料:s
    发表于 01-09 17:37

    什么是SD NAND存储芯片? SD NAND与TF卡的区别

    什么是SD NAND?它俗称贴片式T卡,贴片式TF卡,贴片式SD卡,贴片式内存卡,贴片式闪存卡,贴片式卡...等等。虽然SD NAND 和T
    的头像 发表于 01-06 14:35 973次阅读
    什么是<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>存储芯片? <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>与TF卡的区别

    什么是SD NAND存储芯片?

    前言   大家好,我们一般STM32项目开发中或者在其他嵌入式开发中,经常会用到存储芯片存储数据。今天我和大家来介绍一款存储芯片,我这里采用(雷龙) CS创世 SD NAND
    发表于 01-05 17:54

    STM32用一线式驱动SD NANDSDIO的一线式驱动

    SDIO(Secure Digital Input/Output)是一种用于在嵌入式系统中连接外部设备的标准接口。在SDIO标准中,一线式和四线式是指SDIO接口的不同工作模式。
    的头像 发表于 12-19 14:14 424次阅读
    <b class='flag-5'>STM32</b>用一线式驱动<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>,<b class='flag-5'>SDIO</b>的一线式驱动

    基于RT-Thread快速上手SD NAND 虚拟文件系统

    SD NAND 也称之为贴片式TF卡,贴片式SD卡,采用标准的SDIO接口,兼容SPI接口。下图所示为CS 新一代CS SD
    发表于 12-15 17:29

    ESP32应用教程— SD NAND(记录飞控LOG)

    卡启动的 SOC 都可以用 SD NAND,提供 STM32 参考例程及原厂技术支持,容量:4GB,比 TF 卡稳定,比 eMMC 便宜。 2 代码说明 宏定义使能 SD 卡功能
    发表于 11-30 18:16

    CS创世SD NAND的存储芯片应用方案

    板焊接图)  博主日前设计基于H616与NB-IOT的嵌入式智能储物柜的时候考虑过存储方面的问题,当时SD NAND和EMMC与TF卡中徘徊,以下是几个存储类型的对比。  经
    发表于 11-15 18:07

    使用MM32F3270的SDIO驱动SD

    使用MM32F3270的SDIO驱动SD
    的头像 发表于 09-27 15:56 428次阅读
    使用MM32F3270的<b class='flag-5'>SDIO</b>驱动<b class='flag-5'>SD</b>卡

    CS SD NANDSTM32精英V2开发板的测试-是时候将TF卡换为SD NAND

    非常不错的选择,正好一个项目选择NAND存储方案, 恰巧论坛中联系到雷龙公司申请到了两片SD NAND,所以就进行一下测试评估。 SD
    发表于 09-26 17:40

    【贴片SD Card介绍】贴片式tf卡/SD NAND/SD2.0协议

    封装,标准SDIO接口,兼容SPI/SD接口。 标准的SD 2.0协议可以直接移植标准驱动代码,支持TF卡启动的SOC都可以用SD NAND
    发表于 07-28 16:23

    STM32+SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

    这篇文章就手把手教大家,在STM32上完成FATFS文件系统的移植;主控芯片采用STM32F103ZET6, 存储芯片我这里采用(雷龙) CS创世 SD NAND
    的头像 发表于 07-17 17:24 4596次阅读
    <b class='flag-5'>STM32+SD</b> <b class='flag-5'>NAND</b>(贴片<b class='flag-5'>SD</b>卡)完成FATFS文件系统移植与测试

    STM32CubeMx入门教程(8):SDIO应用

    导语“生活中我们经常使用SD卡,一般SD卡有两种接口,SDIO和SPI,SPI接口在前面的教程中已经使用过了。本教程来介绍SDIO接口CubeMx如何配置使用,将以
    发表于 07-12 11:36 1132次阅读
    <b class='flag-5'>STM32</b>CubeMx入门教程(8):<b class='flag-5'>SDIO</b>应用

    stm32 CubeMx 实现SD卡/sd nand FATFS读写测试

    文章目录stm32CubeMx实现SD卡/SDnandFATFS读写测试1.前言2.环境介绍2.1软硬件说明2.2外设原理图3.工程搭建3.1CubeMx配置3.2SDIO时钟配置说明3.2读写测试
    的头像 发表于 06-03 09:20 1030次阅读
    <b class='flag-5'>stm32</b> CubeMx 实现<b class='flag-5'>SD</b>卡/<b class='flag-5'>sd</b> <b class='flag-5'>nand</b> FATFS读写测试

    stm32 CubeMx 实现SD卡/sd nand FATFS读写测试

    将主要分享关于使用 CubeMx 配置 stm32 的工程,通过SDIO总线完成 SD卡/SD nand 的读写,并配置FATFS,采用文件
    发表于 06-02 17:01