SD卡读写程序.doc_第1页
SD卡读写程序.doc_第2页
SD卡读写程序.doc_第3页
SD卡读写程序.doc_第4页
SD卡读写程序.doc_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/实验目的:学习SD卡的操作/软件设计/ 1、SD卡采用SPI通信/ 2、先往SD里顺序写入0-255共256个数据,然后再读回送LCD1602显示/硬件要求:/ 拨码开关S11置ON/ 跳线J18全部接通#include /dsPIC30F6014标准头文件_FOSC(CSW_FSCM_OFF & XT_PLL4); /4倍频晶振,Failsafe 时钟关闭 _FWDT(WDT_OFF); /关闭看门狗定时器 _FBORPOR(PBOR_OFF & MCLR_EN); /掉电复位禁止,MCLR复位使能。 _FGS(CODE_PROT_OFF); /代码保护禁止#define cs PORTGbits.RG9 /定义SD卡片选脚#define rs LATBbits.LATB4 /定义LCD控制位(注意这里只能用LATB寄存器,不能直接用PORTB寄存器)#define rw LATBbits.LATB5#define e LATBbits.LATB6unsigned char _attribute_(address(0x900) lcd3=0,0,0;void spi_init(); /申明系统初始函数void spi_low(); /申明产生低波特率函数(SD卡初始化使用)void spi_high(); /申明产生高波特率函数(SD卡初始化后使用)unsigned char sd_reset(); /申明SD卡初始化函数unsigned char SD_SendCommand(unsigned char cmd,unsigned long arg); /申明写SD卡命令函数unsigned char SPI_WriteByte(unsigned char val); /申明写一字节函数unsigned char SPI_ReadByte(void); /申明接收一字节函数unsigned char SD_WriteSingleBlock(unsigned long sector); /申明写SD卡单BLOCK数据函数unsigned char SD_ReadSingleBlock(unsigned long sector); /申明读SD卡单BLOCK数据函数void lcd_display(); /申明结果显示函数void delay(); /申明延时函数(显示时用)/系统初始化函数void spi_init() TRISG=0x00d0; /设置SDI为输出,其他C口为输出 TRISB=0X0000; /设置B口为输出 TRISD=0X0000; /设置D口为输出 SPI2CON=0x0278; /空闲时总线为高电平,fosc/64 SPI2STAT=0x8000; / 输出数据的末尾采样输入数据,上升沿发送数据/*写LCD程序*/写一个字节数据函数/在电平发生改变后需要插入一段延时时间,否则LCD反应不过来。void write(unsigned char x) PORTD=x; /待显示数据送PORTD口 delay(); rs=1; /该字节数据为数据,而不是命令 delay(); rw=0; /此次操作为写,而不是读 delay(); e=0; /拉低使能信号 delay(); /保持使能信号为低一段时间 e=1; /拉高使能信号,建立LCD操作所需要的上升沿 delay();/*LCD显示设置函数*/在电平发生改变后需要插入一段延时时间,否则LCD反应不过来。void lcd_enable() delay(); rs=0; /该字节数据为命令,而不是数据 delay(); rw=0; /此次操作为写,而不是读 delay(); e=0; /拉低使能信号 delay(); /保持使能信号为低一段时间 e=1; /拉高使能信号,建立LCD操作所需要的上升沿 delay();/*LCD初始化函数*void lcd_init() PORTD=0X1; /清除显示 lcd_enable(); PORTD=0X38; /8位2行5*7点阵 lcd_enable(); PORTD=0X0e; /显示开,光标开,闪烁 lcd_enable(); PORTD=0X06; /文字不动,光标右移 lcd_enable(); PORTD=0X86; /时间显示地址 lcd_enable();/*LCD显示函数*void lcd_display() unsigned char i,j; lcd_init(); for(i=0;i3;i+) /一共3字节数据 write(lcdi); /查表获取数据并调用写一个字节数据函数送LCD显示 for(j=0;j24); /数据段第4字节SPI_WriteByte(arg16); /数据段第3字节SPI_WriteByte(arg8); /数据段第2字节SPI_WriteByte(arg); /数据段第1字节SPI_WriteByte(0x95); /CRC效验和while(r1 = SPI_WriteByte(0xff) = 0xff)/等待响应if(retry1+ 200) break;/超时退出 cs=1; /清初片选信号return r1; /返回状态值/*SD开初始化函数*unsigned char sd_reset()unsigned char i,tmp;unsigned char retry; /重复次数unsigned char r1=0; retry=0;delay();delay();do for(i=0;i20) return 1; /超时退出 while(r1 != 0x01); /等待IDLE命令返回retry = 0; cs=0;do for(i=0;i254) return 1; /超时退出 while(r1);for(i=0;i100;i+) SPI_WriteByte(0xff);r1 = SD_SendCommand(59, 0); /关crc if (r1) return 1; /返回不正确,退出初始化for(i=0;i100;i+) SPI_WriteByte(0xff);r1 = SD_SendCommand(16, 512); /设扇区大小512 if(r1!=0) return 1; /返回不正确,退出初始化return 0; /正常返回/*写一个扇区*unsigned char SD_WriteSingleBlock(unsigned long sector)unsigned char r1;unsigned int i; unsigned char retry=0;do for(i=0;i100;i+) SPI_WriteByte(0xff);r1 = SD_SendCommand(24, sector10) return 1; /超时退出 while(r1 != 0x00);cs=0;SPI_WriteByte(0xff);SPI_WriteByte(0xff);SPI_WriteByte(0xff);SPI_WriteByte(0xff);SPI_WriteByte(0xff);SPI_WriteByte(0xff);SPI_WriteByte(0xfe); /发开始符for(i=0; i512; i+) /送512字节数据 if(i10) return 1; /超时退出 while(!(r1&0x0f)=5); /等待数据成功接受返回信息 while(!(SPI_WriteByte(0xff); /等待SD卡内部编程完成 return 0;/*读SD卡一个扇区*unsigned char SD_ReadSingleBlock(unsigned long sector)unsigned char r1,temp;unsigned int i,j;unsigned char retry=0;dor1 = SD_SendCommand(17, sector10) return 1; /超时退出 while(r1 != 0x00);cs=0;while(SPI_WriteByte(0xff)!= 0xfe) /等待接收到开始字节 if(retry+ 100) return 1; /超时退出 for(i=0; i512; i+) /读512个数据temp = SPI_WriteByte(0xff); /读取接收到的数据 lcd0=(temp/100)+48; lcd1=(temp%100)/10)+48; lcd2=(temp%100)%10)+48; lcd_display(); /读取数据送显示 for(j=0;j500;j+) delay();SPI_WriteByte(0xff); /伪16-bits crcSPI_WriteByte(0xff);cs=1;return 0;/*延时程序*void delay() /延时程序 int i; /定义整形变量 for(i=0x100;i-;); /延时 /*主函数* int main(void) unsigned char loop,res; delay(); delay(); delay(); loop=1; cs=1; while(loop) spi_init(); /调用系统初始化函数 res= sd_reset(); /调用SD卡

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论