SD卡读写器制作Word文档格式.docx

上传人:聆听****声音 文档编号:1143518 上传时间:2023-04-30 格式:DOCX 页数:32 大小:590.94KB
下载 相关 举报
SD卡读写器制作Word文档格式.docx_第1页
第1页 / 共32页
SD卡读写器制作Word文档格式.docx_第2页
第2页 / 共32页
SD卡读写器制作Word文档格式.docx_第3页
第3页 / 共32页
SD卡读写器制作Word文档格式.docx_第4页
第4页 / 共32页
SD卡读写器制作Word文档格式.docx_第5页
第5页 / 共32页
SD卡读写器制作Word文档格式.docx_第6页
第6页 / 共32页
SD卡读写器制作Word文档格式.docx_第7页
第7页 / 共32页
SD卡读写器制作Word文档格式.docx_第8页
第8页 / 共32页
SD卡读写器制作Word文档格式.docx_第9页
第9页 / 共32页
SD卡读写器制作Word文档格式.docx_第10页
第10页 / 共32页
SD卡读写器制作Word文档格式.docx_第11页
第11页 / 共32页
SD卡读写器制作Word文档格式.docx_第12页
第12页 / 共32页
SD卡读写器制作Word文档格式.docx_第13页
第13页 / 共32页
SD卡读写器制作Word文档格式.docx_第14页
第14页 / 共32页
SD卡读写器制作Word文档格式.docx_第15页
第15页 / 共32页
SD卡读写器制作Word文档格式.docx_第16页
第16页 / 共32页
SD卡读写器制作Word文档格式.docx_第17页
第17页 / 共32页
SD卡读写器制作Word文档格式.docx_第18页
第18页 / 共32页
SD卡读写器制作Word文档格式.docx_第19页
第19页 / 共32页
SD卡读写器制作Word文档格式.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SD卡读写器制作Word文档格式.docx

《SD卡读写器制作Word文档格式.docx》由会员分享,可在线阅读,更多相关《SD卡读写器制作Word文档格式.docx(32页珍藏版)》请在冰点文库上搜索。

SD卡读写器制作Word文档格式.docx

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&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2