欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    SD卡读写器制作.docx

    • 资源ID:4924773       资源大小:522.46KB        全文页数:28页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    SD卡读写器制作.docx

    摘要随着嵌入式处理器计算机能力的不断提高,32位MPU已成为嵌入式系统应 用的主流。在ARM9嵌入式处理器和mC/OS-II操作系统基础上采用SD卡设计开 发了一种嵌入式文件系统,该系统具有支持多操作系统、易于移植和存储速度快 的特点。本文在三星ARM9-S3C2440上实现了 MMC /SD卡的硬件扩展,设计了此 硬件平台上的MMC /SD卡在L inux下的驱动,并给出了相应的关键代码。关键词:嵌入式Linux; MMC /SD卡;Linux设备驱动;S3C2440目录1, 概述31.1 SD卡简介31.2系统研究背景32, 方案论述42.1 SD卡工作原理42.1.1 SD卡内部结构及引脚如下图所示42.1.2 SD卡指令数据包42.1.3 SD卡接口电路53, 芯片选择63.1 S3C2440 的简介63.2硬件资源63.3物理特性63.4核心板展示74, 总体框图76.1源程序代码96.2读SD卡流程图106.3写SD卡流程图11总结12参考文献13附录1: SD卡命令表14附录2:源代码清单16附录3:原理图28附录4: PCB图311.概述1.1 SD卡简介 SD卡是基于flash的存储卡。SD卡和MMC卡的区别在于初始化过程不同。 SD卡的通信协议包括SD和SPI两类。 SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、 ECC 算法、缺陷处理和分析、电源管理、时钟管理 SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境 等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式 和SPI模式。1.2系统研究背景本设计旨在深入对ARM的学习,巩固大学四年所学专业知识,提升动手能力和思考问 题解决问题的能力。本设计选择S3C2440系列处理器,通过自制S3C2440开发板的过程, 和对S3C2440芯片的研究学习,掌握其各种外设功能。SD读卡器就是读取sd存储卡的设 备。目前在市面上最常见的存储卡SD Memory(SD卡)。该存储卡现在被广泛应用于数码 相机、DV、MP4、MP3随身听、PDA掌上电脑、多媒体手机。为了便于使存储卡所携带资 料能够被更多人使用,读卡器随之产生。SD读卡器一般极其便于携带,大小就像一个优盘, 插上SD卡后的读卡器跟优盘功能就一样了。同样使用USB接口。读卡器对计算机来说类 似一个USB的软驱,作用也类似,只是读取的不是软盘,而是各种闪存卡。使用时就把手 中SD闪卡按照提示插入对应卡槽,再把另一头的USB头插入计算机USB插座,只有正确 插入才有相应显示并能够读写卡中资料。2. 方案论述2.1 SD卡工作原理2.1.1 SD卡内部结构及引脚如下图所示Card interface controlter resetcocgwn & a若 dMsEory oore interfaceDAT2CMDCLKDATOCD/DAT3Interface driverDAT1图1 SD卡内部结构及引脚2.1.2 SD卡指令数据包sd卡的指令被封装成48位的数据包,每次传送这48位的数据包。数据包的内容包括 起始位(1bit)、传输位(1bit)、命令索引(6bit)、传输参数(32bit)、CRC校验码(7bit) 和结束位(1bit)。其具体格式分布如下表:Bit位置474645:4039:0807:0100Bit宽度1163271值“0”“1”xxx“1”说明Start bitTransmission bitCommand indexArgumentCRC7End bit表1 SD数据包其中的命令索引位是45: 40,里面可以封装各种命令,具体的命令表将在下面给出。 不同的命令会对应不同的回应(respond),回应有三种(R1,R2,R3)格式,在附录1 SD卡命 令表中的选项会给出。2.1.3 SD卡主要引脚和功能为: CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在025MHz之间变化, SD卡的总线管理器可以不受任何限制的自由产生025MHz的频率; CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到 单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有 卡; DAT03:数据线,数据可以从卡传向主机也可以从主机传向卡。SD卡以命令形式来 控制SD卡的读写等操作。可根据命令对多块或单块进行读写操作。在SPI模式下其命 令由6个字节构成,其中高位在前。SD卡命令的格式如表1所示,其中相关参数可以 查阅SD卡规范。2.1.3 SD卡接口电路|UDD33 OR121CKR15 10K(GPG10)(GPHS) SDDATA2< SDDATA3 SDCMD、SDCLK、SDDATAO、SDWITA1、EINT1S、UCLKVDD33 O-R13 10KCZ2R41 47R42 47Rlfi10KR1S 1CKR17 10KVC65 lOwPiev10H124 yR14 10KDAT2_DAT3-!CSCMDTflVSS1VDDCLK'SCKVSS2DATO-DODATLTRQ CARDJNSERT GMDCARD WPSDCAKDEl 1.1 SD卡接口电路3. 芯片选择3.1 S3C2440 的简介S3C2440A微处理器是一款由Samsung半导体公司推出的高性能、低功耗、高集成度并具有 工业级温度范围和性能的微处理器,经过工业级EMC测试,相对S3C2440A有以下优势: 具有工业级温度范围 主频高达533MHz03-具有数字摄像头接口 更低的内核电压 支持更多分辨率液晶屏 支持多种电压存储器 具有AC97编解码器接口 具有更多可用的I/O 口 UART 口输入输出各具有64字节FIFO 无需外围电路的触摸屏接口3.2硬件资源 程序处理器:Samsung的S3C2440A-40(ARM920T)微处理器,工作频率最高可达533MHz 内存:2 片 4BanksX4MbitsX16bits SDRAM,共 64MB;可扩展至 128MB Nandflash: 256MX8bits Nandflash (K9F2G08 Norflash: 4MB,支持容量128M或更高 时钟:12MHz系统外部时钟源;32.768KHz的RTC时钟源 电源:支持3.3V或5V电压(设计可选)供电3.3物理特性 六层板工艺,经过长期强电磁环境考验,性能稳定 长70mm,宽50mm,独特的双列贴装使得底版布线更加容易 两条100PIN的连接器,另有一条16PIN,总计216pin,引出了所有可用接口3.4核心板展示图2 S3C2440芯片4. 总体框图LCD输出/ SD卡接口键盘输入5. 硬件设计本次课程设计利用S3C2440核心板制作SD卡读写器,用键盘输入,LCD显示屏做输 出,并用PC机进行手动调试,实现此次系统能够正常运行,达到预想到的效果。用串行总 线将PC机和实验板相连接,然后按照预期的步骤,进行操作。具体链接方式看附录3和4.6. 软件设计6.1 SD卡驱动具体实现首先需要完成的是定义(在嵌入式设备驱动开发中非常重要)的头文件。(1) S3C2440中自带有SD卡控制器,所以必须在程序中将这部分的头文件包含进来:#include "2440addr.h"#include "2440lib.h"(2)确定设备名称、主/次设备号和中断号,确保将一个本系统中没有使用的主设备号分配 给SD卡驱动。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设 备。在编写设备驱动程序的时候,需要指明所操作设备的主设备号和次设备号。本例采用了 SD驱动主设备号:234(由于只有一个SD卡设备,故次设备号:0)。6.2源程序代码见附录2开始Sd卡初始化发送写命令 CMD17应答=0XFE接收512B数据接收2字节CRC结束返回发送512B数据发送2字节CRC码接收SD卡响应总结这次课程设计我们做的是基于S3C2440的SD卡读写设计,通过这次设计我们实现了对 SD卡的读写等基本操作。在这次实验中我们遇到了很多困难比如PCB图的绘制,基本上我 们都没有掌握于是我们齐心协力查阅资料经过多次失败后终于成功绘制了 PCB图。在做设 计之前我们分配了明确的任务,查阅资料编写程序内容排版紧而有序,各种发挥了各种的 特长又弥补了自己的不足,可谓受益匪浅。总的来说,这次课程设计完成的效果还是很不错 的,在获得成就感的同时我们学得了知识加强了同学之间的友谊。很期望在今后的课程设计 中我们还希望能互相学习共同提高。参考文献I 李宏佳,徐晓晓,魏权利.基于ARM和SD卡的嵌入式文件系统研究与设计J.电子 设计应用. 纪竞舟,付字卓.嵌入式Linux下的MMC / SD卡的原理及实现iJ.计算机仿真,2005(1).3 张秀松,施金鸿.基于AT91RM9200的嵌入式工业控制系统设计l 微计算机信息, 2006(12): 45-47.4 周杰英,陈曼娜,王涛,等微机原理与接口技术开放性实验建设l J J.实验室研究与探 索.2007(9): 33 等.37.5 李长有等.基于C8051F020的SD卡主控制器的设计J.微计算机信 息,2007,23(9-2):120-122.6 周立功等.ARM嵌入式系统实验教程M.北京:北京航空航天大学出版社,2005.1.7 唐清善.Protel DXP高级实例教程M.中国水利水电出版社,2004.4.8 罗浩等.一种新的基于ARM的数据采集系统设计J.信阳师范学院学报(自然科学版),2006.4.9 秦伟等基于ARM处理器的数据采集系统的设计J.自动化技术与应用.2006年第1期.10 杜春雷.ARM体系结构与编程.清华大学出版社,2003.II 李宁.ARM开发工具ReaIView MDK使用入门M.北京航空航天大学出版社,2008.12李宁.基于MDK的STM32处理器开发应用M.北京航空航天大学出版社,2008.14赵葵银,王辉,吴俊.电压空间矢量控制的三相PWM整流器的研究J.上海第二附录附录1: SD卡命令表CMD简略语指令说明SPI模式自变量回应0GO_IDLE_STATE这是使card初始化到 Idle状态的指令.CS信号 设在Low的状态时,接到 本指令后,card将转换 至0SPI模式.NoneR11SEND_OP_COND接到本指令后,card将做 R3回应(含有OCR数 据).根据OCR值,可以得 知口 card能工作电压范 围.OCR数据最高值位 的1 bit是用来确认card 内部处理是否结束 (Ready/Busy 轮询).NoneR12ALL_SEND_CID接到本指令后,处于 Ready状态的card将传 送CID数据.在MMC模 式下,数据被送到CMD 信号,在C ID数据的每 1bit传送后,CM D信号状 态将与该card内部状态 相比较,如果不一致,将 中止数据传送,card返回 到Ready状态.如果相一 致,该card将认为已被 选中,然后转换到 Identification 状态.3SET_RELATIVE_ADDR本指令会为已转换到 Identification 状态的 card 分配一个相对card地址 (RCA).当RCA分配 后,card将转换到 Stand-by状态,对以后 的CMD2和C MD3不回 应.4NOP这是用来设定DSR(DriveState 寄 存器)的指令,但是本car不支 持DSR.7SELECT/DESELECT_CARD本指令是用来选择一张 card,让它在 Stand-by状 态和 Transfer状之 间 转换的指令.如果给card 设定已分配到的RCA地 址,card】 从 Stand-by 状 态转换到Transfer状态, 并将回应以后的读取指 令及其他指令.如果给 card设定RCA以外的地 址,card将转换到 Stand-by状 态。当 RCA=0000h 时,card 将无 条件地转换到Stand-by 状态.9SEND_CSD接到本指令后,将传送 CSD数据.NoneR110SEND_CID接到本指令后,将传送 CID数据.NoneR111READ_DAT_UNTIL_STOP接到本指令后,将从设 定的地址传送P2ROM 数据,直到接到指令 CMD12为止.12STOP -TRANSMISSION本指令强行终止C MD11和C MD18的处理NoneR113SEND_STATUS接到本指令后,将传送 状态寄存器的信息.NoneR215GO_INACTIVE _STATE接到本指令后,将转换 到休止(inactive)状态.16SET_BLOCKLEN本指令用来设定Block 长度.对象是以后的指 令 CMD17 和 CMD18.31:00 block lengthR117READ_SINGLE _BLOCK接到本指令后,将从自 变量设定的地址传送1 个block长度的数 据.(block长度由指令 CMD16 设定).31:00 data addressR118READ_MULTIPLE _BLOCK接到本指令后,将从自 变量设定的地址连续传 送block长度的数据,直 到接到指令CMD12为 止.(block长度由指令31:00 data addressR1CMD16 设定).23SET_BLOCK _COUNT本指令是给紧跟的指令 CMD18设定要传送的 block数量.31:16set to 015:00nu mber of blockR124WRITE_BLOCK接到本指令后,将写1个 block长度的数据到自 变量设定的地址.(block 长度由指令CMD16设 定).31:0 data addressR125WRITE_MULTIPLE_BLOCK接到本指令后,将连续 写block长度的数据到自 变量设定的地址,直到 接到指令CMD12为 止.(block长度由指令 CMD16 设定).31:0 data addressR158READ_OCR接到本指令后,Card将 传送OCR数据.NoneR359CRC_ON_OFF本指令是用来设定CRC 选项为ON或OFF.在 SPI模式下,CRC的初始 值设定为OFF.CRC选 项bit=1表示 CRC ON;CRC 选项bit=0表 示 CRC OFF.31:01 stuff bits 00:00 CRC optionR1附录2:源代码清单#include <stdio.h>#include <string.h>#include "option.h" #include "2440addr.h"#include "2440lib.h"#define MAGIC_NUMBER 64#define INICLK 300000#define SDCLK 24000000#define POL 0#define INT 1#define DMA 2 int CMD13(void);int CMD9(void);unsigned int *Tx_buffer;unsigned int *Rx_buffer;volatile unsigned int rd_cnt;volatile unsigned int wt_cnt;volatile unsigned int block;volatile unsigned int TR_end=0 int Wide=0;int MMC=0;int Maker_ID;char Product_Name7;int Serial_Num;int PCLK = 50000000;volatile int RCA;void Test_SDI(void)(U32 save_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);if(!CMD9()SDIDCON=0;/tark?SDICSTA=0xffff;GPEUP=save_rGPEUP;GPECON=save_rGPECON;void TR_Buf_new(void)(int i, j;Tx_buffer=(unsigned int *)0x31000000;j=0;for(i=0;i<2048;i+)*(Tx_buffer+i)=i+j;Flush_Rx_buf();void Flush_Rx_buf(void)(int i;Rx_buffer=(unsigned int *)0x31800000;for(i=0;i<2048;i+)*(Rx_buffer+i)=0;void View_Rx_buf()(int i;Rx_buffer=(unsigned int *)0x31800000;for(i=0;i<2048;i+) /128word*16blk=8192byte *(Rx_buffer+i)=0;void View_Rx_buf()(int i,error=0;Tx_buffer=(unsigned int *)0x31000000;Rx_buffer=(unsigned int *)0x31800000; for(i=0;i<128*block;i+) ( if(Rx_bufferi != Tx_bufferi) ( error=1; break; if(!error) (Printf("nThe Tx_buffer is same to Rx_buffer!n"); Printf("SD CARD Write and Read test is OK!n");void View_Tx_buf(void)(int SD_card_init(void)(int i;SDIPRE=PCLK/(INICLK)-1; / 400KHz/Uart_Printf("Init. Frequency is %dHzn”,(PCLK/(SDIPRE+1);SDICON=(1<<4)|1; / Type B, clk enableSDIFSTA=SDIFSTA|(1<<16); /YH 040223 FIFO reset SDIBSIZE=0x200; / 512byte(128word) SDIDTIMER=0x7fffff; / Set timeout count for(i=0;i<0x1000;i+); / Wait 74SDCLK for MMC card CMD0();/Uart_Printf("In idlen"); /- Check SD card OCR if(!Chk_SD_OCR() (GPBDAT = (2<<5);/点亮 LED2/Uart_Printf("Initialize failnNo Card assertionn"); return 0;GPBDAT = (1<<5);/点亮 LED1do (/- Check attaced cards, it makes card identification state SDICARG = 0x0; / CMD2(stuff bit)SDICCON = (0x1 << 10) | (0x1 << 9) | (0x1 << 8) | (MAGIC_NUMBER | 2); /lng_resp, wait_resp, start, CMD2/- Check end of CMD2 while (!Chk_CMDend(2, 1); SDICSTA=0xa00; / Clear cmd_end(with rsp) /Uart_Printf("End idn"); do (SDICARG = MMC << 16; / CMD3(MMC:Set RCA, SD:Ask RCA->SBZ) SDICCON= (0x1 << 9) | (0x1 << 8) | (MAGIC_NUMBER | 3); / sht_resp, wait_resp, start, CMD3if (!Chk_CMDend(3, 1) continue;SDICSTA = 0xa00; / Clear cmd_end(with rsp)/-Publish RCARCA = (SDIRSP0 & 0xffff0000) >> 16;/Uart_Printf("RCA=0x%xn”,RCA);SDIPRE = PCLK / (SDCLK) - 1; / Normal clock=25MHz /Uart_Printf("SD Frequency is %dHzn",(PCLK/(SDIPRE+1);/-State(stand-by) check if (SDIRSP0 & 0x1e00 != 0x600) / CURRENT_STATE check continue; while (0);/Uart_Printf("In stand-byn");Card_sel_desel(1);Set_4bit_bus();return 1;void Card_sel_desel(char sel_desel)(if(sel_desel)(do(SDICARG = RCA << 16; / CMD7(RCA,stuff bit)SDICCOI= (0x1 << 9) | (0x1 << 8) | (MAGIC_NUMBER | 7); / sht_resp, wait_resp, start, CMD7if (!Chk_CMDend(7, 1) continue;SDICSTA = 0xa00; / Clear cmd_end(with rsp) if (SDIRSP0 & 0x1e00 != 0x800) continue; while (0);else(do(SDICARG = 0 << 16; /CMD7(RCA,stuff bit)SDICCON= (0x1 << 8) | (MAGIC_NUMBER | 7); /no_resp, start, CMD7 /- Check end of CMD7 if (!Chk_CMDend(7, 0) continue; while (0);SDICSTA=0x800; / Clear cmd_end(no rsp)void Rd_Block(void)(U32 mode;int status;rd_cnt=0;mode = 0 ;SDIFSTA=SDIFSTA|(1<<16); / FIFO reset if(mode!=2)SDIDCON=(2<<22)|(1<<19)|(1<<17)|(Wide<<16)|(1<<14)|(2<<12)|(block<<0);RERDCMD:switch(mode)( case POL: if(block<2)(SDICCON=(0x1<<9)|(0x1<<8)|(MAGIC_NUMBER| 17); dat, start, CMD17 if(!Chk_CMDend(17, 1) /- Check end of CMD17 goto RERDCMD;else(SDICCON=(0x1<<9)|(0x1<<8)|(MAGIC_NUMBER |18);if(!Chk_CMDend(18, 1) goto RERDCMD;SDICSTA=0xa00;while(rd_cnt<128*block) / 512*block bytes ( if(SDIDSTA&0x20)=0x20) / Check timeout ( SDIDSTA=(0x1<<0x5); / Clear timeout flag break;status=SDIFSTA;if(status&0x1000)=0x1000) / Is Rx data? ( *Rx_buffer+=SDIDAT; rd_cnt+; break; default:break;if(!Chk_DATend()SDIDCON=SDIDCON&(7<<12);SDIFSTA=SDIFSTA&0x200; /Clear Rx FIFO Last data Ready, YH 040221 SDIDSTA=0x10; if(block>1) ( RERCMD12:SDICARG=0x0;SDICCON=(0x1<<9)|(0x1<<8)|(MAGIC_NUMBER | 12); if(!Chk_CMDend(12, 1) goto RERCMD12;SDICSTA=0xa00;void Wt_Block(void) (U32 mode;int status;wt_cnt=0;mode = 0 ;SDIFSTA=SDIFSTA|(1<<16); /YH 040223 FIFO reset if(mode!=2)SDIDCON=(2<<22)|(1<<20)|(1<<17)|(Wide<<16)|(1<<14)|(3<<12)|(block<<0); default: break;if(!Chk_DATend()/Uart_Printf("dat errorn");SDIDCON=SDIDCON&(7<<12); /YH 040220, Clear Data Transfer mode => no operation, Cleata Data Transfer startSDIDSTA=0x10; / Clear data Tx/Rx endif(block>1) ( REWCMD12:SDIDCON=(1<<18)|(1<<17)|(0<<16)|(1<<14)|(1<<12)|(block<<0);SDICARG=0x0;/CMD12(stuff bit)SDICCON=(0x1<<9)|(0x1<<8)|(MAGIC_NUMBER | 12); /sht_resp, wait_resp, start, CMD12/- Check end of CMD12if(!Chk_CMDend(12, 1) goto REWCMD12;SDICSTA=0xa00; / Clear cmd_end(with rsp)/- Check end of DATA(with busy state)if(!Chk_BUSYend()/Uart_Printf("errorn");SDIDSTA=0x08; /! Should be cleared by writing '1'. void Delay(volatile unsigned long dly)(for(; dly > 0; dly-); int Chk_CMDend(int cmd, int be_resp)/0: Timeout(int finish。;if(!be_resp) / No response(finish0=SDICSTA;while(finish0&0x800)!=0x800)/ Check cmd endfinish0=SDICSTA;SDICSTA=finish0;/ Clear cmd end statereturn 1;else / With response(finish0=SDICSTA;while( !( (finish0&0x200)=0x200) | (finish0&0x400)=0x400)/ Check cmd/rsp endfinish0=SDICSTA;if(cmd=1| cmd=41) /CRC no check, CMD9 is a long Resp. command. (if( (finish0&0xf00) != 0xa00 ) / Check error(SDICSTA=finish0; / Clear error stateif(finish0&0x400)=0x400) return 0;/ Timeout error SDICSTA=finish0; / Clear cmd & rsp end state else / CRC check (if( (finish0&0x1f00) != 0xa00 ) / Check error(/Uart_Printf("CMD%d:SDICSTA=0x%x, SDIRSP0=0x%xn”,cmd, SDICSTA, SDIRSP0);SDICSTA=finish0; / Clear error stateif(finish0&0x400)=0x400)return 0;/ Timeout errorSDICSTA=finish0;return 1;int Chk_DATend(void)(int finish;finish=SDIDSTA;while( !( (finish&0x10)=0x10) | (finish&0x20)=0x20)/ Chek timeout or data end finish=SDIDSTA;if( (finish&0xfc) != 0x10 )(/Uart_Printf("DATA:finish=0x%xn”, finish);SDIDSTA=0xec; / Clear error state return 0;return 1;int Chk_BUSYend(void)(int finish;finish=SDIDSTA;while( !( (finish&0x08)=0x08) | (finish&0x20)=0x20) finish=SDIDSTA;if( (finish&0xfc) != 0x08 )(/Uart_Printf("DATA:finish=0x%xn”, finish);SDIDSTA=0xf4; /clear error state return 0;return 1;void CMD0(void)(/- Make card idle stateSDICARG=0x0;/ CMD0(stuff bit)SDICCON=(1<<8)|(MAGIC_NUMBER | 0);/ No_resp, start, CMD0/- Check end of CMD0Chk_CMDend(0, 0);SDICSTA=0x800; / Clear cmd_end(no rsp) int Chk_SD_OCR(void) ( int i;/- Negotiate operating condition for SD, it makes card ready state for(i=0;i<50;i+) /If this time is short, init. can be fail. (CMD55();/ Make ACMDSDICARG=0xff8000; /ACMD41(SD OCR:2.7V3.6V)SDICCON=(0x1<<9)|(0x1<<8)|(MAGIC_NUMBER |41);/sht_resp,wait_resp, start, ACMD41 if( Chk_CMDend(41, 1) & SDIRSP0=0x80ff8000 ) ( SDICSTA=0xa00; return 1; Delay(20000); SDICSTA=0xa00; return 0; int CMD55(void) ( /-Make ACMD SDI

    注意事项

    本文(SD卡读写器制作.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开