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__ */
|