STM32 SD卡操作专题讲解

这篇具有很好参考价值的文章主要介绍了STM32 SD卡操作专题讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SD卡简介

SD卡(Secure Digital Memory Card)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。

SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC卡,如下表所示:

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD卡外形和接口图如下图所示:

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD卡由9个引脚与外部通信,支持SPI和SDIO两种模式,不同模式下,SD卡引脚功能描述如下表所示:ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD卡的物理结构

一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分

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

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

卡及接口控制单元:控制SD卡的运行状态,它包括有8个寄存器;

接口驱动器:控制SD卡引脚的输入输出。

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD卡内部的寄存器

SD卡总共有8个寄存器,用于设定或表示SD卡信息。这些寄存器只能通过对应的命令访问,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

STM32-SDIO接口简介

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

        SD卡(Secure Digital Memory Card)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32F407系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SD I/O卡以及CE-ATA设备进行数据传输。

参考资料:

•多媒体卡协会网站www.mmca.org中提供了有MMCA技术委员会发布的多媒体卡系统规范。

•SD卡协会网站www.sdcard.org中提供了SD存储卡和SDIO卡系统规范。

•CE-ATA工作组网站www.ce-ata.org中提供了CE_ATA系统规范。

SDIO设备分类

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

注:目前SDIO协议提供的SD卡规范版本最新是4.01版本,但STM32F42x系列控制器只支持SD卡规范版本2.0,即只支持标准容量SD和高容量SDHC标准卡,不支持超大容量SDXC标准卡,所以可以支持的最高卡容量是32GB

STM32-SDIO接口特性

SDIO 具有以下特性:

●完全兼容 多媒体卡系统规范版本4.2。卡支持三种不同数据总线模式:1位(默认)、4位和 8 位

●完全兼容先前版本的多媒体卡(向前兼容性)

●完全兼容 SD存储卡规范版本 2.0

●完全兼容 SD I/O卡规范版本 2.0:卡支持两种不同数据总线模式:1位(默认)和4位

●完全支持 CE-ATA 功能(完全符合 CE-ATA数字协议版本 1.1)

●对于 8 位模式,数据传输高达48 MHz

●数据和命令输出使能信号,控制外部双向驱动程序。

●SDIO不具备兼容 SPI的通信模式。

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

STM32-SDIO功能框图

SDIO 由两部分组成:

●SDIO 适配器块提供特定于 MMC/SD/SD I/O 卡的所有功能,如时钟生成单元、命令和数据传输。

●APB2 接口访问 SDIO 适配器寄存器,并且生成中断和 DMA请求信号

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

注:1、默认情况下,SDIO_D0 用于数据传输。初始化后,主机可以更改数据总线宽度。2、SD 卡连接到总线,主机可以将数据传输配置为SDIO_D[3:0]3、SDIO 使用两个时钟信号:SDIO 适配器时钟(SDIOCLK=48MHz)和APB2 总线时钟(PCLK2)

STM32-SDIO时钟

卡时钟(SDIO_CK):每个时钟周期在命令和数据线上传输1位命令或数据。对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。

SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,可用于产生SDIO_CK时钟。对F4来说,SDIOCLK来自PLL48CK(48Mhz)。

F4:APB2总线接口时钟(PCLK2):该时钟用于驱动SDIO的APB2总线接口,其频率为PCLK2=84Mhz。

SDIO_CK计算公式:SDIO_CK=SDIOCLK/(2+CLKDIV)

注意:在SD卡初始化时,SDIO_CK不可以超过400Khz,初始化完成后,可以设置为最大频率(但不可以超过SD卡最大操作频率)。

STM32-SDIO适配器

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

该适配器由五个子单元组成:

●适配器寄存器块

●控制单元

●命令路径

●数据路径

●数据FIFO

该适配器由五个子单元组成:

● 适配器寄存器块 :适配器寄存器模块包含所有系统寄存器。

● 控制单元:控制单元包含电源管理功能和存储卡时钟的时钟分频器。

● 命令路径 :命令路径单元向卡发送命令并从卡接收响应。

● 数据路径 :数据路径子单元负责与卡相互传输数据。

● 数据 FIFO:数据FIFO(先进先出)子单元是一个数据缓冲器,带发送和接收单元。FIFO 包含一个宽度为 32 位且深度为 32字的数据缓冲器和发送/接收逻辑。

SD卡操作命令及模式详解

SDIO内部结构

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SDIO命令简介

SD命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。

SD命令格式固定为48bit,都是通过CMD线连续传输的,数据线不参与。

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SDIO命令格式

SD命令的组成如下:

•起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为 0,终止位为 1。

•传输标志:用于区分传输方向,该位为 1 时表示命令,方向为主机传输到 SD 卡,该位为 0时表示响应,方向为 SD卡传输到主机。

•命令主体内容包括命令、地址信息/参数和 CRC 校验三个部分。

•命令号:它固定占用 6bit,所以总共有 64个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于 SD 卡操作,只是专门用于 MMC卡或者SD I/O卡。

•地址/参数:每个命令有 32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这 32bit用于指定参数,而寻址命令这 32bit用于指定目标 SD卡的地址。

•CRC7 校验:长度为 7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令

SDIO命令类型

SD命令有4种类型:

•无响应广播命令(bc),发送到所有卡,不返回任务响应;

•带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;

•寻址命令(ac),发送到选定卡,DAT线无数据传输;

•寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。

在标准中定义了两种类型的通用命令:

特定应用命令(ACMD)和常规命令(GEN_CMD)

        要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前无发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD命令的响应

响应由SD卡向主机发出,部分命令要求SD卡作出响应,这些响应多用于反馈SD卡的状态。基本特性如下:

SDIO总共有7个响应类型(代号:R1~R7),其中SD卡没有R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。

与命令一样,SD卡的响应也是通过CMD线连续传输的。

根据响应内容大小可以分为短响应和长响应。短响应是48bit长度,只有R2类型是长响应,其长度为136bit。

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

SD卡的操作模式及切换

SD卡操作模式

        SD卡有多个版本,STM32控制器目前最高支持《PhysicalLayerSimplified SpecificationV2.0》定义的SD卡,STM32控制器对SD卡进行数据读写之前需要识别卡的种类:V1.0标准卡、V2.0标准卡、V2.0高容量卡或者不被识别卡。

        SD卡系统定义了两种操作模式:卡识别模式和数据传输模式。

        在系统复位后,主机处于卡识别模式,寻找总线上可用的SDIO设备;同时,SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后,SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。

SD卡操作模式

每个操作模式下,SD卡都有几种状态,通过命令控制实现卡状态的切换:

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

卡识别模式

①上电后,主机发送CMD0让所有卡软复位从而进入空闲状态。

②主机发送CMD8确定卡的电压范围,并识别是否为2.0的卡

③主机发送ACMD41识别或拒绝不匹配它的电压范围的卡

④主机发送CMD2来控制所有卡返回它们的卡识别号CID(128位)

⑤主机发送CMD3命令,让卡推荐一个RCA(16)地址作为以后通信的标识

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机

注:在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下。

数据传输模式

        只有SD卡系统处于数据传输模式下才可以进行数据读写操作。数据传输模式下可以将主机SD时钟频率设置为FPP,默认最高为25MHz,频率切换可以通过CMD4命令来实现。

CMD7用来选定和取消指定的卡

ce ata卡,stm32开发,stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-831642.html

到了这里,关于STM32 SD卡操作专题讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(46)
  • 嵌入式物联网STM32实战开发代码例程库

    几百个例程清单,CSDN下载地址: https://download.csdn.net/download/weixin_39804904/88671879 开发例程清单(持续新增中,欢迎点赞关注): 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar 0003基于STM32F103单片机GPIO实现

    2024年02月02日
    浏览(30)
  • 嵌入式系统开发13——STM32输出PWM实现呼吸灯

    本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯。 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。 脉冲宽度调制(PWM) ,是

    2023年04月08日
    浏览(67)
  • 【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试

    本篇文章介绍了使用Keil来对STM32F103C8芯片进行初始工程搭建,以及开发与工程调试的完整过程,帮助读者能够在实战中体会到Keil这个开发环境的使用方法,了解一个嵌入式工程从无到有的过程,并且具备快速搭建一个全新芯片对应最小软件工程的基本能力思路。文章首先介绍

    2024年02月05日
    浏览(42)
  • 【STM32嵌入式系统设计与开发】——7有源蜂鸣器应用

    STM32资料包: 百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888 提取码:8888 观察电路图,核心板PD14连接底板中的P2外接排针,将正负极接上直流电压即可持续发声,频率固定。LED的PA0连接底板的D1灯。 步骤1:复制工程模板“1_Template”重命名为“4_Active

    2024年03月21日
    浏览(49)
  • 嵌入式系统开发笔记104:在STM32CubeIDE中导入工程

      本文讲述如何在STM32CubeIDE中导入现有工程。

    2024年02月16日
    浏览(37)
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧,说起来很简单,就是几行代码的事,但楞是折腾了我大半天时间才搞定。原因后面说,先看代码吧: 读操作很简单,以32位方式读取的时候是这样的: 需要注意的是,当以32位方式读取时,地址需要是4的整数倍,即32位。 8位或16位方式类似操作即可 需要注意的

    2024年01月18日
    浏览(48)
  • STM32F4+FreeRTOS+LVGL实现嵌入式快速开发(缝合怪)

    极速进行项目开发,只需要懂一款芯片架构+一个操作系统+一个GUI。各种部件程序全靠抄 ,成为究极缝合怪。本文用stm32f407+FreeRTOS+lvgl演示一些demo。 原文链接:STM32F4+FreeRTOS+LVGL实现快速开发(缝合怪) lvgl官方的音乐播放器demo: 百问网的2048小游戏: STM32F407这款芯片就不多介绍

    2024年02月08日
    浏览(38)
  • 【Mac+CLion+STM32+ST-Link】Mac(apple sillicon)上使用STM32CubeMX和CLion搭建嵌入式开发环境

    Clion 官网安装或者brew安装,我用的是2023.2版本。 stlink server https://www.st.com/en/development-tools/st-link-server.html 不安装的话检测不到stlink。 STM32CubeMX https://www.st.com/en/development-tools/stm32cubeide.html#overviewsecondary=st-get-software 用来快速搭建一个工程。 Arm-toolchain 用来编译和debug的组件。

    2024年02月08日
    浏览(32)
  • CS SD NAND在STM32精英V2开发板的测试-是时候将TF卡换为SD NAND了

    前言    嵌入式项目中,比较常见的存储扩展方案是使用TF/SD卡或者EMMC或者RAW NAND,各种方案都有其优缺点,而SD NAND相对于上述方案具备很多优势,是目前嵌入式项目中存储扩展方案的一个非常不错的选择,正好一个项目在选择NAND存储方案, 恰巧论坛中联系到雷龙公司申请到了两片

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包