SD卡编程指南
SD卡设计基础指南
SD卡设计基础指南
目录
1、概述 (3)
2、SD卡硬件设计规范指导 (3)
2.1 SD卡接口总线分类 (3)
2.1.1 SD总线拓扑 (4)
2.1.2 SPI总线拓扑 (4)
2.2 SD卡接口定义 (5)
2.3 SD卡工作原理以及总线协议 (7)
2.4 SD卡典型应用电路图 (8)
2.7 SD卡PCB布局与走线规范 (10)
3、SD卡规格总览 (13)
3.1 SD卡种类 (13)
3.2总线速 (13)
3.3 智能型SDIO(iSDIO,无线局域网络SD) (15)
4、SD卡的测试 (16)
5、参考文献 (16)
1、概述
SD卡全名:Secure Digital Memory Card,它是由日本松下、东芝及美国SanDisk 公司于1999年8月共同开发研制,具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD存储卡是特别为符合新出现的音频和视频消费电子设备的安全性、容量、性能和环境要求而设计的一种存储卡,它有比较高的数据传送速度,而且不断更新标准。SD卡系统是一个新的大容量存储系统,基于半导体技术的变革。它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。SD卡可以设计出便宜的播放器和驱动器而没有可移动的部分。一个低耗电和广供电电压的可以满足移动电话、电池应用比如音乐播放器、个人管理器、掌上电脑、电子书、电子百科全书、电子词典等等。它使用非常有效的数据压缩比如MPEG,SD 卡可以提供足够的容量来应付多媒体数据。
SD卡在24mm*32mm*2.1mm的体积内结合了快闪记忆卡控制与MLC技术和东芝的NAND技术,通过9针的接口与专门的驱动器相连接,不需要额外的电源来保持其上的记忆信息。
SD卡FAT32文件系统学习手册
SD卡FAT32文件系统学习手册
一一般硬盘数据结构是按下面来建立的。
二首先看看启动区的内容,也就是第一个扇区。
使用软件:WinHex
有用的内容用彩色线标志下:
(1)灰色线内容:EB 59 90 跳转指令;
(2)灰色点线内容:4D 53 44 4F 53 35 2E 30 为厂商标志和os 版本号,这里是MSDOS5.0;
(3)红色部分:00 20 (偏移地址0BH,长度2)注意这里数据的布局,高地址放高字节,低地址放低字节(数据为小端格式组织),所以数据应该是0200,就是512,表示的意思是,该磁盘每个
扇区有512个字节,有的可能是1024、2048、4096;
(4)黄色部分:08 (偏移地址0DH,长度1)表示的意思是每个簇有8个扇区,这个值不能为0,而且必须是2的整数次方,比如1、2、4、8、16、32、64、128,但是这个值不能使每个簇超过32KB 字节;
(5)蓝色部分:24 00 (偏移地址0EH,长度2),转换一下,就是00 24,意思是保留区域中的保留扇区数为36个,那么就可以知道下面的FAT1区的开始的地址就是:0x24*200(每个扇区的字节数)=0x4800;
(6)粉色部分:02 (偏移地址10H,长度1) ,此卷中的FAT结构的份数为2,另外一个是备份的。
(7)黑色部分:C6 03 (偏移地址24H,长度2)转换一下,03C6,每个FAT占用的扇区数。那么每个扇区占用的字节数就是0x03c6*200=78C00。根据启动区、FAT1、FAT2、根目录、数据区的次序,可以依次计算出它们的地址了。
sd卡 crc 计算 c语言
sd卡crc 计算c语言
全文共四篇示例,供读者参考
第一篇示例:
SD卡在现代的生活中扮演着非常重要的角色,它是一种被广泛使用的存储设备,可以存储大量的数据,比如照片、视频、音乐等。在
使用SD卡的过程中,我们经常会遇到一些问题,比如数据损坏、文件无法访问等。其中一个常见的问题就是CRC校验错误,这个错误会导致数据无法正确读取,从而产生一系列问题。
CRC(Cyclic Redundancy Check)校验是一种常用的错误校验方法,它通过对数据进行计算得到一个校验值,然后将这个校验值附加
在数据中。接收方在接收到数据后,也会对数据进行CRC校验,如果计算得到的校验值与接收到的校验值不一致,就说明数据出现了错误。在SD卡中,CRC校验被广泛应用,以确保数据的完整性和正确性。
在本文中,我们将介绍如何在C语言中计算SD卡CRC校验,以及如何应用CRC校验来检测和修复数据错误。
我们来看一下CRC校验算法的原理。CRC校验实际上是通过对数据进行除法运算得到一个余数,这个余数就是CRC校验值。具体的计算方法可以通过以下伪代码表示:
1. 初始化CRC校验值为0xFFFF(16位CRC校验值,可以根据实际情况选择不同位数的CRC校验值)
2. 逐个字节处理数据,对每个字节进行以下操作:
- 将当前字节与CRC校验值进行异或操作
- 循环8次,对当前字节的每一位进行操作:
- 如果当前位为1,执行CRC校验多项式的异或操作
- 否则,不进行任何操作
3. 处理完所有数据后,将得到的CRC校验值与0xFFFF进行异或操作,得到最终的CRC校验值
SDMMC卡初始化及读写流程分解
二、MMC/SD卡的模型和工作原理PIN脚、SD卡总线、SD卡结构、SD卡寄存器、上电过程SD卡寄存器:
OCR:操作电压寄存器: 只读,32位第31位:表示卡上电的状态位
CID: 卡身份识别寄存器只读128位生产厂商、产品ID,生产日期和串号等
CSD:部分可写128位卡的容量、擦出扇区大小、读写最大数据块的大小、读操作的电流、电压等等 CSR: 卡配置寄存器64位数据位宽
RCA:16位相关的卡地址寄存器,卡识别过程中主控器和卡协商出来的一个地址
三、SD卡命令和响应格式命令和相应格式SD卡命令,命令类型,ACMD命令响应类型、卡类型、卡状态转换表命令的格式:48位起始位0 方向位(host to card: 1, card to host: 0)内容CRC7 结束位1·响应的格式:48位或者136位
卡命令:命令的类型:
bc: broadcast without Response 无响应的广播
bcr: broadcast with Response 有响应的广播
ac: Address(point-to-point) Command: 点对点,DATA0~DATA3数据线上无数据
adtc: Adress(point-to-point) Data Transfer Commands 点对点,DATA0~DATA3数据线上有数据
CMD0, CMD2, CMD3, CMD55, ACMD41 命令可能会导致卡的状态发生变化
响应类型:R1,R1b, R2, R3,R6(SD2.0扩展了R7)
扩展内容:
SD卡设计基础指南
SD卡设计基础指南
SD卡设计基础指南
⽬录
1、概述 (3)
2、SD卡硬件设计规范指导 (3)
2.1 SD卡接⼝总线分类 (3)
2.1.1 SD总线拓扑 (4)
2.1.2 SPI总线拓扑 (4)
2.2 SD卡接⼝定义 (5)
2.3 SD卡⼯作原理以及总线协议 (7)
2.4 SD卡典型应⽤电路图 (8)
2.7 SD卡PCB布局与⾛线规范 (10)
3、SD卡规格总览 (13)
3.1 SD卡种类 (13)
3.2总线速 (13)
3.3 智能型SDIO(iSDIO,⽆线局域⽹络SD) (15)
4、SD卡的测试 (16)
5、参考⽂献 (16)
1、概述
SD卡全名:Secure Digital Memory Card,它是由⽇本松下、东芝及美国SanDisk 公司于1999年8⽉共同开发研制,具有⾼记忆容量、快速数据传输率、极⼤的移动灵活性以及很好的安全性。SD存储卡是特别为符合新出现的⾳频和视频消费电⼦设备的安全性、容量、性能和环境要求⽽设计的⼀种存储卡,它有⽐较⾼的数据传送速度,⽽且不断更新标准。SD卡系统是⼀个新的⼤容量存储系统,基于半导体技术的变⾰。它的出现,提供了⼀个便宜的、结实的卡⽚式的存储媒介,为了消费多媒体应⽤。SD卡可以设计出便宜的播放器和驱动器⽽没有可移动的部分。⼀个低耗电和⼴供电电压的可以满⾜移动电话、电池应⽤⽐如⾳乐播放器、个⼈管理器、掌上电脑、电⼦书、电⼦百科全书、电⼦词典等等。它使⽤⾮常有效的数据压缩⽐如MPEG,SD 卡可以提供⾜够的容量来应付多媒体数据。
SD卡在24mm*32mm*2.1mm的体积内结合了快闪记忆卡控制与MLC技术和东芝的NAND技术,通过9针的接⼝与专门的驱动器相连接,不需要额外的电源来保持其上的记忆信息。
SD卡手册
SD卡(Secure Digital Card):基于FLASH存储单元的卡,它是专为安全性高、容量大、高性能目的设计的。
SD框图如图1-1所示:
图1-1
SD卡不但有大容量存储单元,还集成有智能控制器来实现接口协议管理、安全性能、版权保护盒ECC校验等。
特点:
高达2GB容量、SD卡协议兼容、SPI模式控制、版权保护、密码保护
SD卡通讯方式:
SD 6线通讯(clk、cmd、D0—3)数据出错保护传送单块、多块数据传送
SPI 3线串行总线(clk、DI、DO)可选的非数据保护传送单块、多块数据传送
读写次数性能:
SD卡数据读次数:不受限(无限次)每扇区写:100,000次
SD Mode:
SD模式下多卡的识别:SD卡模式是单主机多从机模式,clk和power线共用;识别过程如下:主机分别使能各个卡自己的cmd线,各个卡的CID寄存器是事先编程好的,它是一个用在卡识别过程中唯一数字,主机能使用READ_CID命令读取CID寄存器的值,主机只能读而不能写。
内部上拉的DA T3脚可以用来进行卡插入的侦测,在数据传输过程中可以将上拉电阻断开(使用ACMD42)。
Card Status:存储在一个32bit的寄存器中,它被当做命令应答的数据区来发送,它包含卡当前的状态及上一个命令的完成代码,可以通过SEND_STA TUS命令读取。
SD_Status:存储在512bit的寄存器中,当发送命令SD_STA TUS(ACMD13)时它被当做一块数据块来发送。
存储空间阵列分区如图1-2所示:
数据传输的基本单元式byte
单片机读写SD卡教程
单片机读写SD卡教程
引言:
SD卡(Secure Digital Card)是广泛应用于各类数字设备上的一种存储介质。它小巧轻便,可靠性高,容量大,因此在各种嵌入式系统中都广泛使用。本教程将介绍如何使用单片机读写SD卡,包括初始化SD卡、读写数据等基本操作。
一、硬件准备
在开始之前,我们需要准备以下硬件设备:
1.一个支持SPI协议的单片机开发板(例如STC89C51、STM32等);
2.一个SD卡插槽,或者是一个带有SD卡插槽的扩展板;
3.杜邦线、面包板等连接器。
二、软件准备
除了硬件设备,我们还需要准备以下软件工具:
1. Keil C51、IAR、Keil MDK等单片机编译工具;
2. SD卡相关的库文件,例如FatFs;
3.一个用于测试的程序(可以是一个简单的读写数据的程序)。
三、连接SD卡插槽
将SD卡插入到对应的插槽中,并将插槽与单片机的硬件SPI接口连接。根据不同的开发板,连接方式可能有所不同,一般SPI接口包括SCK
(时钟线)、MOSI(主机输出从机输入线)、MISO(主机输入从机输出线)和CS(片选线)等。
四、编写读写SD卡的程序
在开始编写程序之前,我们需要先了解SD卡的工作原理。SD卡通过SPI总线与单片机进行通信,通过发送特定的命令和参数实现读写操作。
以下是一个简单的读写SD卡的流程:
1.初始化SD卡
a.发送CMD0命令,将SD卡设置为SPI模式;
b.发送CMD8命令,验证SD卡是否支持高速SPI模式;
c.发送ACMD41命令,等待SD卡初始化完成。
2.读写数据
a.发送CMD17命令,指定要读取的扇区地址;
SD卡底层驱动程序(c语言)sdcard
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************* File Name : sdcard.h* Author : MCD Application Team* Version : V2.0.1* Date : 06/13/2008* Description : This file contains all the functions prototypes for the* SD Card driver firmware library.********************************************************************************* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.*******************************************************************************//* Define to prevent recursive inclusion -------------------------------------*/#ifndef __SDCARD_H#define __SDCARD_H/* Includes ------------------------------------------------------------------*/#include "stm32f10x_lib.h"/* Exported types ------------------------------------------------------------*/typedef enum{/* SDIO specific error defines */SD_CMD_CRC_FAIL = (1), /* Command response received (but CRC check failed) */SD_DATA_CRC_FAIL = (2), /* Data bock sent/received (CRC check Failed) */SD_CMD_RSP_TIMEOUT = (3), /* Command response timeout */SD_DATA_TIMEOUT = (4), /* Data time out */SD_TX_UNDERRUN = (5), /* Transmit FIFO under-run */SD_RX_OVERRUN = (6), /* Receive FIFO over-run */SD_START_BIT_ERR = (7), /* Start bit not detected on all data signals in widE bus mode */SD_CMD_OUT_OF_RANGE = (8), /* CMD's argument was out of range.*/SD_ADDR_MISALIGNED = (9), /* Misaligned address */SD_BLOCK_LEN_ERR = (10), /* Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */SD_ERASE_SEQ_ERR = (11), /* An error in the sequence of erase command occurs.*/SD_BAD_ERASE_PARAM = (12), /* An Invalid selection for erase groups */SD_WRITE_PROT_VIOLATION = (13), /* Attempt to program a write protect block */SD_LOCK_UNLOCK_FAILED = (14), /* Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */SD_COM_CRC_FAILED = (15), /* CRC check of the previous command failed */SD_ILLEGAL_CMD = (16), /* Command is not legal for the card state */SD_CARD_ECC_FAILED = (17), /* Card internal ECC was applied but f
[整理]SD卡程序设计、流程及操作系统.
对SD卡进行操作首先要对SD卡进行初始化,初始化的过程中设置SD卡工作在SPI模式,其流程图如图3所示。
在复位成功之后可以通过CMD55和ACMD41判断当前电压是否在工作范围内。主机还可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。SD卡初始化的C语言程序如下:
unsigned char SD_Init(void)
{ unsigned char retry,temp;
unsigned char i;
for (i=0;i<0x0f;i++)
{ SPI_TransferByte(0xff); //延迟74个以上的时钟
}
SD_Enable(); //开片选
SPI_TransferByte(SD_RESET); //发送复位命令
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);
SPI_TransferByte(0x95);
SPI_TransferByte(0xff);
SPI_TransferByte(0xff);
retry=0;
do{ temp="Write"_Command_SD(SD_INIT,0);
//发送初始化命令
retry++;
if(retry==100) //重试100次
{SD_Disable(); //关片选
return(INIT_CMD1_ERROR);
SD卡资料编写
SD卡资料整理
1、概述
SD卡高度集成闪存,具备串行和随机存取能力。可以通过专用优化速度的串行接口访问,数据传输可靠。接口允许几个卡垛叠,通过他们的外部连接。接口完全符合最新的消费者标准,叫做SD卡系统标准,由SD卡系统规范定义。
SD卡系统是一个新的大容量存储系统,基于半导体技术的变革。它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。SD卡可以设计出便宜的播放器和驱动器而没有可移动的部分。一个低耗电和广供电电压的可以满足移动电话、电池应用比如音乐播放器、个人管理器、掌上电脑、电子书、电子百科全书、电子词典等等。使用非常有效的数据压缩比如MPEG,SD卡可以提供足够的容量来应付多媒体数据。
安全数字存储卡(Secure Digital Memory Card,SDC)作为事实上的标准存储卡广泛应用于移动设备上。SDC 曾作为高层兼容多媒体卡(Multi Media Card,MMC)进行开发。SDC设备一般也兼容MMC。还存在一些功能相同但尺寸更小的版本,如RS-MMC、miniSD和microSD。MMC/SDC 内置一个微控制器,在卡内部执行flash 存储操作(擦写、读取、写入、错误控制和功耗平衡(Wearleveling))。数据以512 字节为单位在存储卡与主机控制器之间传输,从高层看来,卡可以被看作是通用硬盘设备。当前定义的用于存储卡的文件系
统为FAT12/16 并使用FDISK 分区规则。FAT32 仅用于大容量卡(>=4G)。
SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。本小节仅简要介绍SPI模式。
SD卡驱动编写流程
SD卡驱动编写流程
现在对SD卡驱动编写做个总结,以及本人在调试中遇到的问题。先介绍一下SD卡规格,其全称Secure Digital Memory Card简写SD,是以Flash Memory为基础的存储卡,自带控制器。所以编写的驱动是针对控制器接口的,不是针对Flash Memory的。
SD卡支持三种驱动模式,见下图!
外观图和PIN定义看下图:
分别为SPI模式和SD BUS模式,不同的模式,注意相同编号的PIN意义不一样!
下面以SD1bit mode为例子介绍怎么驱动SD卡。SD卡是以命令驱动的,所以应先了解命令的基本格式,见下图!
其中需要用到CRC7
下面的图是用示波器实际采集到的CMD6发送时的波形
图例说明:
深蓝为CLK信号
浅蓝为CMD信号
红色CMD开始
黄色CMD结束
结合上面的图很容易理解命令发送格式
CRC7码可以用下面函数计算
另外还会用到CRC16码,在发送数据和接收数据时需要用到,可以用查表方法,那样速度最快SD卡命令实际使用到的命令有32条,其中基本命令25条,用户应用命令7条。
下面表中详细介绍了每条命令的功能
下面的图表为用户命令:
要运行用户命令需要先发送基本命令CMD55。每次运行都需要先发送CMD55
其中R1,R2,R3,R6为返回数据格式
SD卡内部寄存器介绍:
R2,R3,R6,能返回寄存器状态或使用CMD9.CMD10读寄存器内容
下面的截图为发送CMD24后,SD卡回复的数据信息
图例说明:
深蓝为CLK信号
浅蓝为CMD信号
红色CMD开始
黄色CMD结束
紫色为DATA0
LK系列PLC产品SD卡功能使用说明书
1
录
2
3
4
5
6 7
概述 .................................................................................................................................................... 1 1.1 功能介绍................................................................................................................................. 1 1.1.1 适用人员 ..................................................................................................................... 1 1.1.2 如何使用本手册 ......................................................................................................... 1 1.2 术语与缩略语......................................................................................................................... 1 SD 卡运行环境与软件安装 .............................................................................................................. 1 2.1 运行环境................................................................................................................................. 1 2.1.1 硬件环境 ..................................................................................................................... 1 2.1.2 软件环境 ..................................................................................................................... 2 2.2 SD 卡管理器软件安装........................................................................................................... 2 使用管理器操作 SD 卡 ..................................................................................................................... 2 3.1 运行 SD 卡管理器.................................................................................................................. 2 3.2 功能概述................................................................................................................................. 2 3.3 显示信息................................................................................................................................. 3 3.3.1 控制器信息 ................................................................................................................. 3 3.3.2 SD 卡信息:............................................................................................................... 3 3.4 操作 SD 卡.............................................................................................................................. 4 3.4.1 备份工程到 SD 卡...................................................................................................... 4 3.4.2 从 SD 卡载入工程...................................................................................................... 4 3.4.3 格式化 SD 卡.............................................................................................................. 5 3.4.4 安全移除 SD 卡.......................................................................................................... 6 旋转钥匙开关操作 SD 卡 ................................................................................................................. 7 4.1 功能概述................................................................................................................................. 7 4.2 向控制器载入 SD 卡工程...................................................................................................... 7 常见问题处理..................................................................................................................................... 8 5.1 控制器连接失败..................................................................................................................... 8 5.2 操作无效报警......................................................................................................................... 8 5.3 SD 卡空间已满提示............................................................................................................... 8 5.4 SD 卡误插拔操作................................................................................................................... 8 5.4.1 不安全拔出 SD 卡...................................................................................................... 8 5.4.2 访问 SD 卡时非法拔出 .............................................................................................. 8 注意事项............................................................................................................................................. 9 SD 卡的维护 ...................................................................................................................................... 9
sd卡模块产品使用手册及单片机程序
--------------------------------------*/
#include "STC12C5A60S2.h"
#define uchar unsigned char
#define uint unsigned int
uchar dat=0;
/*--------------------------------------
void txd_c(uchar x)
{
S2BUF = x;
}
/*--------------------------------------
发送接收中断函数
--------------------------------------*/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 ){
/*-------------------------------------芯片 :STC12C5A60S2 晶振 :11.0592MHZ 开发平台:KEIL
功能 :串口二收发 8 位数据。(采用中断方式,波特率发生器产生波特率)
波特率 :9600BPS
日期 :11.5.19
注意 :下载完程序后请复位系统!!(切记!)
SD 卡模块
简要说明:
一、尺寸:全长 45mm 宽 32mm 高 12mm 二、主芯片:SD 卡 三、工作电压:5V 四、特点:
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线来完成.
SD卡读写操作详细说明
51单片机实现对SD卡的读写
SD卡SPI模式下与单片机的连接图:
22.
23.//获得16位的回应
24. Read_Byte_SD(); //read the first byte,ignore it.
25.do
26. { //读取后8位
27. tmp = Read_Byte_SD();
28. retry++;
29. }
30.while((tmp==0xff)&&(retry<100));
31.return(tmp);
32.}
2)初始化
SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。在初始化成功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,这是必须的。在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式
初始化时序图:
初始化例程:
1.//-------------------------------------------------------------------------
-
2.初始化SD卡到SPI模式
3.//-------------------------------------------------------------------------
-
4.unsigned char SD_Init()
5.{
6.unsigned char retry,temp;
7.unsigned char i;
SD卡驱动参数的配置与编译(完全)(Linux)
14.1 SD概述
2.SD总线的访问状态 SD总线的访问状态有3种。 1)COMMOND:启动操作的会话,由Host从CMD连线传送到卡类设备。 2)Response:响应CMD的会话,由卡类设备CMD连线传送至Host。 3)Data:在Host与卡设备间传送数据的双向数据流,物理链路为 Data0~Data3。
14.2 SD卡驱动参数的配置
步骤5. 修改flash分区 [root@localhost linux-2.6.24.4]# cd drivers/mtd/maps/ [root@localhost maps]# cp cfi_flagadm.c s3c2410.c [root@localhost maps]# vi s3c2410.c 将FLASH_PHYS_ADDR和FLASH_SIZE这两个宏分别修改 成自己板子的flash起始地址和大小。然后修改结构体数组 flagadm_parts添加自己的分区信息,修改以后如下: #define FLASH_PHYS_ADDR 0x01000000 #define FLASH_SIZE 0x01600000 struct map_info flagadm_map = { .name = "NOR flash on S3C2410", .size = FLASH_SIZE, .bankwidth = 2, };
14.2 SD卡驱动参数的配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SD卡编程指南
——如何使用MMC/SDC
2011-11-05 苏勇
安全数字存储卡(Secure Digital Memory Card,SDC)作为事实上的标准存储卡广泛应用
于移动设备上。SDC曾作为高层兼容多媒体卡(Multi Media Card,MMC)进行开发。SDC
设备一般也兼容MMC。还存在一些功能相同但尺寸更小的版本,如RS-MMC、miniSD和
microSD。MMC/SDC内置一个微控制器,
读取、写入、错误控制和功耗平衡
(Wearleveling))。数据以512字节为单
位在存储卡与主机控制器之间传输,从
高层看来,卡可以被看作是通用硬盘设
备。当前定义的用于存储卡的文件系统
为FAT12/16并使用FDISK分区规则。
FAT32仅用于大容量卡(>=4G)。本文讲
述作者在小型嵌入式系统中使用
MMC/SDC中的基本知识和一些琐碎的
内容。作者相信,这些信息对于即将在
电子硬件工程中使用MMC/SDC的人会
有一些帮助。
1. 引脚
下图展示了SDC/MMC的外观,MMC有7个引脚,SDC有9个引脚。其中三个引脚为
电源引脚,故负责通信的引脚MMC有4个,SDC有6个。主机与卡之间的通信是通过同步
串行接口实现的。
工作电源电压范围是有工作状况寄存器(Operation Conditions Register,OCR)指示的,
应读该寄存器并确定工作电压范围。无论怎样,电源应固定在3.0/3.3V,因为所有的MMC/SDC
的电源至少是在2.7~3.6V的范围内。在执行写入操作时,电流消耗能达到几十毫安,因此,
主机系统应至少保证能够为卡提供100mA的电流供应。
2. 命令与应答
在SPI模式下,信号线上的数据方向是确定的,数据按字节以串行方式传输。从主机传向卡的命令帧是定长(6个字节)数据包,如下图所示。当一个命令帧被传送到卡上,命令的应答(R1,R2或R3)从卡上反馈回主机。由于数据传输是有主机产生的串行时钟驱动的,主机需在读到有效的应答之前保持读取状态以提供时钟,DI信号线上在读通信过程中保持高电平(发送0xFF交换数据)。应答应在命令响应时间内(NCR)反馈回来,对于SDC为0到8个字节,对于MMC为1到8个字节。,CS信号线上的电平需在发送命令帧之前被拉低,并在通信过程中(发送命令,接收应答及读写数据)保持低电平。在SPI模式下,CRC校验功能是可选的,但是CRC字段始终要填充内容以构成一个完整的命令帧。
2.1 常用的SPI模式命令
(1)命令由6个字节组成:01+6位命令号+4个字节的命令参数+7位校验码+结束位1。
(2)命令分为10个类:
SPI支持:
类0——基本控制(0复位、1激活初始化、9读CSD寄存器、10读CID寄存器、12多块过程中停止传输、13读状态寄存器);
类2——块读(16设置块长度、17读一个数据块、18读多个数据块,直到发命令12);
类4——块写(24写块、25写多个块、27写CSD的可编程为);
类5——擦除(32设置擦除块的起始地址、33设置终止块地址、38擦除先前选择的所有块);
块6——写保护(可选28设置写保护、29清除写保护、30读写保护状态);
类7——锁卡命令(可选42上锁或者解锁);
类8——指定应用(55通知SD卡下个是特殊应用命令、56获取或写入一个数据块);
类10与类11——保留。
其中,SPI模式不支持类1,类3,类9。
2.2 SPI命令的响应状态
有三种命令应答的格式,R1(1个字节)、R2(两个字节)和R3 R3(五个字节),因发送命令而不同。大部分命令的响应是R1,R1的位段如下图所示,值为0x00表示运行成功,否则由相应状态位置1标识错误。读取状态寄存器响应R2,只有读取32位的OCR(命令58)使用应答R3。
一些命令的执行时间比NCR长,它们使用应答R1B(1个字节)。R1B同R1类似(有些命令只需要0或非0反馈,就用R1B,比如停止传输、擦除等命令),即为R1跟在忙标志后(在内部执行命令时DO保持低电平)。主控制器应等待命令执行完毕直到DO转为高电平
3. SPI模式下的初始化过程
上电复位之后,MMC/SDC进入原生工作模式(SD模式)。若要进入SPI模式,须如下图所示执行过程。
3.1 上电(插卡)
卡供电达到2.2V以上后,还需等待至少1毫秒才能接收命令。设定主机控制器的SPI 时钟频率在100kHz到400kHz之间。设定DI和CS为高电平,同时发送至少74个时钟脉冲到SCLK上。此时,卡将进入原生工作模式(SD模式)并准备接收原生命令。
3.2 软件复位
在CS为低电平时发送命令0,对卡进行复位。卡在接收命令0成功时对CS信号采样,若CS信号为电平,则卡进入SPI模式并且回应R1进入空闲状态(R1=0x01)。由于命令0必须作为原生命令发送,CRC字段必须包含有效值。卡一旦进入SPI模式,CRC功能就被关闭,不再进行CRC校验。命令0和命令8需要CRC校验时,可将该字段写0。命令59可以启动CRC功能。
3.3 初始化
在空闲状态,卡只接收命令0、命令1、命令41、命令58和命令59。其它的命令被拒绝执行。此时,读OCR寄存器并查看卡的工作电压。若系统供电不在卡的正常供电范围,则卡不工作。注意,所有的卡工作电压范围为2.7~3.6V。当接收到命令1时,卡执行初始化过程。若要检测初始化过程是否结束,主机需持续发送命令1并查看回应直到初始化结束。当卡成功完成初始化,应答R1的空闲状态位将清零(R1由0x01变为0x00)。初始化过程将持续几百毫秒(卡容量越大,时间越长),故而需要考虑超时时间的设定。在空闲状态位被清零后,卡可以接收正常的读写命令。
对于SDC建议时候用命令41(ACMD41)取代命令1,若命令41被拒绝后在用命令1尝试,在理想情况下,所有的卡都支持这两个命令。
若要提高对卡的读写性能,可将SPI通信速率尽量提高。CSD寄存器中的TRAN_SPEED 字段指示了卡支持的最大工作频率。大多数情况下,MMC最大工作频率为20MHz,SDC最大工作频率为25MHz。注意,在SPI模式下时钟需要确定为20/25MHz,因为没有开环条件限制时钟频率。
对于2GB容量的卡,初始读写块长度为1024,这就需要使用命令16将读写块长度重新设定为512以适应FAT文件系统的工作要求。
3.4 支持SDC v2和高容量的卡
卡通过命令0进入空闲状态后,以0x000001AA为参数发送命令8并发送正确的CRC,之后进入初始化进程。若命令8被拒绝并回应非法命令错误(0x05),则表示此卡可能为SDC v1或是MMC。若命令8被接收,并回应R7(R1(0x01)后跟着32位数据),返回值的低12位为0x1AA,则表示此卡为SDC v2,工作电压范围为2.7~3.6V。否则,此卡将拒绝访问,此时,可使用以HCS(位30)为参数发送命令41(ACMD41)进行初始化。完成初始化后,读OCR寄存器并检查CCS(位30),若该位置1,则下文说明的子序列数据读取操作中将使用块地址而不是字节地址。块地址固定为512字节。
4. 数据传输
4.1 数据包与数据回应
在数据通信过程中,命令回应后将会有一个或多个数据块被发送/接收。数据块以数据包发送。数据包包含令牌(Token)、数据块(Data Block)和CRC校验码,数据包格式如下图所示。停止传输令牌(Stop Tran Token)表示写入多个块的结束,以单个字节使用而无需数据块和CRC字段。