原创 SD卡读写程序设计(二)

2009-11-9 20:38 4940 7 8 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


一、概述


上次已经简单描述了SD卡读写程序的层次设计,今天开始一一实现。


 


二、命令接口程序设计


1、首先添加两个命令:sdrdsdwr.


《在文件tast_uartcmd.c中》


#define UartCmdMaxCount 10      //现在支持10个内部命令


u8* UartCmdStrTable[UartCmdMaxCount]={    //串口命令字符串


"help","cls","ledon","ledoff",


"time","temp","i2cwr","i2crd",


"sdrd","sdwr"


};


 


2、添加命令处理程序:


  UartCmdTable[8].UartCmdFunc=UartCmdSDRead;


  UartCmdTable[9].UartCmdFunc=UartCmdSDWrite;


 


《在文件uartcmd.c中》


void UartCmdSDRead(void){}


void UartCmdSDWrite(void){} 先定义空函数,编译通过再说。


《在文件uartcmd.h中》


void UartCmdSDRead(void);


void UartCmdSDWrite(void);


 


然后编译,一次性编译通过。但是输入help,没有显示sdrdsdwr命令,在帮助命令里还没有完成。


void UartCmdHelp(void){


  Uart_PutString("cls ");


  Uart_PutString("ledon ");


  Uart_PutString("ledoff ");


  Uart_PutString("time ");


  Uart_PutString("temp ");


  Uart_PutString("i2cwr ");


  Uart_PutString("i2crd \r\n");


  Uart_PutString("sdrd ");  //以下两句为新添加。


  Uart_PutString("sdwr \r\n");


}


再次编译,sdwrsdrd现在是两个空命令。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


4a91d259-6ec5-4cb3-af5c-cdd74576ff41.JPG 


3UartCmdSDRead()处理程序的编写


1)设计目标:从SD卡读出一个扇区的内容,并以十六进制显示。


2)框架设计


void UartCmdSDRead(void){


  static u8 SDReadBuf[512]; //SD扇区缓冲区


  u32 BlockNum="0";


  u16 i;


  u8 StrHex[4];     //8位字节转变为十六进制表示


  SD_ReadBlock( BlockNum, SDReadBuf ); //读取制定扇区


 


  for ( i="0"; i<512; i++ ) // 8位字节转变为十六进制,送串口输出


     {  sprintf ( (char*)StrHex, "%02X", SDReadBuf; 


        Uart_PutStr ( StrHex );


       Uart_PutStr ( " " );


       if ( i%16 == 15 ) Uart_PutStr ("\r\n");//每行十六个。


     }


 


}


3)添加sduser.c文件,里面包括sd卡操作的基本四个函数。


void SD_Config( void ){


}


void SD_ReadBlock( u32 BlockIndex, u8* ReadBuf ){


  u16 i;


  for ( i="0"; i<512; i++ )


      { ReadBuf = 0xaa; } //返回0xaa用于测试


}


void SD_WritBlock( u32 BlockIndex, u8* WriteBuf ){


  u16 i;


  for ( i="0"; i<512; i++ )


      { WriteBuf = 0xaa; } //


}


void SD_EraseBlock( u32 BlockIndex, u32 BlockNum ){


  BlockIndex=BlockNum; //防止编译器报错


  }


 


建立头文件sdcard.h,包含sd卡操作的基本函数,


#ifndef __SDCARD_H


#define __SDCARD_H


void SD_Config( void );


void SD_ReadBlock( u32 BlockIndex, u8* ReadBuf );


void SD_WritBlock( u32 BlockIndex, u8* WriteBuf );


void SD_EraseBlock( u32 BlockIndex, u32 BlockNum );


#endif /* __SDCARD_H */


 


然后在device.h中包含它,#include "sdcard.h"


编译成功后,执行sdrd,屏幕显示32行,每行16AA.


 


4void UartCmdSDWrite() 处理程序的编写


void UartCmdSDWrite(void){


  static u8 SDWriteBuf[512];    //SD扇区缓冲区


  u32 BlockIndex="0";


  u16 i;


 


  for ( i="0"; i<512; i++ )


      { SDWriteBuf = 0xBB; } //写入用于测试


  SD_WriteBlock( BlockIndex, SDWriteBuf );//写一个扇区


}

文章评论1条评论)

登录后参与讨论

用户1593293 2009-12-3 10:21

good,加油!
相关推荐阅读
nthq2004 2010-05-08 20:04
USB自定义设备驱动02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  本来还想编写应用程序测试一下自定...
nthq2004 2010-05-07 21:35
USB自定义设备驱动01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、USB设备驱动入门1、学习目...
nthq2004 2010-05-04 21:01
智林开发板上实现自定义的USB HID设备
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、自定义HID设备的相关概念1...
nthq2004 2010-05-01 21:58
U盘例程在智林开发板上的移植
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、移植前的准备工作1、有哪些操...
nthq2004 2010-04-30 19:19
U盘实现流程跟踪分析02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   二、追踪USB大容量设备的实现...
nthq2004 2010-04-27 21:51
U盘实现流程跟踪分析01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   一、追踪USB大容量设备的实现...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条