cmd0

合集下载

STM32读写SD卡

STM32读写SD卡

3.20SD卡实验很多单片机系统都需要大容量存储设备,以存储数据。

目前常用的有U盘,FLASH芯片,SD卡等。

他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移动,有几种体积的尺寸可供选择(标准的SD 卡尺寸,以及TF卡尺寸),能满足不同应用的要求。

只需要4个IO口,就可以外扩一个最大达32GB以上的外部存储器,容量选择尺度很大,更换也很方便,而且方便移动,编程也比较简单,是单片机大容量外部存储器的首选。

ALIENTKE MiniSTM3开发板就带有SD卡接口,利用STM32自带的SPI接口,最大通信速度可达18Mbps,每秒可传输数据2M字节以上,对于一般应用足够了。

本节将向大家介绍,如何在ALIENTEK MiniSTM32开发板上读取SD卡。

本节分为如下几个部分:3.20.1 SD卡简介3.20.2 硬件设计3.20.3 软件设计3.20.4 下载与测试3.20.1 SD卡简介SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。

SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。

大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。

SD卡一般支持2种操作模式:1,SD卡模式;2,SPI模式;主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。

SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。

SD卡的引脚排序如下图所示:图3.20.1.1 SD卡引脚排序图SD卡引脚功能描述如下表所示:表3.20.1.1 SD卡引脚功能表SD卡只能使用3.3V的IO电平,所以,MCU一定要能够支持3.3V的IO端口输出。

sd卡协议

sd卡协议

sd卡协议SD(Secure Digital)是一种插入式闪存存储卡,广泛应用于数码相机、手机等电子设备中,用于存储和传输数据。

SD卡协议定义了SD卡的物理接口、命令、数据传输等方面的规范,保证了SD卡与设备之间的正常通信和数据交互。

本文将对SD卡协议进行详细介绍。

首先,SD卡使用SPI(Serial Peripheral Interface)或者SD卡总线进行数据传输。

SPI总线包括时钟线、数据线和控制线,通过与主机设备进行交互来传输数据。

SD卡总线则是一种用于SD卡的专用接口,可以支持更高的数据传输率和更复杂的命令操作。

SD卡协议定义了一系列的命令来控制SD卡的读写操作。

例如,通过发送CMD0命令可以将SD卡设置为待机模式;通过CMD8命令可以获取SD卡的供电电压信息;通过CMD17命令可以读取指定扇区的数据等等。

这些命令通过SPI或SD卡总线发送给SD卡,并通过响应返回相应的状态或数据。

在数据传输方面,SD卡协议定义了多种数据格式和传输方式。

其中包括SDSC(Standard Capacity)和SDHC(High Capacity)两种存储容量类型。

SDSC最大支持2GB的存储容量,采用FAT16文件系统;而SDHC则支持最大32GB的存储容量,采用FAT32文件系统。

同时,SD卡还支持多种传输速率,从低速到高速不等。

除了基本的命令和数据传输,SD卡协议还定义了许多额外的特性和功能。

例如,SD卡可以通过密码进行保护,只有正确的密码才能访问数据;SD卡还支持写保护功能,可以防止数据被误写或删除;SD卡还可以通过CID(Card Identification)或CSD(Card Specific Data)等信息来识别和管理不同的SD卡等。

总之,SD卡协议是一套用于控制SD卡读写操作的规范,包括物理接口、命令、数据传输等方面的定义。

它保证了SD卡与设备之间的正常通信和数据交互,使得SD卡能够在各种电子设备中广泛应用。

SD卡功能描述(翻译)

SD卡功能描述(翻译)

4 SD卡功能描述4.1 概述主机与卡之间的所有通讯都由主机控制。

主机发送两类命令:广播命令和定址命令(点对点)。

●广播命令:广播命令适用于所有卡,部分命令需要响应回复。

●定址命令(点对点)定址命令发给已确定地址的卡,引发卡响应回复。

表格4-1显示卡片辨识模式命令流程总览,表格4-3针对数据传输模式。

表格4-19和表格4-28罗列了所有命令。

表4-29罗列了当前状态、命令接收和随后模式之间的依赖关系。

在接下去的章节中,会首先描述各类卡片操作模式。

然后,定义始终信号控制条件。

SD卡所有关于命令、响应、状态转换、错误条件和定时都会在随后的章节中描述。

SD卡系统(主机和卡片)定义两种操作模式:●卡片辨识模式主机复位后或者在总线上搜索新卡时,会进入卡片辨识模式。

卡片复位后也进入这个模式,直到收到SEND_SCR命令(CMD3)。

●数据传输模式当卡片的RCA首次确定后立即进入数据传输模式。

主机要识别完总线上所有卡片后进入数据传输模式。

下面的表格展示了操作模式和卡片状态之间的关系。

SD卡状态表中的每个状态都与一种操作模式相关。

表4-1 卡片状态和操作模式总览4.2 卡片辨识模式在卡片辨识期间,主机复位所有在卡片辨识模式中的SD卡,确认操作电压范围,辨识卡片以及要求确定相对卡片地址(RCA)。

这个操作通过SD卡CMD口线各自独立完成。

卡片辨识模式中所有的数据传输只能使用CMD口线通道(CMD)。

在卡片辨识过程中,SD卡使用辨识时钟速率f OD(见6.7章)作为SD卡时钟频率。

4.2.1 卡片复位命令GO_IDLE_STATE(CMD0)是一个软复位命令,要求卡片立即忽略当前模式进入空闲模式。

卡片在非活动模式时该命令无效。

主机上电后,所有卡片进入空闲模式,包括之前在非活动模式下的卡片。

在上电或CMD0命令后,所有卡片CMD口线进入输入模式,等待下个命令的起始位。

卡片初始化时使用默认相对地址(RCA=0x0000),以及默认驱动寄存器设置(最低速度,最大驱动电流能力)。

基于stm32f103对sd卡底层的基本操作方法

基于stm32f103对sd卡底层的基本操作方法

基于stm32f103对sd卡底层的基本操作方法基于STM32F103的SD卡底层操作方法是指通过STM32F103系列微控制器来对SD卡进行读写操作的一组基本方法。

本文将详细介绍如何配置STM32F103的SPI接口和相关寄存器,以及如何使用SPI接口与SD卡进行通信和文件操作。

一、硬件连接首先,需要连接STM32F103与SD卡之间的硬件接口。

STM32F103的SPI接口包括四根引脚,分别是NSS(片选信号)、SCK(时钟信号)、MISO(数据输入信号)和MOSI(数据输出信号)。

通常,可以将SD卡的NSS引脚连接到STM32F103的任一GPIO引脚上作为片选信号,并通过软件控制片选信号的高低电平来选择SD卡进行读写操作。

此外,还需要将SD卡的SCK、MISO和MOSI引脚分别连接到STM32F103的SPI接口的SCK、MISO和MOSI引脚上。

为了方便起见,可以直接使用STM32F1的SPI中的SPI1进行配置。

二、SPI接口配置在STM32F103中,SPI接口由SPI1、SPI2和SPI3三个外设实现,其中SPI1位于APB2总线上,SPI2和SPI3位于APB1总线上。

在本文中,我们将使用SPI1进行SD卡的底层操作。

首先,需要在CubeMX中将SPI1的NSS、SCK、MISO和MOSI引脚分别配置为GPIO输出、SPI时钟、SPI数据输入和SPI数据输出功能。

然后,需要配置SPI1的时钟分频系数、数据位数、传输模式等参数。

SPI1的时钟分频系数由BDIV和BR两个参数决定,其中BDIV位于SPI1->CR1寄存器的位6-7位,用于设定SPI1主频的1/2、1/4、1/8还是1/16,BR位于SPI1->CR1寄存器的位3-5位,用于设定SPI1的分频系数。

根据SD卡的时钟特性,一般选择SPI1的分频系数为sclk/32,其中sclk为主控芯片时钟。

在SPI接口配置完成之后,需要打开SPI1外设时钟使能,并设置SPI1的工作模式、数据位数等参数。

MMC卡原理和操作分析

MMC卡原理和操作分析

MMC卡原理和操作分析MMC的典型结构图如下,主要包含卡接口,卡接口控制器,寄存器堆,存储单元,存储单元接口,上电检测模块这几部分。

MMC卡状态图,识别模式主要包含以下三个状态:idle:Idle Stateready:Ready Stateident:Identification State可以用CMD3进入数据传输模式的stby状态,Stand-by State。

MMC卡状态图,数据传输模式MMC卡状态图,中断模式MMC Indentification ModeMMC识别模式简介:MMC识别模式只用来识别卡。

但是识别卡并不等同于初始化卡,这只是MMC卡整个初始化的一部分。

状态图详见MMC卡状态图,识别模式。

状态:MMC识别模式只包含三种状态,如下所示:1。

idle: Idle State 空闲状态空闲状态是卡复位后进入的状态,匹配完MMC卡电压范围之后,MMC卡转变到Ready State。

2。

ready: Ready State 准备状态准备状态是MMC卡匹配完电压范围之后的状态,获取完CID值之后,MMC卡进入Identification State。

3。

ident: Identification State 识别状态识别状态是MMC卡响应CID之后进入的状态,如果分配RCA成功,MMC卡进入Stand-by State。

功能流程:MMC识别模式下只有一种功能流程,即Identification Process识别流程。

详细介绍如下:1。

Identification Process:识别流程->idle->ready->ident->stby这是MMC识别模式唯一支持的功能流程,涉及到idle,ready,ident,stby这四个状态,CMD0,CMD1,CMD2,CMD3这四种指令,并对OCR,CID和RCA这三个寄存器进行了存取。

下面列出详细的过程以及过程中的要点:->idle:a。

SD卡的命令格式

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 bitsclass7:卡的锁定,解锁功能命令集class8:申请特定命令集。

class10 -11 :保留其中class1, class3,class9:SPI模式不支持了解了指令的形式和具体的控制内容,下面主要解决的就是MCU与SD卡的通信问题,通信主要需要注意下面的问题:(1)供电电压:必须是3.3V(2) 通信模式的切换:SD卡有两种通信模式:SPI模式和SD模式,默认情况下的通信模式是SD模式,但是我们常用的模式是SPI模式,这就需要一个切换模式的方法,具体的实现方法在其他地方也都有介绍,其关键的地方就是先上电延时大于74个时钟周期后发送复位命令,复位成功(接收到0x01的响应)后,连续发送CMD55和ACMD41,直到响应0X00为止,此时SD卡已经进入SPI模式。

SD卡引脚及spi模式基本操作过程

SD卡引脚及spi模式基本操作过程

这是必须的。

在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。

随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式初始化时序图:初始化例程:C程序//----------------------------------------------------------初始化SD卡到SPI模式//----------------------------------------------------------unsignedchar SD_Init(){unsignedchar retry,temp;unsignedchar i;unsignedchar CMD[]={0x40,0x00,0x00,0x00,0x00,0x95};SD_Port_Init();//初始化驱动端口Init_Flag=1;//将初始化标志置1for(i=0;i<0x0f;i++){Write_Byte_SD(0xff);//发送至少74个时钟信号}//向SD卡发送CMD0retry=0;do{//为了能够成功写入CMD0,在这里写200次temp=Write_Command_SD(CMD);retry++;if(retry==200){//超过200次return(INIT_CMD0_ERROR);//CMD0Error!}}while(temp!=1);//回应01h,停止写入//发送CMD1到SD卡CMD[0]=0x41;//CMD1CMD[5]=0xFF;retry=0;do{//为了能成功写入CMD1,写100次temp=Write_Command_SD(CMD);retry++;if(retry==100){//超过100次return(INIT_CMD1_ERROR);//CMD1Error!读SD卡的CSD寄存器共16字节返回0说明读取成功//-------------------------------------------------------------------unsignedchar Read_CSD_SD(unsignedchar*Buffer){//读取CSD寄存器的命令unsignedchar CMD[]={0x49,0x00,0x00,0x00,0x00,0xFF};unsignedchar temp;temp=SD_Read_Block(CMD,Buffer,16);//read16bytesreturn(temp);}4)读取SD卡信息综合上面对CID与CSD寄存器的读取,可以知道很多关于SD卡的信息,以下程序可以获取这些信息。

SD卡引脚定义及命令

SD卡引脚定义及命令

SD卡引脚定义针脚名称类型描述1.CD DAT3 I/O/PP 卡监测数据位32.CMD PP 命令/回复3. Vss S 地4.Vcc S 供电电压5.CLK I 时钟6.Css2 S 地7.DAT0 I/O/PP 数据位08.DAT1 I/O/PP 数据位19.DAT2 I/O/PP 数据位2SD卡接口标准规范SD卡上所有单元由内部时钟发生器提供时钟。

接口驱动单元同步外部时钟的DAT和CMD信号到内部所用时钟。

本卡由6线SD卡接口控制,包括:CMD,CLK,DAT0-DAT3。

在多SD卡垛叠中为了标识SD卡,一个卡标识寄存器(CID)和一个相应地址寄存器(RCA)预先准备好。

一个附加的寄存器包括不同类型操作参数。

这个寄存器叫做CSD。

使用SD卡线访问存储器还是寄存器的通信由SD卡标准定义。

卡有自己的电源开通检测单元。

无需附加的主复位信号来在电源开启后安装卡。

它防短路,在带电插入或移出卡时。

无需外部编程电压。

编程电压卡内生成。

SD卡支持第二接口工作模式SPI。

如果接到复位命令(CMD0)时,CS信号有效(低电平),SPI 模式启用。

SD卡接口规范(完整规范标准)特性:◎容量:32MB/64MB/128MB/256MB/512MB/1GByte◎兼容规范版本1.01◎卡上错误校正◎支持CPRM◎两个可选的通信协议:SD模式和SPI模式◎可变时钟频率0-25MHz◎通信电压范围:2.0-3.6V工作电压范围:2.0-3.6V◎低电压消耗:自动断电及自动睡醒,智能电源管理◎无需额外编程电压◎卡片带电插拔保护◎正向兼容MMC卡◎高速串行接口带随即存取---支持双通道闪存交叉存取---快写技术:一个低成本的方案,能够超高速闪存访问和高可靠数据存储---最大读写速率:10Mbyte/s◎最大10个堆叠的卡(20MHz,Vcc=2.7-3.6V)◎数据寿命:10万次编程/擦除◎CE和FCC认证◎PIP封装技术◎尺寸:24mm宽×32mm长×1.44mm厚本SD卡高度集成闪存,具备串行和随机存取能力。

SD卡中文资料

SD卡中文资料

7S P I模式本文是小弟自己翻译的(处女作哦~~~~~),难免有不妥之处,望交流指教!联系方式 QQ:286225453 Email:ioro55555@7.1介绍SPI模式SPI模式由二次传递协议组成,这个协议由Flash(基于SD卡)提供。

本模式是SD卡协议的子协议,目的是用SPI信道通讯。

SPI模式在SD卡上电后第一个复位指令(CMD0)执行后被选择,并且在接通电源时不能改变。

SPI标准定义只不过是物理链接,而不是完全的数据传送协议。

SD卡的SPI设备使用SD卡协议的子协议和部分指令。

SPI模式的优势在于可以使用标准主机,从而把外设减少到最低。

SPI模式相对于SD模式的缺点是损失了性能。

7.2 SPI总线SD卡信道由指令和数据位(起始位和结束位)组成,SPI信道由字节定向。

每一个指令或数据块由8位的字节和CS标志构成。

类似SD卡协议, SPI通讯由指令、响应和数据组成。

全部的主机与SD卡之间的通信由主机控制。

主机执行每一跟CS标志为低的总线。

SPI模式与SD模式的响应特性有以下三方面不同∶1、被选择的卡始终对指令作出反应。

2、一个附加的(8BIT)响应产生。

3、在SD卡遇到数据检索问题时,它会作出错误反应,而不是像在SD模式中一样执行一次空操作。

除命令响应之外,每一个数据块在写操作期间会作出专门的信息响应标志反应发送给SD卡。

数据块可以大到一个扇区小到一个字节。

读/写操作由CSD(指令信号译码器)寄存器操作。

7.2.1模式选择SD卡在上电后自动SD模式。

如果CS标志在接受复位指令(CMD0)期间为低,它将进入SPI模式并且处于空闲状态。

如果SD卡识别到需要保持SD模式,它不会对指令作出任何反应并且保持在SD模式中。

如果需要SPI模式,SD卡将转到SPI模式并且进行SPI模式R1响应。

回到SD模式的必须重新上电。

在SPI 模式下,SD卡遵守部分协议系统。

支持SPI模式的SD卡指令始终有效。

FAT文件系统的SD卡单片机读写方法详解

FAT文件系统的SD卡单片机读写方法详解

FAT文件系统的SD卡单片机读写方法详解FAT(File Allocation Table)文件系统是一种用于存储和组织文件的文件系统。

SD卡是一种常见的存储设备,广泛应用于单片机系统中。

在单片机中,访问和读写SD卡上的文件需要特定的方法和步骤。

本篇文章将详细介绍FAT文件系统的SD卡在单片机中的读写方法。

1.硬件接口配置:在单片机系统中使用SD卡之前,需要进行硬件接口的配置。

SD卡使用SPI(Serial Peripheral Interface)进行数据传输,因此需要连接SD卡的CLK(时钟)、MISO(主从串行数据输入)、MOSI(主从串行数据输出)和CS(片选)引脚。

在单片机上使能SPI模块,并设置相关寄存器进行SPI传输的配置。

2.初始化SD卡:在开始使用SD卡之前,需要进行初始化操作。

初始化主要包括向SD 卡发送初始化命令和等待SD卡的响应。

初始化命令主要包括发送复位命令(CMD0)和发送初始化命令(CMD1)。

发送命令后,需要等待SD卡发回响应信号,即SD卡的操作完成,才能进行下一步的操作。

3.读取文件目录:在FAT文件系统中,文件目录存储了文件的相关信息,如文件名、文件大小、起始簇号等。

读取文件目录需要进行多次读取操作,以读取目录项的内容。

首先需要读取FAT表,获取根目录的起始簇号。

然后根据起始簇号,读取对应的目录项内容。

目录项的读取可以通过读取SD卡上的扇区数据进行,需要注意目录项的位置和格式。

4.读取文件数据:在FAT文件系统中,文件数据以簇(Cluster)为单位进行存储。

每个簇的大小一般为512字节。

首先需要根据文件目录项中的起始簇号,定位到对应的簇,并读取簇的数据内容。

读取文件数据就是按照簇的顺序进行读取,直到读取到文件结束符为止。

通过读取SD卡上的扇区数据,并根据FAT表中的簇号进行簇的链式读取。

5.写入文件数据:写入文件数据和读取文件数据类似,也是按照簇的顺序进行写入。

SD卡物理层规范简化版

SD卡物理层规范简化版

SD存储卡规范第一部分:物理层规范V1.01的简化版本1.概述 (2)2.系统特性 (2)3.SD存储卡的系统概念 (3)3.1 总线拓扑结构 (4)3.2 总线协议 (6)3.3 SD存储卡的引脚与寄存器 (10)3.4 与多媒体卡兼容 (11)4.SD存储卡的功能介绍 (14)5.卡的寄存器 (14)6.SD存储卡的硬件接口 (14)7.SPI模式 (14)8.SD存储卡的机械规范 (14)8.1 卡的外壳 (14)8.2 机械外形参数 (16)8.3 系统:卡和连接器 (19)8.4 薄(1.44mm)SD存储卡 (19)9.附录 (21)10.缩写和术语 (21)1.概述SD存储卡(Secure Digital Memory Card)是特别为符合新出现的音频和视频消费电子设备的安全性、容量、性能和环境等要求而设计的一种存储卡。

SD 存储卡包含符合SDMI标准安全性的版权保护机制,速度更快而且存储容量更大。

SD存储卡的安全系统使用双方认证和“新的密码算法”技术,防止卡的内容被非法使用。

它还提供了一种无安全性的访问方法访问用户自己的内容。

SD 存储卡的物理外形、引脚分配和数据传输协议都向前兼容多媒体卡(MultiMediaCard),但也增加了一些内容。

SD存储卡的通信基于一个高级的9引脚接口(时钟、命令、4条数据线和3条电源线),可以在最高25MHz频率和低电压范围内工作。

通信协议也是本规范的一部分。

SD存储卡的主机接口也支持常规的多媒体卡操作。

也就是说向前兼容多媒体卡。

实际上,SD存储卡和多媒体卡的主要区别在初始化过程。

SD存储卡规范共有几个文档,其文档结构图如图1所示。

SD存储卡安全规范音频规范文件系统规范SD存储卡物理层规范(本文档)其他应用文档图1 SD存储卡文档结构•SD存储卡音频规范这个规范以及其他规范介绍了某些应用(这里是音频应用)的规范以及实现要求。

•SD存储卡文件系统规范介绍了保存在SD存储卡中的数据的文件格式结构规范(包括有保护和无保护方面)。

51单片机SD卡SPI模式操作_1568

51单片机SD卡SPI模式操作_1568

【51单片机SD卡SPI模式操作】摘要:sd卡有两种接口模式,一种是sd模式,另一种是spi模式。

在spi模式下,有六根接口线与主机相连,5V电平的51单片机通过电平转换可与3.3V电平的sd卡相连接。

51单片机没有专门的spi总线,可以用51单片机的IO口来模拟spi总结时序。

主机与sd卡的数据交换主要通过命令来实现,通过发送cmd0命令对sd卡进行复位,发送命令cmd1实现sd卡的spi模式初始化。

cmd17、cmd18命令是sd卡的读写扇区命令,对sd卡的操作是严格按照时序进行的。

关键词:sd卡;spi接口;时序sd卡以其大容量、低成本、携带方便、存储数据简单和安全可靠性高被大量应用于数码电子设备中,比如数码相机、数码摄像机、mp3、pda、电子学习机、电子图书等。

对sd卡的操作有复位、初始化、读写等,下面以本人掌握的材料对sd卡的操作进行分析。

一、sd卡的结构sd卡的外形与接口如图1,它有9个接点与主机相连,其接口端定义如表1所示。

sd卡有两种操作模式,一种是sd模式,另一种是spi模式,不同模式下端口的定义不同。

SD模式有一个时钟线、一个命令/反馈线、四根输入/输出信号线、两个电源地和一个电源,所有九根线都有定义,数据传输速率较快。

SPI模式只用到CS片选、数据输入、数据输出、时钟、电源地及电源六根线。

SPI模式较SD模式速度较慢,但很多单片机都有专用的SPI总线,可与sd卡直接相连,使用方便。

SD卡的内部结构如图2所示,主要有四部分组成,一是接口电路,共有九个接口电路,定义如表1所示。

二是接口控制电路,所有操作都由该控制电路具体去执行。

三是内部寄存器组OCR、CID、RCA等。

四是存储数据的存储单元。

接口电路通过控制电路与内部寄存器组成存储单元交换数据,其主要操作有写命令、读数据、写数据、读状态等。

二、sd卡的命令格式sd卡的命令格式固定为6个字节48个位,其格式如图3所示。

开始位固定为0,第二位固定为1,表示主机给sd卡的命令,然后是6位命令索引号,索引号的大小与索引号数字相同,比如cmd0的索引号为000000,索引号41为101001。

emmc cmd 基本命令

emmc cmd 基本命令

emmc cmd 基本命令引言:eMMC(embedded MultiMediaCard)是一种集成电路卡,用于嵌入式设备的存储和数据传输。

通过使用eMMC cmd(命令),我们可以在嵌入式系统中对eMMC进行读取、写入和擦除等操作。

本文将介绍一些常用的eMMC cmd基本命令。

一、eMMC cmd简介eMMC cmd是一组用于控制eMMC操作的指令。

它定义了一些特定的命令,可以用于读取、写入和擦除等操作。

eMMC cmd通常由主机发送给eMMC设备,并由eMMC设备执行相应的操作。

它们的执行结果可以通过响应寄存器进行反馈。

二、eMMC cmd基本命令1. CMD0(复位命令)CMD0用于复位eMMC设备。

当主机向eMMC设备发送CMD0命令时,eMMC设备将重置其内部状态,并返回到初始状态。

2. CMD1(初始化命令)CMD1用于初始化eMMC设备。

主机发送CMD1命令后,eMMC设备将进行初始化操作,并返回初始化结果。

此命令通常用于检测eMMC设备是否就绪。

3. CMD2(读CID命令)CMD2用于读取eMMC设备的CID(Card Identification)信息。

CID 包含了eMMC设备的一些基本信息,如制造商ID、产品序列号等。

4. CMD3(设置RCA命令)CMD3用于设置eMMC设备的RCA(Relative Card Address)。

RCA是eMMC设备的相对地址,用于主机与eMMC设备之间的通信。

5. CMD5(IO模式选择命令)CMD5用于选择eMMC设备的IO模式。

eMMC设备支持多种IO模式,如SPI模式和SD模式等。

通过CMD5命令,主机可以选择所需的IO 模式。

6. CMD6(切换命令)CMD6用于在eMMC设备的多个存储区之间进行切换。

eMMC设备通常由多个逻辑分区组成,通过CMD6命令,主机可以选择所需的存储区。

7. CMD7(选择/反选命令)CMD7用于选择或反选eMMC设备。

SD卡中文数据手册

SD卡中文数据手册

SD卡中⽂数据⼿册SD卡中⽂数据⼿册⼀概述1.SD总线模式下CLK:时钟信号CMD:双向命令和响应信号DAT0-3:双向数据信号VDD,VSS:电源和地信号SD模式下允许有⼀个主机,多个从机(即多个卡),主机可以给从机分别地址.主机发命令有些命令是发送给指定的从机,有些命令可以以⼴播形式发送.SD模式下可以选择总线宽度,即选⽤⼏根DAT信号线,可以在主机初始化后设置.2.SD总线协议SD模式下的命令和数据流都有⼀个开始位和结束位.>命令:是在CMD上传输的⽤于启动⼀个操作的⽐特流.由主机发往从机,可以是点对点也可以是⼴播的. >响应:是在CMD上传输的⽤于之前命令回答的⽐特流.由从机发往主机.>数据:是在DAT上传输的⽐特流,双向传输.⽆响应模式⽆数据模式多块读操作模式多块写操作模式命令格式响应格式数据格式SD卡上电后会⾃动初始化,通过给卡发送CMD0也可以复位卡.⼆.SD卡命令描述.1.⼴播命令:给所有卡都发送,某些命令需要响应.2.点对点命令给指定地址的卡发送,需要响应.SD卡系统有两种⼯作模式:1.卡识别模式.主机上电复位后即处于此模式,它会在总线上等待卡.卡复位后也处于此模式,直到SEND_RCA(CMD3)命令到来.2.数据传输模式.卡收到SEND_RCA(CMD3)命令后即进⼊此模式.主机识别到卡后也进⼊此模式.卡状态和⼯作模式对照表1.卡识别模式.此模式下主机复位总线所有的卡,验证⼯作电压,询问卡的地址.这个模式下所有数据的传输都是只通过CMD线来完成.1)卡的复位.当卡上电或收到GO_IDLE_STATE(CMD0)命令后,卡即进⼊Idle State状态.此时卡将其RCA设为0,相关寄存器设为传输稳定的最优模式.2)⼯作电压验证每个卡的最⾼和最低⼯作电压存储在OCR.只有当电压⽐配时,CID和CSD的数据才能正常传输给主机.SD_SEND_OP_COND(ACMD41)命令⽤来判断卡的⼯作电压是否符合,如果不符合的话,卡应该放弃总线操作,进⼊Inactive State状态.在发送SD_SEND_OP_COND(ACMD41)命令前记得要⾸先发送APP_CMD (CMD55).卡的状态变换图.ACMD41命令响应中的BUSY位也⽤于卡表⽰其还没准备好,主机此时应重发ACMD41命令,直到卡准备好.主机在这个阶段的ACMD41中不允许改变⼯作电压,如果确实想改变的话,应该先发送CMD0,然后再发送改变后的ACMD41.GO_INACTIVE_STATE(CMD15)命令⽤于使指定地址的卡进⼊Inactive State模式.3)卡识别过程.ALL_SEND_CID(CMD2)命令⽤于获取卡的CID信息,如果卡处于Ready State,它就会在CMD线上传送它的CID信息,然后进⼊Identification State模式.紧接着发送CMD3 (SEND_RELATIVE_ADDR)命令,⽤于设置卡新的地址.卡收到新的地址后进⼊Stand-by State 模式.2.数据传输模式.数据传输模式下卡的状态转变图进⼊数据传输模式后,主机先不停的发送SEND_CSD(CMD9)命令获取卡的CSD信息. SET_DSR(CMD4)⽤于设置卡的DSR寄存器,包括数据总线宽度,总线上卡的数⽬,总线频率,当设置成功后,卡的⼯作频率也随之改变.此步操作是可选的.CMD7命令⽤于使指定地址的卡进⼊传输模式,任何指定时刻只能有⼀个卡处于传输模式.传输模式下所有的数据传输都是点对点的,并且所有有地址的命令都需要有响应..所有读命令都可以由CMD12命令停⽌,之后卡进⼊Transfer State.读命令包括单块读(CMD17),多块读(CMD18),发送写保护(CMD30),发送scr(ACMD51)和读模式⼀般命令(CMD56)..所有写命令都可以由CMD12命令停⽌.写命令包括单块读(CMD24),多块读(CMD25),写CID(CMD26),写CSD(CMD27),锁和解锁命令(CMD42)和写模式⼀般命令(CMD56)..当写命令传输完成后,卡进⼊Programming State(传输成功)或Transfer State(传输失败).如果⼀个卡写操作被停⽌,但其前⾯数据的CRC和块长度正确,数据还是会被写⼊..卡要提供写缓冲,如果写缓冲已满并且卡处于Programming State,DAT0保持低BUSY. .写CID,CSD,写保护,擦除命令没有缓冲,当这些命令没完时,不应发送其他的数据传输命令..参数设置命令在卡被编程时是不允许发送的,这些命令包括设置块长度(CMD16),擦除块起始(CMD32)和擦除块结束(CMD33). .当卡正编程时读命令是禁⽌的..⽤CMD7使另⼀个卡进⼊Transfer State不会终⽌当前卡的编程和擦除,当前卡会进⼊Disconnect State并且释放DAT线..Disconnect State模式的卡可通过CMD7重新被选中,此时卡进⼊Programming State 并且使能busy信号..CMD0或CMD15会终⽌卡的编程操作,造成数据混乱,此操作应禁⽌.1)总线宽度选择命令ACMD6命令⽤于选择总线宽度,此命令只有在Transfer State有效.应在CMD7命令后使⽤.2)块读命令块是数据传输的最⼩单位,在CSD(READ_BL_LEN)中定义,SD卡为固定的512B.每个块传输的后⾯都跟着⼀个CRC校验.CMD17(READ_SINGLE_BLOCK)⽤于传输单个块,传输完之后,卡进⼊Transfer State.CMD18(READ_MULTIPLE_BLOCK)⽤于多个块的传输,直到收到⼀个CMD12命令.3)块写命令与块读命令类似,每个块传输的后⾯都跟着⼀个CRC校验.卡写数据时会进⾏CRC校验.多块写⽐重复的单块写更能提⾼效率.如果CSD中的WRITE_BLK_MISALIGN没设置,并且发送的数据不是块对齐的,卡会设置状态寄存器中的ADDRESS_ERROR 位,并且进⼊Receive-data-State状态等待停⽌命令.此时写操作也会停⽌,并且卡会设置其的WP_VIOLATION位.如果写缓冲满的话,卡会停⽌接受WRITE_BLOCK命令.此时主机应发送SEND_STATUS (CMD13)命令,卡返回数据的READY_FOR_DATA位标志卡是否准备好接受新的数据.在多块写操作中通过事先发送ACMD23命令可提⾼写速度.ACMD23⽤于定义接下来要写数据的块的数⽬.每次多块写操作后,这个值⼜被设为默认的1.ACMD22会使卡返回写成功的块数⽬.4)擦除命令擦除命令的顺序是:ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)and ERASE (CMD38).如果(CMD38或(CMD32,33)接收到出错信息,卡会设置状态寄存器中的ERASE_SEQ_ERROR 位并且重新等待新的命令时序.如果接收到时序错误命令,卡会设置其ERASE_RESET位并且重新等待新的命令时序.5)写保护管理三种机制:-.写保护物理开关-.卡内部写保护通过设置CSD中的WP_GRP_ENABLE位和WP_GRP_SIZE位,SET_WRITE_PROT和CLR_WRITE_PROT命令⽤来设置和清除保护机制.-.密码保护.三.时钟控制如果主机要发送1K的数据,但是主机缓冲区只有512B,那么主机可以在发送完前512B 后,可以先停⽌时钟,然后把后512B填充⼊缓冲区,再启动时钟,这样卡并不会检测要两次发送之间的间隔,认为其是⼀次完整的数据发送过程.四CRC校验1.CRC7CRC7⽤于所有的命令,除R3以外的响应,以及CID和CSD寄存器.2.CRC16CRC16⽤于数据块的校验五.错误类型.1.CRC错误和命令⾮法错误命令的CRC校验出错,卡设置其状态寄存器的COM_CRC_ERROR位.⾮法命令错误,卡设置其状态寄存器的ILLEGAL_COMMAND位.⾮法命令包括:不⽀持的命令,未定义的命令以及当前状态不⽀持的命令.2.读,写和擦除超时.卡应该在指定的时间内完成⼀个命令或返回移动的错误信息.如果在指定的超时时间内主机收不到响应,应认为卡停⽌⼯作,应重新复位卡.六命令1.命令类型:-bc不需要响应的⼴播命令.-bcr需要响应的⼴播命令.每个卡都会独⽴的接收命令和发送响应.-ac点对点命令,DAT线上没数据-adtc点对点命令,DAT线上有数据所有命令均遵守上图中的格式,总共48位.⾸先是1个起始位0,接着是1个⽅向位(主机发送位1),6个命令位(0-63),32位参数(有些命令需要),CRC7位校验,1个停⽌位. 2.卡命令根据不同的类型分成了不同的Class,见下表,其中Class0,2,4,5,8是每个卡都必须⽀持的命令,不同的卡所⽀持的命令保存在CSD中.3.命令详细描述1)基本命令Class02)读命令Class23)写命令Class43)擦除命令Class54)应⽤特定命令Class8下表中的所有命令使⽤前都应先跟⼀个APP_CMD(CMD55)命令七.卡状态转换表⼋.应答.所有的应答都是通过CMD发送,不同的应答长度可能不同.总共有四种类型的应答.1.R1:长度位48位.注意每个块传输完成后有⼀个BUSY位.2.R1b:与R1类似,只是将BUSY位加⼊响应中.3.R2(CID CSD寄存器):长度为136位,CID为CMD2和CMD10的应答,CSD为CMD9的应答.4.R3(OCR寄存器):长度位48位.作为ACMD41的应答.5.R6(RCA地址应答):长度为48位九.卡的状态SD卡⽀持两种状态:-卡状态:与MMC卡兼容.-SD卡状态:扩充到了512位.1.卡状态:R1应答包含⼀个32位的卡状态.见下表.其中Type中的含义为:E:错误位.S:状态位.R:根据命令在响应中设置.X:根据在命令执⾏期间设置,必须再次读此位才能获得命令执⾏后的情况.Clear Condition:A:与卡的当前状态有关B:总是与命令有关,⽆效的命令会清除此位.C:通过读此位来清除下表指明了哪些命令可能使哪些位产⽣变化这些位通过DAT线传输,并伴有CRC16校验.其是作为ACMD13的应答.⼗.卡存储器形式.-块:块是基本读写命令的单位,它可以是固定的或可变的.关于块的⼤⼩以及其是否可变性存储在CSD中.-扇区:扇区是擦除命令的单位,它是固定的值,保存在CSD中.⼗⼀.时序图时序图中字母含义:1.命令和应答1)卡识别和卡⼯作电压确认模式:CMD2,ACMD412)地址分配模式:CMD33)数据传输模式:4)命令结束->下⼀个命令:5)两个命令直接2.数据读.1)单块读:CMD172)多块读:读过程时序.停⽌命令时序3.数据写1)单块写:注意Busy信号.2)多块写:多块写命令时序停⽌命令时序卡主动停⽌时的时序4.时序值。

STM32的SD卡读取

STM32的SD卡读取

连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第四十四章SD卡实验2013-04-04 23:07第四十四章 SD卡实验很多单片机系统都需要大容量存储设备,以存储数据。

目前常用的有U盘,FLASH芯片,SD卡等。

他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移动,并且有几种体积的尺寸可供选择(标准的SD卡尺寸,以及TF卡尺寸等),能满足不同应用的要求。

只需要4个IO口即可外扩一个最大达32GB以上的外部存储器,容量从几十M到几十G 选择尺度很大,更换也很方便,编程也简单,是单片机大容量外部存储器的首选。

ALIENTKE 战舰STM32开发板自带了标准的SD卡接口,可使用STM32自带的SPI/S DIO接口驱动(通过跳线帽选择驱动方式),本章我们使用SPI驱动,最高通信速度可达18Mbps,每秒可传输数据2M字节以上,对于一般应用足够了。

在本章中,我们将向大家介绍,如何在ALIENTEK战舰STM32开发板上实现SD卡的读取。

本章分为如下几个部分:44.1 SD卡简介44.2 硬件设计44.3 软件设计44.4 下载验证44.1 SD卡简介SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。

SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。

大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。

按容量分类,可以将SD卡分为3类:SD卡、SDHC卡、SDXC卡。

如表44.1.1所示:容量命名简称0~2G Standard Capacity SD Memory Card SDSC或SD2G~32G High Capacity SD Memory Card SDHC32G~2T Extended Capacity SD Memory Card SDXC表44.1.1 SD卡按容量分类SD卡和SDHC卡协议基本兼容,但是SDXC卡,同这两者区别就比较大了,本章我们讨论的主要是SD/SDHC卡(简称SD卡)。

SD卡初始化命令介绍

SD卡初始化命令介绍

SD卡有很多种类型的命令,有初始化的,特殊功能开启关闭的,寄存器查看的,读和写的,官方给出的分类更清楚一些,不过在一般使用中,我们并不需要了解的多么复杂,只要掌握了最基本的初始化命令,和读写命令,SD卡的操作就能够实现了。

每一个命令的长度都是固定的6个字节,前1个字节的值=命令号+0x40;中间4个字节为参数,不同的命令参数格式都不相同,但参数最多为4个字节;最后1个字节是CRC校验码和1位固定结束位‘1’。

这里需要说明一下0x40的意思,任何命令都有一个固定的起始格式,即先0后1,这是固定的命令起始标志,前两个字节的二进制码就是:01xx xxxx需要特殊说明的是CRC的问题,这是一种检验错误的方法,具体问题度娘说的还算明白,在SPI 模式中,CRC校验默认是关闭的,也就是说这7位必须要发,但是SD卡会在读到CRC以后自动忽略它,所以全部发1就可以。

例外的是,CMD0,CMD8这两个命令发送的时候SD卡还没有进入SPI模式,也就是说CRC校验在这个时候还是启用状态,因此这两个命令的CRC效验码必须要写正确,SD卡才会执行命令,否在在返回值R1中就会有相应的错误标志位提示开发人员CRC校验码错误。

CMD0:0x40,0x00,0x00,0x00,0x00,0x954个字节的参数都为stuff bits 填充位,那就全0即可,最后一个字节CRC是固定的CMD8:0x48,0x00,0x00,0x01,0xaa,0x870x40的固定值+8=0x48;Reserved bits也是可以填充为0的位,VHS支持电压的说明可参考datasheet,需要说明的是参数的最后1byte检查位,这个字节的内容会在R7中原原本本的返回给用户,但是这个字节的不同决定了7位CRC的不同,网上的例子一般都发0xaa,那对应的CRC码+结束位就是0x87。

A CMD41属于附加命令,发送起来要麻烦一些,必须提前通知SD卡下一条要发送的命令为ACMD,这个通知就是CMD55,它的4字节参数都为0即可,CMD55 :0x77,0x00,0x00,0x00,0x00,0xff.0x77 = 0x40 + 0x37(55的16进制表示);CRC可以忽略不要都发1即可 0xff.ACMD41:0x69,0x40,0x00,0x00,0x00,0xff.第一个字节算法同理,第一个参数从DATASHEET可以看出HCS位被置1了,目的是为了告诉SD卡我的MCU支持SDHC卡,如果SD卡不回应CMD8也就是说当前SD卡为1.0版本,那么发送ACMD41时SD卡会自动忽略这个位。

关于emmc防数据异常的方案研究和实现方法

关于emmc防数据异常的方案研究和实现方法
在eMMC协议中,规定了相关命令和参 数,例如:
CMD0:用来软件复位设备 CMD1:用来协商操作电压范围 CMD2:用来从设备端获取CID
该方案中,我们通过使用带参数的CMD0 命令可以对设备进行复位,在发送该命令后整 个eMMC会进行内部初始化,eMMC设备进 入idle状态,此过程中,不接受外部任何写操 作。我们利用此机制来实现在AC断电过程中 对eMMC的写保护操作,防止异常数据写入。
4结束语综上所述将软件方面的工程技术运用与数据库的设计中是非常有意义的事情不仅能够提升数据库设计方面的工作效率同时还能够增强数据库方面的适应性以及灵活性因此在对软件工程方面进行实际应用的时候一定要不断的进行探索以及研究将应对的方式及时的进行完善以及改进这样能够顺利的设计以及建立数据库同时能够将软件开发方面的技术可以发挥出最大的作用
«上接167页
面的需要进行详细的分析。经过对系统的全面 分析,可以掌握住软件方面实际的运行环境以 及配置的一个标准,可以为数据库方面的开发 提供相应的技术参数。
3.4数据库进行设计的阶段
在建立数据库的系统的过程中,重点的 内容就是设计以及建立。同时数据库方面的运 行效果比较容易受到设计质量的影响,如果想 将数据库中软件的系统进行完美的建立,一定 要可以实现简化运算,这样能够提升实际的运 行效果,同时能够让用户更加方面的将自己想 要的信息进行获取,从而能够完整的保存数据, 可以为数据库的设计奠定非常坚实的基础,在 这个过程中需要注意的是,设计数据库的前提 就是将需求进行分析。首先要将数据库的概念 以及结构进行设计,将用户的需要大致的进行 了解,之后在这个基础之上设计出联系图。再 设计出数据库方面的逻辑性,把E・R方面的 图片转变成计算机需要的语言,将DBMS的 系统进行匹配,把实体的关系转变成为数据库 的系统里表间的一种关系。在设计数据库中物

emmc 写复位指令

emmc 写复位指令

emmc 写复位指令什么是 eMMC?eMMC(embedded MultiMediaCard)是一种嵌入式多媒体卡,是一种常见的闪存存储设备。

它集成了闪存芯片和控制器,被广泛应用于移动设备、嵌入式系统和消费电子产品中。

eMMC 提供了高速的数据传输和可靠的数据存储,具有较小的尺寸和低功耗特性。

它可以用于存储操作系统、应用程序、媒体文件和其他数据。

为什么需要复位指令?在使用 eMMC 存储设备时,有时会遇到一些问题,例如设备无法启动、数据读写错误等。

这些问题可能是由于存储设备本身的故障或软件问题引起的。

在这些情况下,复位指令可以用来重新初始化 eMMC 设备,恢复其正常工作状态。

复位指令可以清除存储设备的状态和缓存,并重新启动设备。

如何编写 eMMC 复位指令?编写 eMMC 复位指令需要了解 eMMC 的工作原理和指令集。

eMMC 设备通过 CMD 和DAT 线与主机进行通信,主机通过 CMD 线发送指令,eMMC 设备通过 DAT 线回复数据。

以下是一个示例的 eMMC 复位指令:CMD0: 0x40FF8000在这个指令中,CMD0 是一个复位指令的命令码,0x40FF8000 是一个参数,用于指定复位的方式和选项。

具体的参数取值可以根据 eMMC 设备的规格和要求进行设置。

eMMC 复位指令的执行流程执行 eMMC 复位指令的流程如下:1.主机通过 CMD 线发送复位指令给 eMMC 设备。

2.eMMC 设备接收到复位指令后,根据指令的参数执行相应的复位操作。

3.eMMC 设备完成复位操作后,通过 DAT 线回复主机。

4.主机接收到 eMMC 设备的回复后,可以继续发送其他指令给 eMMC 设备。

复位指令的执行流程可以使用时序图来表示,如下所示:sequenceDiagramparticipant Hostparticipant eMMCHost->>eMMC: CMD0eMMC->>Host: Response复位指令的应用场景eMMC 复位指令可以在以下场景中使用:1.设备无法启动:当设备无法启动时,可能是由于 eMMC 存储设备的问题导致的。

SD卡CMD命令

SD卡CMD命令

SD卡CMD命令介绍1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))1条时钟线,时钟源是来自APH总线时钟4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用).SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块.2410_SDI控制器:封装了命令和数据的移位操作,支持SDI_1.0规范.有FIFO和DMA模式.当操作某些寄存器时,控制器会自动帮我们转换成48位的命令包通过移位控制器发给SD从机.SD命令包格式----------------------------------------------------------------------------Bit 位置47 46 [45:40] [39:08] [07:01] 00Bit 宽度 1 1 6 32 7 1值 0 1 x x x 1说明Start Bit T ransmission Bit Command Index Argument CRC7 End Bit----------------------------------------------------------------------------在S3C2410中要发送CMD需要设置SDICARG,SDICCON两个寄存器.SDICARG: SDI 命令参数寄存器:SDICCON: SDI 命令控制寄存器:这两个寄存器合起来构成SD协议规范中的CMD命令.其中:SDICARG[31:0] ===================== CMD[39:8] 命令的参数(根据命令所需的参数位格式设置)SDICCON[7:0] ===================== CMD[47:40] 包含Start Bit,Transmission Bit,Command Index.ACMD命令:ACMD是特殊命令.虽然发送方法也是用SDICARG和SDICCON来发.但是,在发送特殊命令前,要先发送一条普通的不带参数的CMD55命令,表示下一条所发送的命令是特殊命令.例如:CMD52 SDICARG:----------------------------------------------------------------------------Bit 位置31 [30:28] 27 26 [25:9] 8 [7:0]Bit 宽度 1 3 1 1 17 1 8说明 R/W flag Function Number RAW flag Stuff Register Address Stuff Write Data or Stuff Bits ----------------------------------------------------------------------------SCR 该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的.CSD 该寄存器保存着SD卡的详细信息,如块大小,SD卡的容量大小,文件系统等信息.RCA SD的相对地址(SD卡已经保存在芯片内部)OCR 该寄存器保存着SD的可供电范围,并且区别是否为HC卡(根据返回的ORC回应第30位是否置1).CIA (Card I/O Area)CID SD卡的唯一ID号CIS (Card Information Structure)跟Linux内核的参数TagList的存放方式很相似,都是以标识号和长度加后续内容表示一个节点.SD模式的命令说明:CMD0 GO_IDLE_STATE Mandatory Mandatory Used to change from SD to SPI mode /* 使SD卡进入Idle状态 */CMD2 ALL_SEND_CID Mandatory CID not supported by SDIO /* 广播获取卡的CID信息 */CMD3 SEND_RELATIVE_ADDR Mandatory Mandatory /* 广播获取SD卡所分配的相对地址 */CMD4 SET_DSR Optional DSR not supported by SDIOCMD5 IO_SEND_OP_COND MandatoryCMD6 SWITCH_FUNC Mandatory1 Mandatory1 Added in Part 1 v1.10CMD7 SELECT/DESELECT_CARD Mandatory Mandatory /* 根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中,如果发送地址0,则表示取消选中全部卡 */CMD9 SEND_CSD Mandatory CSD not supported by SDIO /* 获取SD相关的存储信息,如块大小,容量等. */CMD10 SEND_CID Mandatory CID not supported by SDIOCMD12 STOP_TRANSMISSION Mandatory /* 停止多块传输操作 */CMD13 SEND_STATUS Mandatory Card Status includes only SDMEM information /* 获取卡的状态 */CMD15 GO_INACTIVE_STATE Mandatory MandatoryCMD16 SET_BLOCKLEN Mandatory /* 设置SD卡的块大小,CSD寄存器有描述. */CMD17 READ_SINGLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取单个块 */CMD18 READ_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取多个块,直到收到CMD12为止 */CMD24 WRITE_BLOCK Mandatory /* 使SD卡进入传输状态,写入单个块 */CMD25 WRITE_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,写入多个块 */CMD27 PROGRAM_CSD Mandatory CSD not supported by SDIOCMD28 SET_WRITE_PROT OptionalCMD29 CLR_WRITE_PROT OptionalCMD30 SEND_WRITE_PROT OptionalCMD32 ERASE_WR_BLK_START MandatoryCMD33 ERASE_WR_BLK_END MandatoryCMD38 ERASE MandatoryCMD42 LOCK_UNLOCK OptionalCMD52 IO_RW_DIRECT MandatoryCMD53 IO_RW_EXTENDED Mandatory Block mode is optionalCMD55 APP_CMD Mandatory /* 特殊指令前命令,在发送ACMD类指令前,需要发送此命令 */CMD56 GEN_CMD MandatoryACMD6 SET_BUS_WIDTH Mandatory /* 设置SD卡的总线位宽,这个需要读取SCR确定 */ACMD13 SD_STATUS MandatoryACMD22 SEND_NUM_WR_BLOCKS MandatoryACMD23 SET_WR_BLK_ERASE_COUNT MandatoryACMD41 SD_APP_OP_COND Mandatory /* 获取SD电压值 */ACMD42 SET_CLR_CARD_DETECT MandatoryACMD51 SEND_SCR Mandatory SCR not supported by SDIO /* 获取SD卡的SCR寄存器的值 */2410 SDI控制寄存器:SDICON 0x5A000000 R/W SDI control register /* 完成SD卡基础配置,包括大小端,中断允许,时钟使能和重启FIFO */SDIPRE 0x5A000004 R/W SDI baud rate prescaler register /* 对SD的时钟分频系数设置 */SDICARG 0x5A000008 R/W SDI command argument register /* 指令的参数存放在这里,不同的命令,参数的位数格式有不用含义 */SDICCON 0x5A00000C R/W SDI command control register /* 控制指令形式的寄存器,配置SPI还是SDI指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等 */SDICSTA 0x5A000010 R/(W) SDI command status register /* 指令状态寄存器,指令是否超时,传送,结束,CRC是否正确等 */SDIRSP0 0x5A000014 R SDI response register 0 /* SD回应状态寄存器,R1的回应都用这个,其他长回应会用到4个. */SDIRSP1 0x5A000018 R SDI response register 1SDIRSP2 0x5A00001C R SDI response register 2SDIRSP3 0x5A000020 R SDI response register 3SDIDTIMER 0x5A000024 R/W SDI data / busy timer register /* 设置超时时间 */SDIBSIZE 0x5A000028 R/W SDI block size register /* 设置Block的大小,FIFO共填充的数据.单位是字节*/SDIDCON 0x5A00002C R/W SDI data control register /* 数据控制寄存器,配置是几线传输,数据发送方向,数据传送方式,要传送多少个块的数据等 */SDIDCNT 0x5A000030 R SDI data remain counter register /* 数据保持计数器 */SDIDSTA 0x5A000034 R/(W) SDI data status register /* 数据状态寄存器,数据是否发送完,CRC效验,超时等 */ SDIFSTA 0x5A000038 R SDI FIFO status register /* FIFO状态寄存器,DMA传输时不用判断FIFO */ SDIDAT 0x5A00003C (Li/W,Li/B, Bi/W) 0x5A00003F(Bi/B) R/W SDI data register /* 数据传输寄存器,要严格读完所请求的数据块,否则遗留的数据位将影响下一次的数据传输 */SDIIMSK 0x5A000040 R/W SDI interrupt mask register /* 中断屏蔽 */SD/MMC 初始化流程步骤是:1)配置时钟,慢速一般为400K,设置工作模式2)发送CMD0,进入空闲态,该指令没有反馈3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单引号表示字符串,即'string'
后引号表示命令执行,即`command`
以上是用for /?命令获得的帮助信息,直接复制过来的。
晕惨了!我这就举个例子帮助大家来理解这些参数!
For命令例1:**************************************** @echo off
使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。语法是:
FOR /F ["options"] %%variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母表示可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
for /l %%i in (1,1,5) do start cmd
pause
复制代码执行后是不是吓了一跳,怎么多了5个CMD窗口,呵呵!如果把那个 (1,1,5)改成 (1,1,65535)会有什么结果,我先告诉大家,会打开65535个CMD窗口....这么多你不死机算你强!
当然我们也可以把那个start cmd改成md %%i 这样就会建立指定个目录了!!!名字为1-65535
pause
复制代码运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!
在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来 @echo off
for /d %%i in (???) do echo %%i
pause
复制代码这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了
FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
Pause
Del test.txt
复制代码运行显示结果:
11段 13段 14段 15段 16段
21段 23段 24段,25段,26段
带引号的字符串"options"包括一个或多个指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
看着这说明有点晕吧!咱们看例子就不晕了! @echo off
for /l %%i in (1,1,5) do @echo %%i
pause
复制代码保存执行看效果,他会打印从1 2 3 4 5 这样5个数字(1,1,5)这个参数也就是表示从1开始每次加1直到5终止!
等会晕,就打印个数字有P用...好的满足大家,看这个例子 @echo off
三、参数 /R
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。经测试,该参数最多只能区分31个字段。
rem 首先建立临时文件test.txt
echo ;注释行,这是临时文件,用完删除 >test.txt
echo 11段 12段 13段 14段 15段 16段 >>test.txt
echo 21段,22段,23段,24段,25段,26段 >>test.txt
echo 31段-32段-33段-34段-35段-36段 >>test.txt
For命令例3:****************************************
另外/F参数还可以以输出命令的结果看这个例子 @echo off
FOR /F "delims=" %%i in ('net user') do @echo %%i
pause
复制代码这样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个"delims=" 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!
递归
上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比/D强大多了!
他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!
请注意2点:
set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
pause
复制代码咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!
例: @echo off
for /r %%i in (*.exe) do @echo %%i
pause
复制代码参数不一样了吧!这个命令前面没加那个C:\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:\test目录下执行,那么他就会把D:\test目录和他下面的子目录的全部EXE文件列出来!!!
参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释
现在开始讲每个参数的意思
二、参数 /d
FOR /D %%variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。
例: @echo off
for /r c:\ %%i in (*.exe) do echo %%i
例: @echo off
for /r c:\ %%i in (boot.ini) do echo %%i
pause
复制代码运行本例发现枚举了c盘所有目录,为了只列举boot.ini存在的目录,可改成下面这样: @echo off
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
基本上讲完了FOR的基本用法了...如果你看过FOR的系统帮助,你会发现他下面还有一些特定义的变量,这些我先不讲.大家因该都累了吧!你不累我累啊....
所谓文武之道,一张一弛,现休息一下
文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。
详细的帮助格式为:
FOR /F ["options"] %%variable IN (file-set) DO command [command-parameters]
pause
复制代码用这条命令搜索文件真不错。。。。。。
这个参数大家应该理解了吧!还是满好玩的命令!
四、参数 /L
FOR /L %%variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。
单引号表示执行命令,即'command'
使用参数usebackq时:file-set和"file-set"都表示文件
当文件路径或名称中有空格时,就可以用双引号括起来
这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符
知道作用了,给大家个思考题目! @echo off
for /d %%i in (window?) do echo %%i
pause
复制代码保存到C盘下执行,会显示什么呢?自己看吧! 显示:windows
相关文档
最新文档