新闻中心

EEPW首页>嵌入式系统>设计应用> 基于AT89C52单片机的SD卡的读写设计

基于AT89C52单片机的SD卡的读写设计

作者: 时间:2010-01-14 来源:网络 收藏

  硬件接口

卡提供9Pin的引脚接口便于外围电路对其进行操作,9Pin的引脚随工作模式的不同有所差异。在SPI模式下,引脚1(DAT3)作为SPI片选线CS用,引脚2(CMD)用作SPI总线的数据输出线MOSI,而引脚7(DAT0)为数据输入线MISO,引脚5用作时钟线(CLK)。除电源和地,保留引脚可悬空。

  本文中控制卡的MCU是ATMEL公司生产的低电压、高性能CMOS 8位,内含8K字节的可反复擦写的只读程序存储器和256字节的随机存储数据存储器。由于只有256字节的数据存储器,而卡的数据写入是以块为单位,每块为512字节,所以需要在最小系统上增加一片RAM。本系统中RAM选用存储器芯片HM62256,容量为32K。对RAM进行时,锁存器把低8位地址锁存,与P2口的8位地址数据构成16位地址空间,从而可使SD卡一次512字节的块操作。系统硬件图如图2所示。

  软件

  SPI工作模式

  SD卡在上电初期自动进入SD总线模式,在此模式下向SD卡发送复位命令CMD0。如果SD卡在接收复位命令过程中CS低电平有效,则进入SPI模式,否则工作在SD总线模式。

  对于不带SPI串行总线接口的来说,用软件来模拟SPI总线操作的具体做法是:将P1.5口(模拟CLK线)的初始状态设置为1,而在允许接收后再置P1.5为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至AT89C52单片机的P1.7(模拟MISO线),此后再置P1.5为1,使单片机从P1.6(模拟MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便完成。此后再置P1.5为0,模拟下1位数据的输入输出,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。

  本文的实现程序把SPI总线功能集成在一起,传递的val变量既是向SPI写的数据,也是从SPI读取的数据。具体程序如下:(程序是在Keil uVision2的编译环境下编写)

  sbit CS=P3^5;

  sbit CLK= P1^5;

  sbit DataI=P1^7;

  sbit DataO=P1^6;

  #define SD_Disable() CS=1 //片选关

  #define SD_Enable() CS=0 //片选开

  unsigned char SPI_TransferByte(unsigned char val)

  {

  unsigned char BitCounter;

  for(BitCounter=8; BiCounter!=0; BitCounter--)



评论


相关推荐

技术专区

关闭