STM32F4X SDIO(二) SDIO协议

2023-10-28 21:36
文章标签 协议 sdio stm32f4x

本文主要是介绍STM32F4X SDIO(二) SDIO协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一节简单介绍了SD卡的分类,本节将会介绍SD卡的通信协议,也就是SDIO协议。

STM32F4X SDIO(二)SDIO协议

  • SD 卡管脚和寄存器
    • SD卡管脚分布
    • SD卡通信协议
    • SD卡寄存器
    • SD卡内部结构
  • SDIO总线
    • SDIO总线拓扑
    • SDIO总线协议
      • SDIO协议的基本结构
      • SDIO协议数据传输
      • SDIO协议命令与响应的结构
        • 命令结构
        • 响应结构
          • 短响应
          • 长响应
      • SDIO数据包格式
        • 常规数据包格式(8bit 宽)
          • 1线模式
          • 4线模式
        • 宽位数据包格式
          • 1线模式
          • 4线模式

SD 卡管脚和寄存器

SD卡管脚分布

我们以标准SD卡为例,先介绍一下SD卡的管脚。我们翻开SD卡的背面就能看到SD卡的管脚分布。在这里插入图片描述
在这里插入图片描述

SD卡通信协议

SD卡的通信协议有两种,分别是SDIO协议和SPI协议,本节主要讲的是SDIO协议。

管脚SDIO协议SPI协议
名称类型描述名称类型描述
1CD/DAT3输入输出(推挽模式)检测/数据线3CS输入片选(低电平有效)
2CMD输入输出(推挽模式)命令/响应DI输入数据输入
3VSS1输入接电源地VSS输入接电源地
4VDD输入电源VDD输入电源
5CLK输入时钟SCLK输入时钟
6VSS2输入接电源地VSS2输入接电源地
7DAT0输入输出(推挽模式)数据线0DO输出(推挽模式)数据输出
8DAT1输入输出(推挽模式)数据线1保留xx
9DAT2输入输出(推挽模式)数据线2保留xx

SD卡寄存器

每个SD卡内部都有8个寄存器,寄存器的介绍如下

名字位数描述
CID 128位卡识别号;用来识别的卡的个体号码
RCA16位相对地址;卡的本地系统地址,初始化时,动态地由卡建议,主机核准,SPI 模式不使用
DSR16位驱动级寄存器;配置卡的输出驱动
SCR64位SD 配置寄存器;SD 卡的特殊能力信息
CSD128卡的具体数据;卡的操作条件信息
OCR32位操作条件寄存器
SSR512SD 状态;卡专有特征的信息
CSR32卡状态;卡状态信息
有关以上寄存器的详细信息在后面的章节会介绍

SD卡内部结构

下图为SD卡的内部结构,其结构主要可以分成以下5部分
在这里插入图片描述

  • 外部接口(1):外部接口是用户实际能看到的结构,在SD卡的背面,其作用是将内部的管脚引出来,与设备进行连接。
  • 寄存器(2):SD卡内部的寄存器组,SD卡的信息,地址、初始化操作都需要通过读写SD卡的寄存器完成。
  • SD卡接口控制器(3):SD卡内部的控制器,主要是处理用户的发下来命令、数据以及给用户返回SD卡的一些状态,可以理解成一个封装在SD卡内部的MCU。
  • 存储器接口(4):SD卡内部的存储器接口芯片,作用是管理SD卡的存储阵列。
  • 存储阵列:SD卡的数据存储都放在存储阵列中,SDHC的SD卡每个存储阵列大小为512字节。

SDIO总线

SDIO总线拓扑

在这里插入图片描述
一个SDIO控制器上运行连接多个SD卡设备,此时SDIO控制器相当于是主机,SD卡相当于是从机。在SD卡初始化的过程中,SD卡会给主机返回一个地址(RCA),这个地址就是代表该SD卡的在系统中的唯一编号,可以理解成I2C协议中的从设备地址。

SDIO总线协议

SDIO协议的基本结构

SDIO总线协议是基于命令和数据流,在开始传输数据之前会有一个起始位,通常为0,结束时有一个停止位,通常为1.

  • 命令(Command):命令是主机发送给SD卡,通过CMD信号线进行传输,其作用向SD卡发起一个操作。
  • 响应((Response):响应是SD卡给主机,也是通过CMD线进行传输,作为收到命令后的操作,有些命令可以没有响应。
  • 数据((Data):数据的传输是双向的,通过数据线进行传输。

在这里插入图片描述

  • 没有响应的命令(1):对于没有响应的命令来说,主机只需要往CMD信号线上传输命令即可,不需要等待接收SD卡的响应。
  • 有响应的命令(2):对于有响应的命令,主机在CMD线上传输完命令之后,需要等待接收SD卡返回的响应,也是在CMD线上接收响应。

SDIO协议数据传输

SD卡的数据传输都是以为单位进行传输,SDHC容量的SD卡,每个块大小为512字节。
在这里插入图片描述
数据块的后面需要一个CRC来保证数据的准确性,CRC由SD卡或者SDIO硬件自动产生,在数据写入时需要检查busy信号,因为数据写入到SD卡的存储阵列需要时间。多块数据的写入还需要主机给从机发送停止命令让SD卡停止接收数据,SD卡的读操作类似。

SDIO协议命令与响应的结构

命令结构

在这里插入图片描述

  • 每一个命令的开始都要发送一个起始位,起始位的电平为低电平。
  • 每一个命令会都会接一个传输位,通常为1,代表主机发送命令。
  • CMD命令带参数传输,其参数位数为32位
  • 每个CMD都会一个7位的CRC校验码,保证命令的传输没有错误。
  • 结束时发送一个结束位,结束位电平为高电平。
  • 命令的总长度为48位。

命令格式:起始位(1bit)+传输位(1bit)+参数(32bit)+CRC(7bit)+停止位(1bit)

响应结构

SD卡的响应分为两种,分别是短响应(48bit)和长响应(136bit)
在这里插入图片描述

短响应
  • 每一个短响应发送一个起始位,起始位的电平为低电平。
  • 每一个短响应都会接一个传输位,通常为0,代表响应。
  • 接着是45位的响应数据,CRC(7bit)包含在响应数据里面
  • 结束时发送一个结束位,结束位电平为高电平。
  • 短响应的总长度为48位。
    短响应格式:起始位(1bit)+传输位(1bit)+响应数据(45bit)+停止位(1bit)
长响应
  • 每一个长响应发送一个起始位,起始位的电平为低电平。
  • 每一个长响应都会接一个传输位,通常为0,代表响应。
  • 接着是133位的响应数据,CRC(7bit)包含在响应数据里面
  • 结束时发送一个结束位,结束位电平为高电平。
  • 长响应的总长度为136位。
    短响应格式:起始位(1bit)+传输位(1bit)+响应数据(133bit)+停止位(1bit)

SDIO数据包格式

SDIO协议的数据包有两种格式,分别是常规数据包格式(8bit 宽)宽位数据包格式

常规数据包格式(8bit 宽)

常规数据包格式又可以分为两种,分别是1线4线模式

1线模式

在这里插入图片描述

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 将数据按照8bit的格式一个一个在DATA0数据线上发送出去
  • 当所有数据传输完成后,需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效
4线模式

在这里插入图片描述

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 当发送一个字节时,需要将字节的高4位先发送,最后再发送字节的低4位。字节的发送按照DATA3:bit7 bit3,DATA2:bit6 bit2,DATA1:bit5 bit1,DATA0:bit4 bit0的格式进行发送
  • 当所有数据传输完成后,每根数据线上需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效。
宽位数据包格式

宽位数据包格式也可以分为两种,分别是1线4线模式。其特点跟常规数据包模式类似。

1线模式

在这里插入图片描述

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 将数据按照高位在前,低位在后的格式在DATA0数据线上发送出去
  • 当所有数据传输完成后,需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效
4线模式

在这里插入图片描述

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 按照高4位在前,低4位在后的格式依次在数据线上发送
  • 当所有数据传输完成后,每根数据线上需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效。

这篇关于STM32F4X SDIO(二) SDIO协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296105

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请