当前位置: 首页 > news >正文

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协议

上一节简单介绍了SD卡的分类,本节将会介绍SD卡的通信协议,也就是SDIO协议。 STM32F4X SDIO(二)SDIO协议 SD 卡管脚和寄存器SD卡管脚分布SD卡通信协议SD卡寄存器SD卡内部结构 SDIO总线SDIO总线拓扑SDIO总线协议SDIO协议的基本结构…...

设计模式--7个原则

单一职责原则:一个类负责一项职责。 里氏替换原则:继承与派生的规则。 依赖倒置原则:高层模块不应该依赖基层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程&#xff0…...

AltiumDesigner原理图编译错误报告信息解释

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ViolationsAssociated with Buses 有关总线电⽓错误的各类型(共 12 项)二、ViolationsAssociated Components 有关元件符号电⽓错误…...

使用 Visual Studio Code 编写 TypeScript程序

安装 TypeScript 首先,确保你已经安装了 TypeScript,如果没有安装,请参考https://blog.csdn.net/David_house/article/details/134077973?spm1001.2014.3001.5502进行安装 创建 新建一个文件夹,用vs code打开,在文…...

科大讯飞发布讯飞星火 3.0;开源AI的现状

🚀 科大讯飞发布讯飞星火 3.0,综合能力超越ChatGPT(非GPT-4版) 摘要:科大讯飞在2023全球1024开发者节上宣布讯飞星火 3.0正式发布,号称综合能力已超越ChatGPT。据介绍,星火认知大模型 V3.0在文…...

公网远程访问macOS本地web服务器

# 公网访问macOS本地web服务器【内网穿透】 文章目录 1. 启动Apache服务器2. 公网访问本地web服务2.1 本地安装配置cpolar2.2 创建隧道2.3 测试访问公网地址3. 配置固定二级子域名3.1 保留一个二级子域名3.2 配置二级子域名4. 测试访问公网固定二级子域名 以macOS自带的Apache…...

windows 安装小乌龟

这是什么 这里简单描述一下在windows上如何安装GIT代码管理工具和使用小乌龟版本来调用GIT,并且配置一下git相关信息,可以使用小乌龟来操作代码。也有一些常规git使用方法。 需要的资源 Git-2.42.0-64-bit.exe(这个是git代码管理工具&…...

toon boom harmony基础

以下都是tbh快捷键使用,或者一些常用功能介绍 1、在节点视图中,按回车可直接弹出节点库搜索框 2、中心线编辑器 只能编辑用笔刷画出来的线条,铅笔画出来的线条无法编辑。 3、镜头标记 1 右键箭头方向,可弹出下拉,&am…...

JPA联合主键

​ 在实际工作中,我们会经常遇到联合主键的情况,所以我用简单例子列举JPA两种实现联合主键的方式。 1、如何通过IdClass 实现联合主键 第一步:新建一个UserInfoID类,里面是联合主键 Data Builder NoArgsConstructor AllArgsConstructor pu…...

水性杨花:揭秘CSS响应式界面设计,让内容灵活自如,犹如水之变幻

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、是…...

fio performance test

fio参数解释 可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述 filename/dev/emcpowerb 支持文件系统或者裸设备,-filename/dev/sda2或-filename/dev/sdb 或 -filename/dev/nvme0n1direct…...

DevOps持续集成-Jenkins(1)

文章目录 DevOpsDevOps概述Code阶段工具(centos7-gitlab主机)Windows下安装Git(作用是:使我们可以上传代码到GitLab)Linux下安装GitLab⭐(作用是:运行一个GitLab接收代码)环境准备先…...

Pytorch代码入门学习之分类任务(二):定义数据集

一、导包 import torch import torchvision import torchvision.transforms as transforms 二、下载数据集 2.1 代码展示 # 定义数据加载进来后的初始化操作: transform transforms.Compose([# 张量转换:transforms.ToTensor(),# 归一化操作&#x…...

oracle 里常用的一些 create insert update table

1、获得数据库里某个指定的库 SELECT COUNT(*) FROM ALL_TABLES ut WHERE ut.OWNERTJFX AND ut.TABLE_NAME CUR_TIME_BILL; 2、创建一个表,里面的数据可以从一个已存在的表里转移过来 CREATE TABLE temptable AS SELECT * FROM old_tbName //使用现有的表创建一…...

从Mysql架构看一条查询sql的执行过程

1. 通信协议 我们的程序或者工具要操作数据库,第一步要做什么事情? 跟数据库建立连接。 首先,MySQL必须要运行一个服务,监听默认的3306端口。在我们开发系统跟第三方对接的时候,必须要弄清楚的有两件事。 第一个就是通…...

Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)

目录 一、概述 二、具体配置如下: 一、概述 DHCP :动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途&…...

模数转换器-ADC基础

文章目录 一、ADC是什么二、ADC处理采样保持量化编码三、ADC采样的重要参数:测量范围:分辨率(Resolution):精度:采样时间:采样率(Sampling Rate):信噪比(Signal-to-Noise Ratio, SNR):转换时间:一、ADC是什么 ADC(Analog-to-Digital Converter):模拟数字转换器…...

Linux:【1】Linux中的文件权限概念和相关命令

Linux:【1】Linux中的文件权限概念和相关命令 1、什么是文件权限?1.1、文件权限的表示方式 2、理解文件权限2.1、用户权限2.2、组权限2.3、其他权限 3、设置文件权限3.1、chmod 命令3.2、权限符号表示法3.3、权限数字表示法 4、查看文件权限4.1、ls 命令…...

JS实用小计

1.如何创建一个数组大小为100,每个值都为0的数组 // 方法一: Array(100).fill(0);// 方法二: // 注: 如果直接使用 map,会出现稀疏数组 Array.from(Array(100), (x) > 0);// 方法二变体: Array.from({ length: 100 }, (x) > 0); 2.如何逆序一个字…...

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap,它也是程序中内存消耗的大户,当 Bitmap 使用内存超过可用空间,则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息,可用使用 BitmapFactory 来将某一路径下…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...