基于SPI读写SD卡的标准sdcard_spi组件

作者: suyong_yq
上传时间为: 2014-12-24 09:01 AM
2014-12-24
阅读:


sdcard_spi是一个基于SPI通信接口操作SD卡的单片机软件。用户只需要在自己使用的平台上实现基本的SPI驱动,并注册到sdcard_spi组件中,即可通过sdcard_spi提供的API对SD卡进行读写操作。对于基于SPI总线操作SD卡的协议已经在sdcard_spi组件内部实现,用户不需要再考虑。基于sdcard_spi组件,可以非常容易地同fatfs、znFAT等嵌入式文件系统对接,在应用程序中使用文件系统方便地管理海量的SD卡存储空间。

sdcard_spi组件使用纯C编写,遵循MISRA 2004标准,具有非常好的可移植性。该组件已在Freescale KL25、Freescale K64、Freescale K60,ST STM32F103RBT6等平台上测试通过,工作稳定。

这里预览一下sdcard_spi的头文件:

sdcard_spi.h

/* sdcard_spi.h */

#ifndef __SDCARD_SPI_H__
#define __SDCARD_SPI_H__

#include <stdint.h>
#include <stdbool.h>

#define SDC_BLOCK_SIZE_BYTE     (512U)

typedef struct
{
    void    (*SPI_InitFunc)(void);
    uint8_t (*SPI_SwapByteFunc)(uint8_t txData);
    void    (*SPI_SetBaudrateFunc)(uint32_t baudrate);
    void    (*SPI_AssertCsFunc)(bool enable);
    uint32_t Baudrate;
} SDC_SPICallback_T;

typedef enum
{
    eSDCCardUnknown    = 0U,
    eSDCCardTypeOfSDv2 = 1U,
    eSDCCardTypeOfSDHC = 2U
} SDC_CardType_T;

typedef struct
{
    SDC_CardType_T CardType;
    uint32_t CardBlkCnt;
} SDC_Info_T;

bool SDC_Install(const SDC_SPICallback_T *ioPtr);
bool SDC_InitCard(SDC_Info_T *infoPtr);
bool SDC_WriteBlock(uint32_t blkIdx, uint8_t *txPtr);
bool SDC_ReadBlock(uint32_t blkIdx, uint8_t *rxPtr);
uint32_t SDC_WriteBlocks(uint32_t blkIdx, uint32_t blkCnt, uint8_t *txPtr);
uint32_t SDC_ReadBlocks(uint32_t blkIdx, uint32_t blkCnt, uint8_t *rxPtr);

#endif /* __SDCARD_SPI_H__ */

目前,sdcard_spi还处于完善阶段。除了sdcard_spi实现部分的内容暂时以库的方式开放,其它包括demo程序的源代码全部开放,以提供给广大电子工程师和单片机爱好者进行测试。

使用简要说明及目录介绍:

      

  • lib目录下存放了sdcard_spi的库文件,目前提供使用keil创建的库文件,分别支持ARM Cortex-M0+\M3\M4内核的设备。在使用时,直接把"*.lib"文件当成"*.c"源文件添加到工程中编译链接即可。注意,在应用中一定要包含头文件"sdcard_spi.h"才能调用sdcard_spi的API。
  • app目录下存放了demo的源文件,在自己的平台上移植sdcard_spi成功之后,直接使用这里的源文件作为应用程序即可编译运行,作为测试功能。这个demo覆盖了sdcard_spi的所有API,也可以作为样例程序作为使用参考。
      测试工程组织示意如下:

      测试程序运行开始界面如下:

               

  • port目录下存放了移植相关的代码,用户可以借鉴这里的写法进行移植。

特别提醒:

  • 单块操作API的返回是布尔类型,表示操作成功与否。
  • 多块操作API的返回值是没有成功读写的块数,返回0说明操作成功,非0则表示还剩下这些块没有读写成功。

时间仓促,所以相关的文档还在完善过程总,说明写得比较简单,但是通过阅读样例代码也很容易理解API的功能。

附加保存在论坛的帖子中提供下载:

http://www.eeboard.com/bbs/thread-40127-1-1.html

欢迎广大电子工程师和单片机爱好者在使用后提供宝贵意见和建议。

suyong_yq@126.com

2014年11月

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示