51单片机读写SD卡程序实例完整版(学习)

合集下载

51单片机SD卡读写

51单片机SD卡读写

return temp; //返回读取的数据
}
//复位函数//
uchar sd_reset()
{
uchar i,temp=0xff,time;
uchar table[]={0x40,0x00,0x00,0x00,0x00,0x95};
flag_time=1;
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//错误码定义//
#define cmd0_error 0x01
#define cmd1_error 0x02
}
write_sd(0xff);
write_sd(0xff); //两字节奇偶校验
temp=read_sd(); //读取返回值
if((temp&0x1f)!=0x05) //如果返回值是 xxx00101 说明数据已经被写入
if(time==100)
{
return read_error;
}
}
while(temp!=0);
write_sd(0xff); //补偿8个时钟
//由于sd卡操作一次性只能写一个扇区也就是512个字节
//所以这里通过将长整型地址左移九位来将地址乘上512
//用于地址操作
table[1]=((add&0xff000000)>>24);
table[2]=((add&0x00ff0000)>>16);

89C51单片机读取SD卡驱动程序

89C51单片机读取SD卡驱动程序

89C51单片机读取SD卡驱动程序本程序是应用于51单片机的 89c52#include "MMC.h"bit Init_Flag; //Set it to 1 when Init is processing.bit card_type;//uchar csd_data[16];//uchar cid_data[16];unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};//CMD0/**********************************************************延时子函数**********************************************************/void delay(unsigned int time){while(time--);}/**********************************************************us延时子程序 (4.34us)**********************************************************/void delayNOP(){_nop_();_nop_();_nop_();_nop_();}/************************************************************ 卡端口初始化************************************************************/ void MMC_Port_Init(){SPI_CLK=1;SPI_DO =1;SPI_CS=1;}//************************************************************* ***************//Routine for sending a byte to MMC/SD-Card//write a byte//************************************************************* ***************void Write_Byte_MMC(uchar value){unsigned char i;for (i=0;i<8;i++){if (value&0x80)SPI_DI=1; //Send bit by bit(MSB First)elseSPI_DI=0;SPI_CLK=0; //Clock lowif(Init_Flag)delayNOP();SPI_CLK=1; //Clock Highif(Init_Flag)delayNOP();value <<=1;}}//************************************************************* ***************//Routine for reading a byte from MMC/SD-Card//Software SPI//************************************************************* ***************unsigned char Read_Byte_MMC(){unsigned char temp=0;unsigned char i;SPI_DO=1;for (i=0;i<8;i++) //MSB First{SPI_CLK=0; //Clock Lowif(Init_Flag)delayNOP();SPI_CLK=1; //Clock Highif(Init_Flag)delayNOP();temp=(temp<<1)|SPI_DO; //read mmc data out pin}return (temp);}//************************************************************* ***************//Send a Command to MMC/SD-Card//Return: the second byte of response register of MMC/SD-Card//************************************************************* ***************unsigned char Write_Command_MMC(unsigned char *CMD) {unsigned char tmp;unsigned char i;//set MMC_Chip_Select to high (MMC/SD-Card disable)SPI_CS=1;//send 8 Clock ImpulseWrite_Byte_MMC(0xFF);//set MMC_Chip_Select to low (MMC/SD-Card active) SPI_CS=0;//send 6 Byte Command to MMC/SD-Cardfor (i=0;i<0x06;i++){Write_Byte_MMC(*CMD++);}i = 0;//get 16 bit responseRead_Byte_MMC(); //read the first byte,ignore it.do{ //Only last 8 bit is used here.Read it out.tmp = Read_Byte_MMC();i++;}while((tmp==0xff)&&(i<100));return(tmp);}//********************************************************** //Routine for Init MMC/SD card(SPI-MODE)unsigned char MMC_Init()//********************************************************** {unsigned char temp;unsigned char i;MMC_Port_Init(); //Init SPI portdelay(200);Init_Flag=1; //Set the init flagfor (i=0;i<0x0f;i++){Write_Byte_MMC(0xff); //send 74 clock at least}//Send Command CMD0 to MMC/SD Cardi = 0;do{ //retry 200 times to send CMD0 commandtemp=Write_Command_MMC(CMD);i++;if(i >= 200){ //time outreturn(INIT_CMD0_ERROR); //CMD0 Error!}}while(temp!=1);i = 0;do{CMD[0] = 0x77; //CMD55命令temp = Write_Command_MMC(CMD); //先发送 CMD55if(temp == 0x01) //如果有反应{CMD[0] = 0x69; //ACMD41命令temp = Write_Command_MMC(CMD); //发送CMD41进行激活if(temp == 0x00) //激活成功就是SD卡{card_type =1; //SD}}else //如果发送CMD55无反应,改发送CMD1{CMD[0] = 0x41; //CMD1命令CMD[5] = 0xFF;temp = Write_Command_MMC(CMD); //发送CMD1进行激活if(temp == 0x00) //激活成功就是MMC卡{card_type =0; //MMC}}i++;if(i >= 200){return(INIT_CMD1_ERROR); //CMD1 Error!}}while(temp != 0x00); // MMC和SD卡激活后的返回值均为0x00Init_Flag=0; //Init is completed,clear the flagSPI_CS=1; //set MMC_Chip_Select to high// wr_string(0,2," INIT SUCCESS ");return(0); //All commands have been taken.}//************************************************************ //Routine for reading data Registers of MMC/SD-Card//Return 0 if no Error.//************************************************************ unsigned char MMC_Read_Block(uchar *CMD,uchar *Buffer,uint Bytes){unsigned int i;unsigned char temp;//Send Command CMD to MMC/SD-Cardi = 0;do{ //Retry 100 times to send command.temp=Write_Command_MMC(CMD);i++;if(i == 100){return(READ_BLOCK_ERROR); //block write Error!}}while(temp!=0);//Read Start Byte form MMC/SD-Card (FEh/Start Byte)while (Read_Byte_MMC()!=0xfe) ;//Write blocks(normal 512Bytes) to MMC/SD-Cardfor (i=0;i<bytes;i++){*Buffer++ = Read_Byte_MMC();}Read_Byte_MMC();//CRC - ByteRead_Byte_MMC();//CRC - ByteSPI_CS=1;return(0);}//************************************************************ //Routine for</bytes;i++)reading CSD Registers from MMC/SD-Card (16Bytes)//Return 0 if no Error.//Command for reading CSD Registers//************************************************************ unsigned char Read_CSD_MMC(unsigned char *Buffer) {unsigned char temp;CMD[0]=0X49; //CMD9:读CSD寄存器.CMD[5]=0XFF;temp=MMC_Read_Block(CMD,Buffer,16); //read 16 bytes return(temp);}//************************************************************ //Routine for reading CID Registers from MMC/SD-Card (16Bytes)//Return 0 if no Error.//Command for reading CID Registers//************************************************************ unsigned char Read_CID_MMC(unsigned char *Buffer){unsigned char temp;CMD[0]=0X4A; //CMD10:读CID寄存器.CMD[5]=0XFF;temp=MMC_Read_Block(CMD,Buffer,16); //read 16 bytesreturn(temp);}/**********************************************************/。

51读写SD汇编语言

51读写SD汇编语言
;<<数据段>>
DSEG AT 30H
CS BIT P2.0 ;SD卡接口
CLK BIT P2.1
SPI_IN BIT P2.2
SPI_OUT BIT P2.3
RS BIT P2.4 ;12864接口
RW BIT P2.5
E BIT P2.6
ResponceSD EQU 30H ;保存SD卡应答信号
;说明:上升沿写入数据,高位开始,从A中写入.CS/CLK/SPI_IN
SPI_WriteByte:
MOV R4,#08H
CLR CLK ;L
LCALL F_DelayShort
Loop_WriteByte:
RLC A
JC L_Next1
CLR SPI_IN
LJMP L_Next2
;<<SPI读1字节>>
;出口参数:A
;说明:下降沿读出数据,高位开始,保存到A中.CS/CLK/SPI_OUT
SPI_ReadByte:
MOV R4,#08H
SETB CLK ;H
LCALL F_DelayShort
L_ReadByte:
MOV C,SPI_OUT
LCALL F_DelayShort
/***********************************************************
名称: SD卡读写 *
描述: SD卡与单片机连接读写数据,另外MCU与12864液晶相连 *
硬件: SD卡与MCU的P2.0-P2.3相连,12864与P1口和P2.4-2.6相连 * *

51平台通过SPI方式读写SD

51平台通过SPI方式读写SD

一、总则本文件介绍了在51平台通过SPI方式读写SD/MMC卡,包括软硬件需求, SD/MMC硬件连接, SPI接口软件模拟,SD/MMC上电初始化,写单块,读单块,写多块,读多块,块擦除,上位串口通讯协议,PC上位软件操作说明等。

二、软硬件需求a) 单片机固件编译环境:Keil C51 uVision2b) PC上位软件编译环境:Visual C++ 6.0c) 硬件环境:1)W78E52B一片;2)SD/MMC卡插座一个;3)MAX232一片;4)cross串口线一条;三、SD/MMC硬件连接SD/MMC与51单片机引脚连接如下表1,供参考:51单片机引脚SD/MMC引脚P1_0SPI_CS (PIN1)P1_1SPI_SI(PIN2)P1_2SPI_SCK(PIN5)P1_3SPI_SO(PIN7)PIN4接VDDPIN3/6接GND表1 SD/MMC与51单片机引脚连接表注意:SD/MMC引脚除VDD(PIN4)/VSS(PIN3/6)外,其它引脚连接上拉电阻(47k)至3.3v 电源。

四、SPI接口软件模拟由于W78E52B没有集成硬件SPI接口,所以固件需要通过软件来模拟实现SPI接口;a) SPI接口基本原理:SPI采用HOST/SLAVE结构,HOST与SLA VE以字节为传输单位,支持4种模式;SPI接口定义有4个引脚CS,SI,SO,SCK;SD SPI接口工作于模式0,各引脚功能分别描述如下:1) CS为片选引脚,低电平为有效;2) SI为Host输出Slave输入引脚,空闲为高电平,SCK上升有效,;3) SO为Slave输出Host输入引脚,SCK下降有效;4) SCK为同步时钟;b) SPI HAL:包括4个函数,上层软件通过调用这4个函数,来实现与SD/MMC以SPI方式进行数据交换。

1) SPI_SendByte(INT8U onebyte)――以SPI方式向SD/MMC发送一个字节2) INT8U SPI_RecByte(void)――以SPI方式从SD/MMC接收一个字节3) SPI_CS_Assert(void)――将CS引脚置为低电平有效4) SPI_CS_Deassert(void)――将CS引脚置为高电平无效c) 通过SPI HAL发送的RESET命令CMD0波形图,如下图1,以供参考:图1-RESET命令CMD0波形图一、SD/MMC上电初始化当SD/MMC卡上电后,单片机需要对其进行上电初始化,上电初始化步骤顺序所列如下:1) 置CS为低,至少延时74个CLK,延时波形图,如图2,以供参考:图2-延时波形图1) 发送RESET命令CMD0,其波形图参考图1:2) 发送命令CMD1(SD卡使用命令ACMD41)激活SD/MMC卡, 固件需重复发送命令CMD1直到R1 idle state位为0。

51读写SD卡

51读写SD卡

一、SD卡的检测:插入时6脚CSS2与中端口相连,同时6脚在卡内部又与3脚地相连,这样利用6脚的低电平触发中断来检测SD卡的插入;SD卡的引脚说明:CLK:空闲时保持高电平;SD卡上电后,默认是关闭的;二、初始化:SPI的时钟不能太快。

刚开始先发送至少74个时钟信号,这是必须的,随后写命令CMD0和CMD1,使SD卡进入SPI模式。

详见附件:《SD卡初始化》i.SD卡和MMC卡:上电后,卡出于IDLE状态,主机用CMD0 复位卡,用CMD55和ACMD 41判别当前电压是否在工作范围内。

因为MMC卡不能正确识别CMD55,所以,通过判别此命令的响应正确与否,来侦知是SD卡还是MMC卡。

ii.SD模式和SPI模式选择:SD卡在上电初期,通过检测引脚1(DAT3)来决定。

如果此脚外界上拉电阻(50k)为高电平,则进入SD模式;此脚接地为低电平,进入SPI模式。

三、命令时序i.高位先发一般情况下降沿发送数据上升沿读取数据ii.发送命令:1.命令字;1字节0x40+命令序号;2.命令参数:4字节地址数:基本单位512;3.响应:R1和R1B(1字节(CRC7+1))R2(2字节)或R3(5字节)4.大部分命令的响应是1个字节,读取状态寄存器响应R2,读取OCR响应R3;四、数据传送:读写以512字节为基本单位;i.读数据:1.MCU发送“读”命令;2.SD卡回应:0x00;3.SD发送起始字节:0xFE;4.SD发送连续的512字节数据;5.SD发送2字节的CRC(任意,但最后一位要是1);ii.写数据:1.MCU发送“写”命令;2.SD卡回应:0x00;3.MCU发送起始字节:0xFE;4.MCU发送连续的512字节数据;5.MCU发送2字节的CRC校验码;6.SD卡发送5位的回应数据:xxx0 0101B (0x05)。

五、擦除操作可以加速写操作,因为在写之前会进行擦除。

六、SD卡的六个寄存器:七、SD卡的命令序号:i.Calss0 :1.CMD0 复位SD卡2.CMD1 读OCR3.CMD9 读CSD4.CMD10 读CID5.CMD12 停止读多块数据传输6.CMD13 读Card_Status 寄存器ii.Calss 21.CMD16 设置块的长度不设的话默认长度512 设的话:4字节所表示的数;2.CMD17 读单块3.CMD18 读多块直到发送CMD12iii.Calss 41.CMD 24 写单块2.CMD 25 写多块iv.Calss 5 擦除卡1.CMD 32 设擦除块的起始地址2.CMD 33 设擦除块的终止地址3.CMD 38 擦除所选块//实验目的:学习SD卡的操作//软件设计// 1、SD卡采用SPI通信// 2、先往SD里顺序写入0-255共256个数据,然后再读回送LCD1602显示//硬件要求:// 拨码开关S11置ON// 跳线J18全部接通#include <p30f6014.h> //dsPIC30F6014标准头文件_FOSC(CSW_FSCM_OFF & XT_PLL4); //4倍频晶振,Failsafe 时钟关闭_FWDT(WDT_OFF); //关闭看门狗定时器_FBORPOR(PBOR_OFF & MCLR_EN); //掉电复位禁止,MCLR复位使能。

用51单片机读写SD卡

用51单片机读写SD卡

引脚号 1 2 3 4 5 6 7 8 9
图 1 SD 卡外形 表 1 SD 卡引脚功能
名称
功能 (SD 模式) 功能 (SPI 模式)
DAT3/CS
数据线 3
片选/从选 (SS)
CMD/DI
命令线
主出从入 (MOSI)
VSS1 VDD CLK VSS2 DAT0/DO DAT1/IRQ DAT2/NC
DAT2 / NC DAT3 / CS CMD / DI VSS1 VDD CLK / SCK VSS2 DAT0 / DO DAT1 / IRQ
图2
3 软件实现
软件部分 主 要 实 现 底 层 SPI 通 信 , SD 卡 的 复 位 , SD 卡 的 初始化、 以及 SD 卡的通用写命令和单块数据的读写等功能。
3.1 底层 SPI 通信函数
//======================================= //写一字节到 SD 卡,模拟 SPI 总线方式 void SD_spi_write(unsigned char n) {
unsigned char i;
for(i=0;i<8;i++) { SD_CLK=0; if(is_init) delay(DELAY_TIME); SD_DI=(n&0x80)>>7; SD_CLK=1; if(is_init) delay(DELAY_TIME);
在 SPI 模式中, 命令都是以如表 2 的 6 字节形式发送的。 表2
第一字节
第 2-5 字节
第 6 字节
0
1
命令号
参数
CRC 校验 1
每帧命令都以 “01” 开头, 然后是 6 位命令号和 4 字节的 参 数 (高 位 在 前 , 低 位 在 后), 最 后 是 7 位 CRC 校 验 和 1 位 停 止位 “1”。

单片机读写SD卡教程

单片机读写SD卡教程引言:SD卡(Secure Digital Card)是广泛应用于各类数字设备上的一种存储介质。

它小巧轻便,可靠性高,容量大,因此在各种嵌入式系统中都广泛使用。

本教程将介绍如何使用单片机读写SD卡,包括初始化SD卡、读写数据等基本操作。

一、硬件准备在开始之前,我们需要准备以下硬件设备:1.一个支持SPI协议的单片机开发板(例如STC89C51、STM32等);2.一个SD卡插槽,或者是一个带有SD卡插槽的扩展板;3.杜邦线、面包板等连接器。

二、软件准备除了硬件设备,我们还需要准备以下软件工具:1. Keil C51、IAR、Keil MDK等单片机编译工具;2. SD卡相关的库文件,例如FatFs;3.一个用于测试的程序(可以是一个简单的读写数据的程序)。

三、连接SD卡插槽将SD卡插入到对应的插槽中,并将插槽与单片机的硬件SPI接口连接。

根据不同的开发板,连接方式可能有所不同,一般SPI接口包括SCK(时钟线)、MOSI(主机输出从机输入线)、MISO(主机输入从机输出线)和CS(片选线)等。

四、编写读写SD卡的程序在开始编写程序之前,我们需要先了解SD卡的工作原理。

SD卡通过SPI总线与单片机进行通信,通过发送特定的命令和参数实现读写操作。

以下是一个简单的读写SD卡的流程:1.初始化SD卡a.发送CMD0命令,将SD卡设置为SPI模式;b.发送CMD8命令,验证SD卡是否支持高速SPI模式;c.发送ACMD41命令,等待SD卡初始化完成。

2.读写数据a.发送CMD17命令,指定要读取的扇区地址;b.等待SD卡回应,确认读取命令执行成功;c.读取数据;d.发送CMD18命令,继续读取下一个扇区;e.重复步骤c和d,直到读取完所有数据;f.发送CMD12命令,停止读取。

g.发送CMD24命令,指定要写入的扇区地址;h.等待SD卡回应,确认写入命令执行成功;i.写入数据;j.发送CMD25命令,继续写入下一个扇区;k.重复步骤i和j,直到写入完所有数据;l.发送CMD12命令,停止写入。

菜鸟用C8051F020 SPI读写SD卡FAT全攻略单片机

菜鸟用C8051F020 SPI读写SD卡FAT全攻略转自:/wandou16/249996/message.aspx#我从一个月前刚放暑假开始弄单片机读写SD卡,八月初完成FAT16,已经可以写入TXT文件,并可在windows上读出。

由于网上资料比较散,所以一开始走了不少弯路,现在写一篇总结,将我遇到的问题详细地列出来,希望能帮助和我一样的菜鸟们少走弯路。

文中说到的一些问题对高手而言只是常识性的,还请包涵。

第一步:搭电路我买了一小块蜂窝板和一个SD插槽,按照标准电路焊接上,由于用的是SPI模式,所以选电路图的时候要看好,SD卡上的引脚顺序不要看错,912345678,最后两根挨得很紧,焊接时不要连上了,相关引脚一定要按照要求接上47K的上拉电阻。

电路虽然简单,但一定要确保无误。

还有一点,SD卡座种类不一样,有位学长买的是弹簧式的,焊完以后刚开始初始化都能成功,放了几天突然不行了,检查各引脚都没问题,最后发现是卡座的问题,这样的硬件问题很难发现,还浪费时间,所以卡座还是直接买简单的好。

第二步:设置硬件SPI我用的是sililab的C8051F020,自带硬件SPI,如果不带可以用软件模拟,关于软件模拟SPI这块网上有很多现成的程序。

这一歩首先按照020手册写了一段程序,当然是将其设为主模式,这时候CONFIG (这个软件可以视窗化操作C8051F的大多数寄存器并自动生成代码)会分配4个引脚,CLK时钟位,MISO 和MOSI两个数据传输位,还有一个NSS位,这个脚用不上,不要将其当作CS片选位,CS位选一个普通IO既可。

所有从单片机上输出的引脚都设为推挽输出。

设置完成后最好弄个示波器看一下输出波形是否和你想象中的一样,这样就能确保你的SPI工作没问题了,这一步也是关键,SPI是底层通信的基础。

第三步:SD卡初始化这一步正式进入单片机调试SD部分,了解SD卡的时序后(后面我会上传这部分资料),网上众说纷纭,还有说要看完178页英文PDF,我都晕了,这个看完估计我都是专家了。

MCS51 MCU读写SD卡版(单片机论文)

摘要摘要近年来, SD存储卡在嵌入式产品中的应用越来越广泛, 但SD卡接口一般仅集成在32位高端处理器中, 一般51单片机则由于资源限制没有该接口。

因此,如何解决51单片机应用系统存取SD卡大容量数据就显得很有实际意义。

本系统使用MXT8051F04A作为单片机与SD卡的接口芯片, 采用SPI串行方式对SD卡的扇区进行读写,读写过程和结果通过串口调试助手在主机上显示。

本论文的核心主要从硬件设计和软件编程两个大的方面介绍了系统的实现。

硬件电路设计主要包括MXT8051F04A最小系统电路、电源电路、串口电路、SD卡接口电路。

程序采用C语言在Keil软件下进行编写、调试,程序主要包括SD卡扇区读写程序、串口程序等软件模块。

系统实现了对SD卡扇区的读写,达到了设计的要求和目的。

关键字:MXT8051F04A,SD卡,KeilIABSTRACTABSTRACTIn recent years, SD memory card applications in the embedded products more widely, but generally only the integrated SD card interface in 32-bit high-end processor, microcontroller 51 is generally not the interface due to resource constraints. Therefore, how to solve the 51 SCM applications to access data on large-capacity SD cards seem very practical.The system uses MXT8051F04A as SCM and SD card interface chip, using SPI mode on the SD card serial read and write sectors, reading and writing process and results through the serial port on the host display debugging assistant. The core of this thesis, the main hardware and software design introduces two major aspects of the system implementation. Hardware design includes MXT8051F04A minimum system circuit, power circuit, the serial port circuitry, SD card interface circuit. Program using C language under the Keil software write, debug, the program includes reading and writing SD card sector program, serial procedures of software modules. System realizes the SD card read and write sectors, meets the design requirements and objectives.Keywords: MXT8051F04A,SD Card,KeilII目录第1章引言 (1)1.1 选题背景 (1)1.2 研究目标和意义 (1)1.3 本文要完成的工作 (1)第2章单片机读写SD卡的硬件电路设计 (3)2.1 系统硬件平台组成 (3)2.2 电源模块 (3)2.3 MXT8051F04A单片机最小系统电路设计 (4)2.3.1 MXT8051F04A简介 (4)2.3.2 晶振复位电路 (8)2.4 SD卡电路设计 (8)2.4.1 通讯模式 (9)2.4.2 电平匹配 (9)2.4.3 硬件接口设计 (10)2.5 串口电路设计 (12)2.6 PCB绘制 (13)2.7 本章小结 (14)第3章单片机读写SD卡的软件设计 (14)3.1 SD卡的扇区读写 (14)3.1.1 模拟SPI协议 (14)3.1.2 SD卡命令 (15)3.1.3 SD卡的初始化 (19)3.1.4 数据块的读写 (20)3.2 串口程序 (25)第4章调试 (26)4.1 系统硬件调试 (26)4.2 软件调试 (27)4.3 软硬件的联合调试 (27)III4.4 本章小结 (29)第5章结束语 (30)5.1 总结 (30)5.2 展望 (30)参考文献 (31)致谢 (32)附录 (33)附录一:单片机读写SD卡的完整原理图 (33)附录二:单片机读写SD卡的完整程序 (36)外文资料原文 (63)译文 (64)IV第1章引言第1章引言1.1选题背景SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如个人数码助理(PDA)、数码相机和多媒体播放器等。

007、STC12C5A60S2单片机之SD卡读写

007、STC12C5A60S2单片机之SD卡读写/*-----------------------------------------------------------芯片 :STC12C5A60S2晶振 :11.0592MHZ开发平台:KEIL功能 :向SD卡读写一个扇区,如果成功则激活P0口流水灯,如果失败则无流水灯。

并且随程序运行向串口发送运行状态。

波特率 :9600BPS日期 :11.5.19其他 :本程序软件模拟SPI,随后我会改为硬件SPI注意 :下载完程序后请复位系统后运行~(切记~~) -------------------------------------------------------------*/#include "STC12C5A60S2.h" #include "uart.h"#include "sd.h"#define uchar unsigned char #define uint unsigned intuchar xdata tab[512]; //定义外部ROM,512个字节,数据缓冲区(一个扇区必须写512字节 )void delay5ms(){uchar a,b;for(b=19;b>0;b--)for(a=130;a>0;a--); }void delay500ms(){uchar a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--); }void main(){int i;uchar flag=0;init(); //初始化串口txd_s("串口初始化\n");SD_Reset(); //复位SD卡txd_s("SD卡复位完\n");SD_Init(); //初始化SD卡txd_s("SD卡初始化完\n");for(i=0;i<512;i++)tab[i]=i; //向数据缓冲区中写入0~255 0~255,共512个字节txd_s("缓冲区写完\n");SD_Write_Sector(20,tab); //将数据缓冲区中的512个字节的数据写入SD 卡的第20扇区中delay5ms();txd_s("扇区写完\n");for(i=0;i<512;i++) //清空数据缓冲区tab[i]=0;txd_s("清缓冲区\n");SD_Read_Sector(20,tab); //从SD卡的第20扇区中读取512个字节的数据到数据缓冲区txd_s("读扇区完\n");for(i=0;i<512;i++)if(((uchar)i)!=tab[i]) //对读出的数据进行匹配,如果不吻合则flag=1,否则flag=0{flag=1;break;}delay5ms();txd_s("匹配完毕\n");if(flag==0) {delay5ms();txd_s("匹配对 \n");P0=0xfe;while(1) {P0=P0>>1|P0<<7;delay500ms(); }}else {delay5ms();txd_s("匹配错 \n"); } while(1);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档