当前位置: 首页 > 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 来将某一路径下…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...