SD卡读写器制作Word文档格式.docx
- 文档编号:1143518
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:32
- 大小:590.94KB
SD卡读写器制作Word文档格式.docx
《SD卡读写器制作Word文档格式.docx》由会员分享,可在线阅读,更多相关《SD卡读写器制作Word文档格式.docx(32页珍藏版)》请在冰点文库上搜索。
SD读卡器就是读取sd存储卡的设备。
目前在市面上最常见的存储卡SDMemory(SD卡)。
该存储卡现在被广泛应用于数码相机、DV、MP4、MP3随身听、PDA掌上电脑、多媒体手机。
为了便于使存储卡所携带
资料能够被更多人使用,读卡器随之产生。
SD读卡器一般极其便于携带,大小就像一个优盘,插上SD卡后的读卡器跟优盘功能就一样了。
同样使用USB接口。
读卡器对计算机来说类似一个USB的软驱,作用也类似,只是读取的不是软盘,而是各种闪存卡。
使用时就把手中SD闪卡按照提示插入对应卡槽,再把另一头的USB头插入计算机USB插座,只有正确插入才有相应显示并能够读写卡中资料。
第30页共32页
2.方案论述
2.1SD卡工作原理
2.1.1SD卡内部结构及引脚如下图所示
图1SD卡内部结构及引脚
2.1.2SD卡指令数据包
sd卡的指令被封装成48位的数据包,每次传送这48位的数据包。
数据包的内容包括起始位(1bit)、传输位(1bit)、命令索引(6bit)、传输参数(32bit)、CRC校验码(7bit)和结束位(1bit)。
其具体格式分布如下表:
Bit位置
47
46
[45:
40]
[39:
08]
[07:
01]
00
Bit宽度
1
6
32
7
值
“0”
“1”
x
说明
Startbit
Transmission
bit
Command
index
Argument
CRC7
Endbit
表1 SD数据包
其中的命令索引位是[45:
40],里面可以封装各种命令,具体的命令表将在下面给出。
不同的命令会对应不同的回应(respond),回应有三种(R1,R2,R3)格式,在附录1SD卡命令表中的选项会给出。
2.1.3SD卡主要引脚和功能为:
lCLK:
时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz的频率;
lCMD:
双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;
回复是对之前命令的回答,回复可以来自单卡或所有卡;
lDAT0~3:
数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SD卡命令 的格式如表1所示,其中相关参数可以查阅SD卡规范。
2.1.3SD卡接口电路
3.芯片选择
3.1S3C2440的简介
S3C2440A微处理器是一款由Samsung半导体公司推出的高性能、低功耗、高集成度并具有
工业级温度范围和性能的微处理器,经过工业级EMC测试,相对S3C2440A有以下优势:
l具有工业级温度范围
l主频高达533MHz03-具有数字摄像头接口
l更低的内核电压
l支持更多分辨率液晶屏
l支持多种电压存储器
l具有AC97编解码器接口
l具有更多可用的I/O口
lUART口输入输出各具有64字节FIFO
l无需外围电路的触摸屏接口
3.2硬件资源
l程序处理器:
Samsung的S3C2440A-40(ARM920T)微处理器,工作频率最高可达533MHz
l内存:
2片4Banks×
4Mbits×
16bitsSDRAM,共64MB;
可扩展至128MB
lNandflash:
256M×
8bitsNandflash(K9F2G08
lNorflash:
4MB.支持容量128M或更高
l时钟:
12MHz系统外部时钟源;
32.768KHz的RTC时钟源
l电源:
支持3.3V或5V电压(设计可选)供电
3.3物理特性
l六层板工艺,经过长期强电磁环境考验,性能稳定
l长70mm,宽50mm,独特的双列贴装使得底版布线更加容易
l两条100PIN的连接器,另有一条16PIN,总计216pin,引出了所有可用接口
3.4核心板展示
图2S3C2440芯片
4.总体框图
键盘输入
JTAG
SD卡接口
S3C2440A
LCD输出
5.硬件设计
本次课程设计利用S3C2440核心板制作SD卡读写器,用键盘输入,LCD显示屏做输出,并用PC机进行手动调试,实现此次系统能够正常运行,达到预想到的效果。
用串行总线将PC机和实验板相连接,然后按照预期的步骤,进行操作。
具体链接方式看附录3和4.
6.软件设计
6.1SD卡驱动具体实现
首先需要完成的是定义(在嵌入式设备驱动开发中非常重要)的头文件。
(1)S3C2440中自带有SD卡控制器,所以必须在程序中将这部分的头文件包含进来:
#include"
2440addr.h"
#include"
2440lib.h"
(2)确定设备名称、主/次设备号和中断号,确保将一个本系统中没有使用的主设备号分配给SD卡驱动。
主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。
在编写设备驱动程序的时候,需要指明所操作设备的主设备号和次设备号。
本例采用了SD驱动主设备号:
234(由于只有一个SD卡设备,故次设备号:
0)。
6.2源程序代码
见附录2
6.3读SD卡流程图
开始
应答=0XFE
结束
返回
接收2字节CRC
接收512B数据
发送写命令CMD17
Sd卡初始化
6.4写SD卡流程图
超时错误
&
0X1F=5?
接收SD卡响应
发送2字节CRC码
发送512B数据
发送数据起始标志
发送命令cmd24
SD卡初始化
Y
N
总结
这次课程设计我们做的是基于S3C2440的SD卡读写设计,通过这次设计我们实现了对SD卡的读写等基本操作。
在这次实验中我们遇到了很多困难比如PCB图的绘制,基本上我们都没有掌握于是我们齐心协力查阅资料经过多次失败后终于成功绘制了PCB图。
在做设计之前我们分配了明确的任务,查阅资料编写程序内容排版紧而有序,各种发挥了各种的特长又弥补了自己的不足,可谓受益匪浅。
总的来说,这次课程设计完成的效果还是很不错的,在获得成就感的同时我们学得了知识加强了同学之间的友谊。
很期望在今后的课程设计中我们还希望能互相学习共同提高。
参考文献
[1]李宏佳,徐晓晓,魏权利.基于ARM和SD卡的嵌入式文件系统研究与设计『J].电子设计应用.
[2]纪竞舟,付字卓.嵌入式Linux下的MMC/SD卡的原理及实现i[J].计算机仿真,2005
(1).
[3]张秀松,施金鸿.基于AT91RM9200的嵌入式工业控制系统设计l·
微计算机信息,2006(12):
45-47.
[4]周杰英,陈曼娜,王涛,等·
微机原理与接口技术开放性实验建设lJJ.实验室研究与探索.2007(9):
33等.37.
[5]李长有等.基于C8051F020的SD卡主控制器的设计[J].微计算机信息,2007,23(9-2):
120-122.
[6]周立功等.ARM嵌入式系统实验教程[M].北京:
北京航空航天大学出版社,2005.1.
[7]唐清善.ProtelDXP高级实例教程[M].中国水利水电出版社,2004.4.
[8]罗浩等.一种新的基于ARM的数据采集系统设计[J].信阳师范学院学报(自然科学版),
2006.4.
[9]秦伟等基于ARM处理器的数据采集系统的设计[J].自动化技术与应用.2006年第1期.
[10]杜春雷.ARM体系结构与编程.清华大学出版社,2003.
[11]李宁.ARM开发工具ReaIViewMDK使用入门[M].北京航空航天大学出版社,2008.
[12]李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社,2008.
[14]赵葵银,王辉,吴俊.电压空间矢量控制的三相PWM整流器的研究[J].上海第二
附录
SD卡命令表
CMD
简略语
指令说明
SPI模式
自变量
回应
GO_IDLE_STATE
这是使card初始化到
Idle状态的指令.CS信号设在Low的状态时,接到本指令后,card将转换到SPI模式.
None
R1
SEND_OP_COND
接到本指令后,card将做
R3回应(含有OCR数据)
.根据OCR值,可以得知
card能工作电压范围.
OCR数据最高值位的
1bit是用来确认card内部处理是否结束
(Ready/Busy轮询).
2
ALL_SEND_CID
接到本指令后,处于
Ready状态的card将传送CID数据.在MMC模式下,数据被送到CMD信号,在CID数据的每
1bit传送后,CMD信号状态将与该card内部状态相比较,如果不一致,將中止数据传送,card返回到Ready状态.如果相一致,该card将认为已被选中,然后转换到
Identification状态.
3
SET_RELATIVE_ADDR
本指令会为已转换到
Identification状态的card
分配一个相对card地址
(RCA).当RCA分配后,
card将转换到Stand-by
状态,对以后的CMD2和
CMD3不回应.
4
NOP
这是用来设定
DSR(DriveState寄存器)
的指令,但是本car不支
持DSR.
SELECT/DESELECT_CARD
本指令是用来选择一张
card,让它在Stand-by状态和Transfer状态之间转换的指令.如果给card设定已分配到的RCA地址,card将从Stand-by状态转换到Transfer状态,并将回应以后的读取指令及其他指令.如果给
card设定RCA以外的地址,card将转换到Stand-
by状态。
当RCA=0000h
时,card将无条件地转换到Stand-by状态.
9
SEND_CSD
接到本指令后,将传送
CSD数据.
10
SEND_CID
CID数据.
11
READ_DAT_UNTIL_STOP
接到本指令后,将从设定的地址传送P2ROM数据,直到接到指令
CMD12为止.
12
STOP_TRANSMISSION
本指令强行终止
CMD11和CMD18的处
理
13
SEND_STATUS
接到本指令后, 将传送
状态寄存器的信息.
R2
15
GO_INACTIVE_STATE
接到本指令后,将转换
到休止(inactive)状态.
16
SET_BLOCKLEN
本指令用来设定Block
长度.对象是以后的指令CMD17和CMD18.
31:
00]
blocklength
17
READ_SINGLE_BLOCK
接到本指令后,将从自变量设定的地址传送1个block 长度的数据.
(block长度由指令
CMD16设定).
[31:
dataaddress
18
READ_MULTIPLE
_BLOCK
接到本指令后,将从自变量设定的地址连续传送block长度的数据,直到接到指令CMD12为止.(block长度由指令
23
SET_BLOCK_COUNT
本指令是给紧跟的指令
CMD18设定要传送的
block数量.
16]setto0[15:
00]nu
mber
ofblock
24
WRITE_BLOCK
接到本指令后,将写1个
block长度的数据到自变量设定的地址.(block长度由指令CMD16设定).
0]
25
WRITE_MULTIPLE_
接到本指令后,将连续
BLOCK
写block长度的数据到自
data
变量设定的地址,直到
address
接到指令CMD12为止.
(block长度由指令
CMD16设定).
58
READ_OCR
接到本指令后,Card将
传送OCR数据.
R3
59
CRC_ON_OFF
本指令是用来设定
CRC 选项为ON或
stuffbits
OFF.在SPI模式下,
[00:
CRC的初始值设定为
CRC
OFF.[CRC选项[bit=1]
option
表示CRCON;
[CRC选
项[bit=0]表示CRC
OFF.
源代码清单
#include<
stdio.h>
#include<
string.h>
option.h"
#defineMAGIC_NUMBER64
#defineINICLK 300000
#defineSDCLK 24000000
#definePOL0
#defineINT1
#defineDMA2intCMD13(void);
intCMD9(void);
unsignedint*Tx_buffer;
unsignedint*Rx_buffer;
volatileunsignedintrd_cnt;
volatileunsignedintwt_cnt;
volatileunsignedintblock;
volatileunsignedintTR_end=0intWide=0;
intMMC=0;
int Maker_ID;
charProduct_Name[7];
int Serial_Num;
intPCLK=50000000;
volatileintRCA;
voidTest_SDI(void)
{
U32save_rGPEUP,save_rGPECON;
RCA=0;
MMC=0;
block=3072;
save_rGPEUP=GPEUP;
save_rGPECON=GPECON;
GPEUP =0xf83f;
GPECON=0xaaaaaaaa;
if(!
SD_card_init())
return;
TR_Buf_new();
Wt_Block();
Rd_Block();
View_Rx_buf();
Card_sel_desel(0);
CMD9())
SDIDCON=0;
//tark?
?
SDICSTA=0xffff;
GPEUP=save_rGPEUP;
GPECON=save_rGPECON;
}
voidTR_Buf_new(void)
inti,j;
Tx_buffer=(unsignedint*)0x31000000;
j=0;
for(i=0;
i<
2048;
i++)
*(Tx_buffer+i)=i+j;
Flush_Rx_buf();
voidFlush_Rx_buf(void)
inti;
Rx_buffer=(unsignedint*)0x31800000;
for(i=0;
i++) *(Rx_buffer+i)=0;
voidView_Rx_buf()
i++) //128[word]*16[blk]=8192[byte]
*(Rx_buffer+i)=0;
inti,error=0;
Rx_buffer=(unsignedint*)0x31800000;
128*block;
if(Rx_buffer[i]!
=Tx_buffer[i])
error=1;
break;
if(!
error)
Printf("
\nTheTx_bufferissametoRx_buffer!
\n"
);
Printf("
SDCARDWriteandReadtestisOK!
voidView_Tx_buf(void)
intSD_card_init(void)
SDIPRE=PCLK/(INICLK)-1;
//400KHz
//Uart_Printf("
Init.Frequencyis%dHz\n"
(PCLK/(SDIPRE+1)));
SDICON=(1<
<
4)|1;
//TypeB,clkenable
SDIFSTA=SDIFSTA|(1<
16);
//YH040223FIFOreset
SDIBSIZE=0x200;
//512byte(128word)SDIDTIMER=0x7fffff;
//Settimeoutcountfor(i=0;
0x1000;
i++);
//Wait74SDCLKforMMCcardCMD0();
Inidle\n"
//--CheckSDcardOCRif(!
Chk_SD_OCR())
GPBDAT=(~(2<
5));
//点亮LED2
Initializefail\nNoCardassertion\n"
return0;
GPBDAT=(~(1<
//点亮LED1
do
//--Checkattacedcards,itmakescardidentificationstateSDICARG=0x0;
//CMD2(stuffbit)
SDICCON=(0x1<
10)|(0x1<
9)|(0x1<
8)|(MAGIC_NUMBER
|2);
//lng_resp,wait_resp,start,CMD2
//--CheckendofCMD2
}while(!
Chk_CMDend(2,1));
SDICSTA=0xa00;
//Clearcmd_end(withrsp)
Endid\n"
do
SDICARG=MMC<
16;
//CMD3(MMC:
SetRCA,SD:
AskRCA-->
SBZ)
8)|(MAGIC_NUMBER|3);
//
sht_resp,wait_resp,start,CMD3if(!
Chk_CMDend(3,1))
continue;
SDICSTA=0xa00;
//Clearcmd_end(withrsp)
//--PublishRCA
RCA=(SDIRSP0&
0xffff0000)>
>
RCA=0x%x\n"
RCA);
SDIPRE=PCLK/(SDCLK)-1;
//Normalclock=25MHz
SDFrequencyis%dHz\n"
//--State(stand-by)check
if(SDIRSP0&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SD 读写 制作