首页 > 其他分享 >初学STM32 SDIO (二)

初学STM32 SDIO (二)

时间:2024-04-08 21:44:37浏览次数:13  
标签:命令 主机 STM32 SDIO 地址 初学 数据传输 响应 SD

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

1.SD命令格式

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

image-20240408211902324

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

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

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

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

    • 命令号:它固定占用6bit,所以总共有64个命令(代号: CMD0 ~ CMD63 ),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SD I/O卡。
    • 地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。
    • CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败, SD卡不执行命令。

2. 命令类型

SD命令有4种类型:

  • 无响应广播命令(bc),发送到所有卡,不返回任务响应;
  • 带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
  • 寻址命令(ac),发送到选定卡, DAT线无数据传输;
  • 寻址数据传输命令(adtc),发送到选定卡, DAT线有数据传输。

​ 另外, SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令: 特定应用命令(ACMD)常规命令(GEN_CMD)。 要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前无发送CMD55命令,告知SD卡接下来的命令为特定应用命令。 CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。

3. 常用命令

image-20240408212632868

4. 响应

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

  • SDIO总共有7个响应类型(代号: R1~ R7 ),其中SD卡没有R4、 R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。
  • 与命令一样, SD卡的响应也是通过CMD线连续传输的。
  • 根据响应内容大小可以分为短响应和长响应。短响应是48bit长度,只有R2类型
    是长响应,其长度为136bit。

image-20240408212801219

5. SD卡的操作模式

​ SD卡有多个版本, STM32控制器目前最高支持《Physical LsayerSimplified Specification V2.0》定义的SD卡, STM32控制器对SD卡进行数据读写之前需要识别卡的种类: V1.0标准卡、 V2.0标准卡、 V2.0高容量卡或者不被识别卡。
SD卡系统(包括主机和SD卡)定义了两种操作模式: 卡识别模式数据传输模式。 在系统复位后,主机处于卡识别模式,寻找总线上可用的SDIO设备;同时, SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后, SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。

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

image-20240408213125271

6.卡识别模式

image-20240408213231024

​ 在卡识别模式下,主机会复位所有处于“卡识别模式”的SD卡,确认其工作电压范围,识别SD卡类型,并且获取SD卡的相对地址(卡相对地址较短,便于寻址)。在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下。

  • 上电后,所有卡处于空闲状态,可发送GO_IDLE_STATE(CMD0)让所有卡软复位从而进入空闲状态。

  • 使用SEND_IF_ COND (CMD8)命令根据响应确定卡的电压支持范围。 CMD8是SD卡标准V2.0版本才有的新命令,所以如果主机有接收到响应,可以判断卡为V2.0或更高版本SD卡(非MMC卡)。

  • 使用SD_SEND_OP_COND(ACMD41)命令识别或拒绝不匹配它的电压范围的卡。 并通过HCS位及其响应判断是SDSC还是SDHC卡。

  • 使用ALL_SEND_CID(CMD2) 来控制所有卡返回它们的卡识别号(CID),处于准备状态的卡在发送CID之后就进入识别状态。

  • 发送SEND_RELATIVE_ ADDR (CMD3)命令,让卡自己推荐一个相对地址(RCA)并响应命令。这个RCA是16bit地址,而CID是128bit地址,使用RCA简化通信。

  • 卡在接收到CMD3并发出响应后就进入数据传输模式,并处于待机状态,主机在获取所有卡RCA之后也进入数据传输模式。

7.数据传输模式

image-20240408213541880

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

  • CMD7用来选定和取消指定的卡,卡在待机状态下还不能进行数据通信,因为总线上可能有多个卡都是出于待机状态,必须选择一个RCA地址目标卡使其进入传输状态才可以进行数据通信。同时通过CMD7命令也可以让已经被选择的目标卡返回到待机状态。
  • 数据传输模式下的数据通信都是主机和目标卡之间通过寻址命令点对点进行的。卡处于传输状态下可以使用块的读写以及擦除命令对卡进行数据读写、擦除。
  • CMD12可以中断正在进行的数据通信,让卡返回到传输状态。 CMD0和CMD15会中止任何数据编程操作,返回卡识别模式,这可能导致卡数据被损坏。

标签:命令,主机,STM32,SDIO,地址,初学,数据传输,响应,SD
From: https://www.cnblogs.com/lyk-23/p/18122688

相关文章

  • 初学STM32 SDIO(一)
    1.SDIO协议简介​ SDIO全称是安全数字输入/输出接口,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。多媒体卡(MMC)、SD卡、SDI/O卡都有SDIO接口。STM32F407系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SDI/O卡以及C......
  • 基于STM32单片机智能垃圾桶红外感应雨滴检测语音设计21-766
    21-766、STM32智能垃圾桶设计-E18-KEY-红外对管-ISD1820-水滴-电磁锁产品功能描述:本设计有STM32F103C8T6单片机核心板电路+红外避障传感器电路+按键电路+红外对管电路+ISD1820语音模块电路+水滴传感器电路+电磁锁电路组成。1、通过红外避障传感器和按键均可以控制电磁锁的开......
  • 基于STM32单片机汽车防盗GPS定位GSM短信加速度检测设计21-880
    21-880、STM32汽车防盗系统设计-震动-ADXL345-GPS-GSM-RELAY产品功能描述:本设计由STM32F103C8T6单片机核心板电路+震动传感器电路+ADXL345重力加速度传感器电路+GPS模块电路+GSM模块电路+继电器控制电路组成。1、系统将是否有震动以及是否有倾倒以及对应的GPS经纬度信息,每隔......
  • Proteus8.0仿真应用设计(二十六)基于FreeRTOS、STM32F103C8、HAL库、4x4矩阵键盘应用设
    一、仿真原理图:二、部分代码:        按键采集uint8_tKeyScan(void){ uint8_tvalue=0x00; KeyPort->ODR=0x00; KeyPort->ODR=0xf7; if((KeyPort->IDR&0xf0)!=0xf0) { HAL_Delay(50); if((KeyPort->IDR&0xf0)!=0xf0) { value=......
  • 如何使用Git和GitHub - 初学者和有经验开发者的指南
    欢迎来到初学者的Git和GitHub!这份综合指南旨在帮助您探索版本控制和协作的世界。无论您是刚开始的新手还是经验丰富的开发者想要提升技能,这个指南都提供了逐步的方法来理解和有效使用Git和GitHub。通过本次旅程,您将建立起对Git和GitHub的坚实基础。您将具备实用知识,以简化您的编......
  • STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)
    一、前言目前有一个关于通过STM32F411CEUx的I2S总线接口控制SSS1700芯片进行音频输入输出的研究。SSS1700是具有片上振荡器的3S高度集成的USB音频控制器芯片。SSS1700功能支持96KHz24位采样率,带外部音频编解码器(24位/96KHzI2S输入和输出)并具有内置立体声16/24......
  • Vscode+gcc-arm+openocd搭建STM32开发环境
    1简介尝试使用Vscode搭建STM32开发环境,自己记录一下详细的配置过程2工具下载设计到的相关软件以及资源包括Vscode软件、STM32CubeMX、mingw64以及openocd,相应的软件介绍以及下载链接如下:Vscode软件:宇宙第一编辑器,开源,插件丰富CubeMx:初始化代码生产器,HAL库mingw64:因......
  • 3-STM32+W5500远程升级篇OTA(阿里云物联网平台)-STM32通过W5500使用http下载程序文件,
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/STM32W5500AIR202A/alyota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  ......
  • 实测STM32的RTC,什么校准都不做,不断电,半年后快了13分钟
    【测试结果】TOOL的RTC时钟一直都是通过上位机这里手动校准的,这次做了了实验,测试期间不做任何校准,看看半年后效果。测试是从去年的9月29号开始截至到今年的4月5号,快了13分钟【误差原因】因为晶振对温度敏感,下面是典型的温度对晶振影响:STM32支持LSI内部低速时钟或者LSE外......
  • 【STM32项目】基于STM32的测量温度与压力的数据处理设计(完整工程资料源码)
    前言:        项目的架构涉及两个关键组成部分,即硬件组件和软件开发。具体到硬件组成,项目包含若干关键模块,如:STM32微控制器作为项目的脑部控制中心,重力感应模块用于检测和记录重力数据,温度感应模块负责监测环境温度,以及液晶显示模块用于向用户展示实时数据和其他信息。......