欢迎来到天天文库
浏览记录
ID:18122527
大小:101.00 KB
页数:8页
时间:2018-09-14
《sd卡程序设计、流程及操作系统》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、对SD卡进行操作首先要对SD卡进行初始化,初始化的过程中设置SD卡工作在SPI模式,其流程图如图3所示。 在复位成功之后可以通过CMD55和ACMD41判断当前电压是否在工作范围内。主机还可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。SD卡初始化的C语言程序如下: unsignedcharSD_Init(void) {unsignedcharretry,temp; unsigne
2、dchari; 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_Transf
3、erByte(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); //如果重试100次失败返回错误号 } }while(temp!=0); SD_Disable();//关片选 return(TRUE);//返回成功
4、 } 数据块的读写 完成SD卡的初始化之后即可进行它的读写操作。SD卡的读写操作都是通过发送SD卡命令完成的。SPI总线模式支持单块(CMD24)和多块(CMD25)写操作,多块操作是指从指定位置开始写下去,直到SD卡收到一个停止命令CMD12才停止。单块写操作的数据块长度只能是512字节。单块写入时,命令为CMD24,当应答为0时说明可以写入数据,大小为512字节。SD卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101时,表明数据块被正确写入SD卡。 在需要读取SD卡中数据的
5、时候,读SD卡的命令字为CMD17,接收正确的第一个响应命令字节为0xFE,随后是512个字节的用户数据块,最后为2个字节的CRC验证码。 可见,读写SD卡的操作都是在初始化后基于SD卡命令和响应完成操作的,写、读SD卡的程序流程图如图4和图5所示。 结束语 实验结果表明单片机使用12MHz的晶体振荡器时,读写速度和功耗都基本令人满意,可以应用于对读写速度要求不高的情况下。本文详细阐述了用AT89C52单片机对SD卡进行操作的过程,提出了一种不带SD卡控制器,MCU读写SD卡的方法,实现了SD卡在电能监测及无功补
6、偿数据采集系统中的用途。本文的实现程序把SPI总线读写功能集成在一起,传递的val变量既是向SPI写的数据,也是从SPI读取的数据。具体程序如下:(程序是在KeiluVision2的编译环境下编写)sbitCS="P3"^5; sbitCLK=P1^5; sbitDataI="P1"^7; sbitDataO="P1"^6; #defineSD_Disable()CS="1"//片选关 #defineSD_Enable()CS="0"//片选开 unsignedcharSPI_TransferByte(un
7、signedcharval) { unsignedcharBitCounter; for(BitCounter=8;BiCounter!=0;BitCounter--) {CLK="0"; DataI=0;//write if(val&0x80)DataI="1"; val<<=1; CLK=1; if(DataO)val
8、=1;//read } CLK=0; returnval;SD卡读写子程序:硬件平台:atmega8L最小系统 硬spi(sd卡的初始化
9、采用了io口模拟时序,因为在实验中发现要使用较低的速率才能稳定的初始化)软件开发平台:ICC-AVR version6.31a硬件配置:atmega8L 内部8m时钟 sandisk128msd卡几个基本的子程序及其介绍:1.io口模拟spi,实现数据发送,在初始化时使用voidi
此文档下载收益归作者所有