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协议 | ||||
---|---|---|---|---|---|---|
名称 | 类型 | 描述 | 名称 | 类型 | 描述 | |
1 | CD/DAT3 | 输入输出(推挽模式) | 检测/数据线3 | CS | 输入 | 片选(低电平有效) |
2 | CMD | 输入输出(推挽模式) | 命令/响应 | DI | 输入 | 数据输入 |
3 | VSS1 | 输入 | 接电源地 | VSS | 输入 | 接电源地 |
4 | VDD | 输入 | 电源 | VDD | 输入 | 电源 |
5 | CLK | 输入 | 时钟 | SCLK | 输入 | 时钟 |
6 | VSS2 | 输入 | 接电源地 | VSS2 | 输入 | 接电源地 |
7 | DAT0 | 输入输出(推挽模式) | 数据线0 | DO | 输出(推挽模式) | 数据输出 |
8 | DAT1 | 输入输出(推挽模式) | 数据线1 | 保留 | x | x |
9 | DAT2 | 输入输出(推挽模式) | 数据线2 | 保留 | x | x |
SD卡寄存器
每个SD卡内部都有8个寄存器,寄存器的介绍如下
名字 | 位数 | 描述 |
---|---|---|
CID | 128位 | 卡识别号;用来识别的卡的个体号码 |
RCA | 16位 | 相对地址;卡的本地系统地址,初始化时,动态地由卡建议,主机核准,SPI 模式不使用 |
DSR | 16位 | 驱动级寄存器;配置卡的输出驱动 |
SCR | 64位 | SD 配置寄存器;SD 卡的特殊能力信息 |
CSD | 128 | 卡的具体数据;卡的操作条件信息 |
OCR | 32位 | 操作条件寄存器 |
SSR | 512 | SD 状态;卡专有特征的信息 |
CSR | 32 | 卡状态;卡状态信息 |
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个原则
单一职责原则:一个类负责一项职责。 里氏替换原则:继承与派生的规则。 依赖倒置原则:高层模块不应该依赖基层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程࿰…...
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 来将某一路径下…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

个人电脑部署本地大模型+UI
在这个AI飞速进步的时代,越来越多的大模型出现在市面上 本地大模型也越来越火爆! 它完全免费,随时可以访问,数据仅存在本地,还可以自己微调,训练! 今天我来教大家,如何在一台普通…...
AcWing 3417:砝码称重——位集合
【题目来源】 3417. 砝码称重 - AcWing题库 【题目描述】 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。 请你计算一共可以称出多少种不同的正整数重量? 注意砝码可以放在天平两边。 【输入格式】 输入的第一行包含一个整数 N。 …...
typeof运算符 +unll和undefined的区别
typeof运算符 JavaScript 有三种方法,可以确定一个值到底是什么类型。而我们 现在需要接触到的就是typeof 数值返回number 1 typeof 123 // "number" 字符串返回string 1 typeof 123 // "string" 布尔值返回boolean 1 typeof fal…...
Redis——主从哨兵配置
目录 基础概念 一、核心原理 二、核心特性 三、技术意义与应用价值 四、典型应用场景 案例部署 一、主从复制配置命令 二、哨兵模式部署命令 关键注意事项 基础概念 一、核心原理 内存存储与高性能 Redis 所有数据存储于内存中&…...