SD卡接口的完整规范Word文件下载.docx
《SD卡接口的完整规范Word文件下载.docx》由会员分享,可在线阅读,更多相关《SD卡接口的完整规范Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
◎PIP封装技术
◎尺寸:
24mm宽×
32mm长×
1.44mm厚
说明:
本SD卡高度集成闪存,具备串行和随机存取能力。
可以通过专用优化速度的串行接口访问,数据传输可靠。
接口允许几个卡垛叠,通过他们的外部连接。
接口完全符合最新的消费者标准,叫做SD卡系统标准,由SD卡系统规范定义。
SD卡系统是一个新的大容量存储系统,基于半导体技术的变革。
它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。
SD卡可以设计出便宜的播放器和驱动器而没有可移动的部分。
一个低耗电和广供电电压的可以满足移动电话、电池应用比如音乐播放器、个人管理器、掌上电脑、电子书、电子百科全书、电子词典等等。
使用非常有效的数据压缩比如MPEG,SD卡可以提供足够的容量来应付多媒体数据。
框图:
SD卡上所有单元由内部时钟发生器提供时钟。
接口驱动单元同步外部时钟的DAT和CMD信号到内部所用时钟。
本卡由6线SD卡接口控制,包括:
CMD,CLK,DAT0-DAT3。
在多SD卡垛叠中为了标识SD卡,一个卡标识寄存器(CID)和一个相应地址寄存器(RCA)预先准备好。
一个附加的寄存器包括不同类型操作参数。
这个寄存器叫做CSD。
使用SD卡线访问存储器还是寄存器的通信由SD卡标准定义。
卡有自己的电源开通检测单元。
无需附加的主复位信号来在电源开启后安装卡。
它防短路,在带电插入或移出卡时。
无需外部编程电压。
编程电压卡内生成。
SD卡支持第二接口工作模式SPI。
如果接到复位命令(CMD0)时,CS信号有效(低电平),SPI模式启用。
(译者按:
以下部分为本人翻译)
接口
该SD卡的接口可以支持两种操作模式:
。
SD卡模式
SPI模式
主机系统可以选择以上其中任一模式,SD卡模式允许4线的高速数据传输。
SPI模式允许简单通用的SPI通道接口,这种模式相对于SD模式的不足之处是丧失了速度。
SD卡模式针脚定义
针脚
名称
类型
描述
1
CDDAT3
I/O/PP
卡监测数据位3
2
CMD
PP
命令/回复
3
Vss
S
地
4
Vcc
供电电压
5
CLK
I
时钟
6
Css2
7
DAT0
数据位0
8
DAT1
数据位1
9
DAT2
数据位2
1:
S:
电源供电,I:
输入O:
输出I/O:
双向PP:
I/O使用推挽驱动
SD卡的总线概念
SD总线允许强大的1线到4线数据信号设置。
当默认的上电后,SD卡使用DAT0。
初始化之后,主机可以改变线宽(译者按:
即改为2根线,3根线。
)。
混和的SD卡连接方式也适合于主机。
在混和连接中Vcc,Vss和CLK的信号连接可以通用。
但是,命令,回复,和数据(DAT0~3)这几根线,各个SD卡必须从主机分开。
这个特性使得硬件和系统上交替使用。
SD总线上通信的命令和数据比特流从一个起始位开始,以停止位中止。
CLK:
每个时钟周期传输一个命令或数据位。
频率可在0~25MHz之间变化。
SD卡的总线管理器可以不受任何限制的自由产生0~25MHz的频率。
CMD:
命令从该CMD线上串行传输。
一个命令是一次主机到从卡操作的开始。
命令可以以单机寻址(寻址命令)或呼叫所有卡(广播命令)方式发送。
回复从该CMD线上串行传输。
一个命令是对之前命令的回答。
回复可以来自单机或所有卡。
DAT0~3:
数据可以从卡传向主机或副versa。
数据通过数据线传输。
SD卡总线拓扑
SPI模式针脚定义
CS
片选(负有效)
DI
数据输入
Vss2
DO
O
数据输出
RSV
--
注意:
SPI模式时,这些信号需要在主机端用10~100K欧的电阻上拉。
SPI总线概念
SPI总线允许通过2通道(数据入和出)传输比特数据。
SPI兼容模式使得MMC主机系统通过很小的改动就可以使用SD卡。
SPI模式使用字节传输。
所有的数据被融合到一些字节中并alignedtotheCSsignal(可能是:
同过CS信号来校正)。
SPI模式的优点就是简化主机的设计。
特别的,MMC主机需要小的改动。
SPI模式相对于SD模式的不足之处是丧失了速度性能。
SD卡的电特性
SD卡的连接电路图
直流特性
完全最大值评估
最大值评估指即使在瞬间也不能超出限制电压。
当你在归定的最大值评估范围内使用该产品,不会出现永久性损坏。
但是这并不能保证正常的逻辑操作。
SD卡接口的完整规范
(二)
faceoff发表于2006-8-1120:
12:
00
AVR的SD卡接口程序2007-04-2816:
04SD卡接口程序/************************************************************/
/*SDCodeforM32L*/
/*Bypasyong*/
/*2006-4*/
/*BaseICC6.31A*/
/************************************************************/
#include<
iom32v.h>
macros.h>
#include"
1011.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineMMC_CS_PINBIT(4)//PORTB.4
#defineMMC_PORTPORTB
ucharreading=0,a=0,pointer=0;
voidsd_port_init()
{
MMC_PORT=MMC_CS_PIN;
}
ucharBUFFER[512];
//扇区缓冲区
uinti=0;
voiddelay_nus(uintn)
unsignedcharb;
for(b=1;
b<
n;
b++)
;
}
//****************************************************************************
//SendaCommandtoMMC/SD-Card
//Return:
thesecondbyteofresponseregisterofMMC/SD-Card
ucharSD_Write_Command(ucharcmd,unsignedlongarg)
uchartmp;
ucharretry=0;
//MMC_PORT=MMC_CS_PIN;
//SD卡关闭
//send8ClockImpulse
Write_Byte_SPI(0xFF);
//setMMC_Chip_Selecttolow(MMC/SD-Cardactive)
MMC_PORT&
=~MMC_CS_PIN;
//SD卡使能
Write_Byte_SPI(cmd0x40);
//送头命令
Write_Byte_SPI(arg>
>
24);
16);
//send6ByteCommandtoMMC/SD-Card
8);
Write_Byte_SPI(arg&
0xff);
Write_Byte_SPI(0x95);
//仅仅对RESET有效的CRC效验码
//get8bitresponse
//Read_Byte_MMC();
//readthefirstbyte,ignoreit.
do
{//Onlylast8bitisusedhere.Readitout.
tmp=Read_Byte_SPI();
retry++;
}
while((tmp==0xff)&
&
(retry<
100));
//当没有收到有效的命令的时候
if(reading==0)
MMC_PORT=MMC_CS_PIN;
//MMC_CS_PIN=1;
elseMMC_PORT&
//MMC_CS_PIN=0;
return(tmp);
//SD卡初始化(SPI-MODE)
ucharSD_Init(void)
{
ucharretry,temp;
uchari;
delay_nus(250);
//WaitMMC/SDready...
for(i=0;
i<
0x0f;
i++)
{
Write_Byte_SPI(0xff);
//send74clockatleast!
!
//SendCommandCMD0toMMC/SDCard
retry=0;
do
{//retry200timestosendCMD0command
temp=SD_Write_Command(0,0);
if(retry==100)
{
//CMD0Error!
}
while(temp!
=1);
//SendCommandCMD1toMMC/SD-Card
{//retry100timestosendCMD1command
temp=SD_Write_Command(1,0);
=0);
SD_Write_Command(16,512);
//设置一次读写BLOCK的长度为512个字节
//setMMC_Chip_Selecttohigh
return(0);
//Allcommandshavebeentaken.
//从SD卡读一个扇区Return0ifnoError.
ucharSD_Read_Block(unsignedlongaddress)
uchartemp=0;
reading=1;
temp=SD_Write_Command(17,address);
//读出RESPONSE
while(Read_Byte_SPI()!
=0xfe)
{;
}//直到读取到了数据的开始头0XFE,才继续
for(i=0;
i<
512;
i++)
BUFFER[i]=Read_Byte_SPI();
Read_Byte_SPI();
//CRC-Byte
//CRC-Byte
reading=0;
//关闭SD卡
return(temp);