SD卡的命令格式及解析

SD卡初始化、读写流程及其相关CMD sd卡初始化、读写 阅读详情

SD卡的命令格式:

SD卡的指令由6字节(Byte)组成,如下:

Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)
Byte2-5:Command Arguments,命令参数,有些命令没有参数
Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0

2.SD卡的命令


SD卡命令共分为12类,分别为class0到class11,

不同的SDd卡,主控根据其功能,支持不同的命令集 如下:

Class0 :(卡的识别、初始化等基本命令集)

CMD0:复位SD 卡.

CMD1:读OCR寄存器.

CMD9:读CSD寄存器.

CMD10:读CID寄存器.

CMD12:停止读多块时的数据传输

CMD13:读 Card_Status 寄存器

Class2 (读卡命令集):

CMD16:设置块的长度

CMD17:读单块.

CMD18:读多块,直至主机发送CMD12为止 .

 

Class4(写卡命令集) :

CMD24:写单块.

CMD25:写多块.

CMD27:写CSD寄存器 .

Class5 (擦除卡命令集):

CMD32:设置擦除块的起始地址.

CMD33:设置擦除块的终止地址.

CMD38: 擦除所选择的块.

Class6(写保护命令集):

CMD28:设置写保护块的地址.

CMD29:擦除写保护块的地址.

CMD30: Ask the card for the status of the write protection bits

 

class7:卡的锁定,解锁功能命令集

class8:申请特定命令集 。

class10 -11 :保留

 

有关sd卡驱动和fat fs的实现用了3个文件来实现。sdboot.c为sd的驱动(可理解为pdd)层,主要实现一些对sd控制器的配置以及一些基本sd命令的实现和对sd卡的操作。sdmmc.c实现了从sd卡读取nk并跳到内存去运行的代码(基本可以理解为sd驱动的mdd层)。sdfat.c文件就是实现fat fs的。mdd层通过fatfs来对pdd层操作以实现读取文件。

    在整个过程中遇到了很多问题,现在列举如下:

1)sd卡初始化问题

    配置gpio有关sd的功能:SDCMD, SDDAT[3:0]。

    使能CLKCON中的SDI位。

    时钟以及计算公式:SDIPRE   = PCLK/(CLK)-1;INICLK=300000;SDCLK=24000000; MMCCLK= 15000000

    cmd0-cmd55-cmd41-cmd2-cmd3-cmd7-cmd6-cmd17

2)对sd卡操作问题

    SD卡包括:一个标识寄存器CID,一个相应地址寄存器RCA,一个其他参数寄存器

CSD。

    对sd卡的操作是驱动通过sd controller来发相应的命令以达到读写等操作的:发送命令通过SDICmdCon[7:0]的除了开始2bit:CmdIndex放置要发送的命令号;SDICmdCon[8]开始发送命令来完成的。

    检测卡的插入,直接用中断引脚的电平来判断。

    判断插入的卡是否是sd卡,用命令cmd55和cmd41,因为mmc卡对cmd55不做回应。

    命令9就是获取sd卡中csd寄存器的值的,该值包括很多sd卡的信息,其中就有sd卡的容量。这个值在sd卡接收到cmd9之后会以response的形式存放在sd控制器的SDI Response Register[0,1,2,3]中。在执行cmd9,cmd10等这样的命令的时候,卡的状态应该是不选中的,或直接在执行它们之前发送cmd7(0)不选中卡,不然的话会timeout。

    用cmd17来读取单个block的数据,该命令要带地址参数(该参数通过cmd3命令来获取),然后根据SDIDSTA和SDIFSTA状态值来从sd控制器的SDIDAT寄存器中读出要读的数据。该命令与cmd9相反,在执行它之前要选中卡。读完一个block之后要做一些善后工作,为下次读取做好准备,不然的话checkcmdend就要一直循环了。因为用的是每次都读一个block,并地址要以block对齐,这样就要考虑要读取的地址是否是block对齐的,长度是否够一个block。

    SDIDCON这个数据控制寄存器也很重要,一些对数据的操作形式就是在这里设置的。

3)fat文件系统问题

    根据MBR找到分区表,根据分区表找到该分区MBR[446B+4个分区表(每个16B)+2B结束符)

    分区表中的第9-12字节为该分区的启始地址(单位没sector),第13-16字节为分区的长度(单位也是sector)

SD-scard-对应CMD指令集讲解 目录: SD卡中的CMD命令子集: CMD_0: 当前指令位,进入空闲状态,该指令无灰度 CMD_2 发送CMD2,验证SD卡是否接入,长反馈(CID),广播获取卡的CID信息 CMD_3 发送CMD3,读取SD卡是否接入RCA (地址),短反馈 , 广播获取SD卡所分配的相对地址 CMD_7 发送CMD7,使能SD卡,如果参数值为0 , 即使取消所有选中SD卡 根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中, 如果发送地址0,则表示取消选中全 阅读详情

相关推荐

[SDIO] SD card 初始化及常用命令解析(附波形,uboot代码)

目录 初始化 1.cmd 0 2.cmd8 3.cmd55 4.acmd41 5.cmd2 6.cmd3 7.cmd9 8.cmd13 9.cmd7 10.ACMD51 11.CMD6 12.CMD16 13.CMD17 14.CMD18 15.CMD12 tuning CMD19 DW_SDHCI的tuning流程 初始化 1.cmd 0 /* Reset the Card */ err = mmc_go_idle(mmc...

Lenz_s_law的开发记录本 2万+

2440从sd卡启动wince

经过一周的时间终于在s3c2440上把sdboot给跑起来了。整个任务是在已有的bootloader上(用usb线从pc下载的方式)修改以支持直接从sd卡上拷贝nk.nb0文件到内存并启动。 有关sd卡驱动和fat fs的实现用了3个文件来实现。sdboot.c为sd的驱动(可理解为pdd)层,主要实现一些对sd控制器的配置以及一些基本sd命令的实现和对sd...

weixin_34152820的博客 290

【驱动】使用fdisk、parted等命令制作SD启动卡

在linux上使用命令或脚本制作SD启动卡,用于嵌入式系统

郭老二 210

【嵌入式开发】158

CMD0: 复位命令这是SD卡上电后必须发送的第一个命令,用于将SD卡复位到其初始状态。CMD0不带任何参数,它会使SD卡取消之前所有的命令和状态,准备进入新的命令序列。CMD1: 发送操作条件在复位后,主控制器通过CMD1向SD卡发送其支持的操作电压和通信协议等信息。SD卡会响应这些信息,表明它是否准备好进行后续操作。ACMD41: 发送SD卡操作条件并检查忙碌状态这是一个应用特定命令(ACMD),需要在CMD55之后发送。ACMD41用于初始化SD卡,并检查其是否已准备好。

宅男很神经 842

放弃FFT全频计算!在STM32F407上用DFT单点计算提速50%的优化技巧

本文详细介绍了在STM32F407上通过DFT单点计算实现比FFT快50%的优化技巧,特别适用于生物阻抗分析、振动监测等只需关注单一频点的嵌入式场景。通过预计算相位角、查表法和混合精度计算等策略,显著提升计算效率和内存利用率,同时保持高精度。

weixin_28738397的博客 194

PyQtWebEngine安装避坑指南:快速解决ModuleNotFoundError

本文详细解析了PyQt5开发中常见的ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'错误。核心原因是PyQt5 5.11版本后,网页引擎组件被独立为PyQtWebEngine包。文章对比了退回旧版本、独立安装及使用Conda等多种解决方案,并提供了针对Windows、macOS和Linux不同平台的实战安装指南与验证方法,帮助开发者快速解决依赖问题。

weixin_29056101的博客 428

SD卡初始化以及命令详解

SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的 SD 卡是基于 flash 的存储卡。 SD 卡和 MMC 卡的区别在于初始化过程不同。SD卡并不是我们通常意义上的手机扩展卡,那种卡叫做TF卡,但是通讯以及驱动模式是类似的. SD 卡的通信协...

boyemachao的专栏 2683

机加工机器人系列编程:Fanuc M-710iC_(2).FanucM-710iC机器人的硬件配置

Fanuc M-710iC 机器人是一种广泛应用在汽车零部件制造行业中的工业机器人。它的本体结构设计紧凑、稳定,适用于多种加工任务。了解机器人的本体结构是进行编程和维护的基础。

zhubeibei168的博客 994

SD卡简介

一、SD卡简介 1、什么是SD卡 2、SD卡的特点 3、SD卡的寄存器 CSD寄存器包括卡的容量,数据块的大小,非常重要的寄存器 二、SPI 模式如何访问SD卡 1. SPI模式下,SD卡的命令格式 2. SD卡命令介绍 CMD0用来复位SD卡。 CMD8用来区分2.0卡还是1.0卡。 CMD9读取卡的特定的数据寄存器SCR。 CMD10读取卡的标志寄存器CID。 CMD16设置块大小,对于SDHC无效,SDHC固定是512字节。 C...

ba_wang_mao的专栏 4403

Oracle EBS Interface/API(29) - AP发票API

续上编文章《Oracle EBS Interface/API(28) - 客制化开发AP付款API》背景,介绍如调用官方提供标准AP发票API调用 用户界面 Invoices(Payables Manager->Invoices->Entry->Invoices) Open Interface Invoices(Payables Manager->Invoices->Entry->Open Interface Invoices) 快速参考 参考点 内容.

陈显平的专栏-Oracle EBS 1151

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性。

xxx 1020

SD卡和文件系统那些事儿

最近在研究STM32F4的SD卡Fatfs文件系统,官方和开发板提供的例程完全可以使用,但是缺少了理论的支持,完全看不懂。所以在网上以及《零死角玩转STM32》上整理了一些SD卡相关的基础知识。 SD卡的分类 目前常用的存储卡按照尺寸可分为SD卡和micro SD卡(TF卡)(其实种类繁多,我只接触过这两种),按照容量可分为标准容量SD(不大于2GB)、高容量SDHC(大于2GB,不大于32GB)和超大容量SDXC(大于32GB,不大于2TB),还可以按照传输速度进行划分,SD2.0规范...

chlbd的专栏 8372

【YOLO26实战全攻略】09——YOLO26多目标跟踪实战宝典:从原理到智慧园区人流统计全流程

多目标跟踪(MOT)是视频分析的核心技术,解决了单帧检测无法关联目标身份的痛点。本文基于YOLO26轻量化检测模型与ByteTrack跟踪算法,从新手视角出发,系统讲解多目标跟踪的核心原理、环境搭建、实操步骤与工程落地。内容涵盖ByteTrack分层关联策略解析、YOLO26集成跟踪的一行代码实现、配置参数调优、区域计数、轨迹数据提取与热力图可视化,最终通过智慧园区人车流量统计虚拟案例,完整呈现从技术原理到实际应用的全流程。本文注重实用价值,所有代码可直接复现,参数配置附带场景化建议,帮助新手快速上手。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 356

sd卡引脚定义及命令

<br />SD卡引脚定义:<br />针脚 名称 类型   描述 <br />1 CD DAT3 I/O/PP 卡监测数据位3 <br />2 CMD      PP     命令/回复 <br />3 Vss      S      地 <br />4 Vcc      S      供电电压 <br />5 CLK      I      时钟 <br />6 Css2     S      地 <br />7 DAT0     I/O/PP 数据位0 <br />8 DAT1     I/O/PP

zmq5411的专栏 2万+

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

1.4 点云数据获取方式——结构光相机

与此同时,利用相机从特定角度捕捉变形后的图案,基于三角测量原理,通过精确计算相机与投影仪之间的几何关系以及图案的变形程度,就能准确计算出物体表面各点的三维坐标,从而获取高精度的三维点云数据。在高端制造业中,对于微小零部件的尺寸测量和缺陷检测,结构光相机能够提供极其精确的数据,确保产品质量符合严格的标准。时序编码:这类相机通过序列投射多幅不同图案,如格雷码、相移条纹等,通过对这一系列图案的时间序列进行解码分析,就能够获取亚像素级精度的三维信息,其单点误差能够控制在≤0.1mm,展现出极高的测量精度。

qq625924821的博客 925

SDIO——读写SD卡

SDIO的设备分类: SD / IO卡:这不是一种卡,现在已经不常用了,用到时再查。 SD存储卡:分局容量不同有三种名字① <= 2GB 的叫SDSC;② >2GB <= 32GB的叫SDHC卡;>32GB < 2TB 的叫SDXC卡。 单片机是32位的 ,支持的最大容量就是32GB,所以超大容量不支持。 认识内存卡 小卡和大卡没什么区别,大卡在左侧有一个锁,剥下来之后是禁止写入(好像没什么用),看图可知32GB的存储卡写了SDHC,而64GB的写了HDXC。上边的

weixin_45589030的博客 6045

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SD卡初始化细节

  V2.0版SD卡在SPI模式下使用CMD8的操作 使用STM32学习板操作SD卡时,遇到了初始化中检测SD卡类型的问题,查看学习板带的源程序发现使用了CMD8命令进行判断SD卡的类型,在网上查了好久查不到有关SDV2.0中CMD8命令的详细描述,于是自己看了英文版的SDV2.0协议(2006),找出了CMD8命令的章节,翻译了一下,然后加上一些自己的理解,构成了这篇说明。 首先简...

考核分的博客 6915

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SD卡的命令格式:

SD卡的命令格式:   SD卡的指令由6字节(Byte)组成,如下: Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40) Byte2-5:Command Arguments,命令参数,有些命令没有参数 Byte6:前7位为CRC(Cyc

qq_26647891的博客 476

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

stm32 SD卡

容量等级 SD容量有8MB、16MB、32MB、64MB、128MB、256MB、512MB、1GB、2GB SDHC容量有2GB 、4GB、8GB、16GB、32GB SDXC容量有32GB、48GB、64GB、128GB、256GB、512GB、1TB、2TB SD卡寄存器 命令格式 所有命令均遵守此格式,总共48位。一个起始位,一个方向位,6个命令位,32位参数(有些命

超哥的专栏 1931

STM32-(41):SD卡通信协议与命令(SPI)

SD卡的命令格式

半个月儿上来的博客 1378

SD卡之SPI

  感觉起这个标题的名字怪怪的,不过也是背后意义的。记得以前学习51单片机是,是用IO口模拟的SPI时序,现在在STM32上有了SPI硬件。才算基本上弄明白了SPI时序。 在学习SD卡时才接触的硬件SPI,所以给标题起了个怪怪的名字。   SD卡和硬件SPI的同时学习:   1、SPI接口 SPI是一种全双工、同步串行通信方式接口,这里用到了四个IO口:分别是时钟线SCK、...

aidianzui5381的博客 323
上一篇: μCOS-II系统之时间管理函数OSTimeGet()
下一篇: 浅谈volatile的作用
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值