⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd_interface.c

📁 MTK平台上6223实现T卡功能的软代码
💻 C
字号:

#include "spi_sd.h"

#define SECTOR_SIZE         512 
#define SD_NO_ERR           0


static  BYTE   mIsInitialized = 0;

extern const   BYTE        SD_CS_PIN ;
extern const   BYTE        SD_DO_PIN ;
extern const   BYTE        SD_CLK_PIN;
extern const   BYTE        SD_DIN_PIN;
/************************************/




static void SPI_init(void)
{
	
	 GPIO_ModeSetup(SD_CLK_PIN,0);
	 GPIO_InitIO(1, SD_CLK_PIN);
	 GPIO_WriteIO(0,SD_CLK_PIN);
	 GPIO_ModeSetup(SD_CS_PIN,0);
	 GPIO_InitIO(1, SD_CS_PIN);
	 GPIO_WriteIO(0,SD_CS_PIN);
	 GPIO_ModeSetup(SD_DIN_PIN,0);
	 GPIO_InitIO(1, SD_DIN_PIN);
	 GPIO_WriteIO(0,SD_DIN_PIN);
	 GPIO_ModeSetup(SD_DO_PIN,0);
	 GPIO_InitIO(0, SD_DO_PIN);
	 GPIO_WriteIO(0,SD_DO_PIN);	 	 	 	
}

static int  SPI_MountDevice(void * DriveData, int DeviceNumber, int DeviceType, DWORD Flags)
{	
    mIsInitialized = 0;
    SPI_init();
    if(SPI_SD_Initialize() == 0)
    {
      mIsInitialized = 1;      	
	  	return SECTOR_SIZE;
    }
	return FS_MSDC_MOUNT_ERROR;
	
}
static int  SPI_ShutDown(void * DriveData)
{
   return FS_NO_ERROR;
}
static int  SPI_ReadSectors(void * DriveData, DWORD Sector, UINT Sectors, void * Buffer)
{
	
	kal_uint8 status = SPI_SD_Read(Sector, Sectors,Buffer);
	
	if(status != SD_NO_ERR )
	{	
   	return FS_MSDC_READ_SECTOR_ERROR;
	}
   return FS_NO_ERROR;
}


static int  SPI_WriteSectors(void * DriveData, DWORD Sector, UINT Sectors, void * Buffer)
{
  kal_uint8 status = SPI_SD_Write(Sector, Sectors,Buffer);
	
	if(status != SD_NO_ERR)
	{
		return FS_MSDC_WRITE_SECTOR_ERROR;
	}
   return FS_NO_ERROR;
}
static int  SPI_DiscardSectors(void * DriveData, DWORD Sector, UINT Sectors)
{
   return FS_NO_ERROR;
}
static int  SPI_GetDiskGeometry(void * DriveData, FS_PartitionRecord * DiskGeometry, BYTE * MediaDescriptor)
{
   memset((void*)DiskGeometry, 0, sizeof * DiskGeometry);

   DiskGeometry->Sectors = SPI_SD_BlockNum();

	*MediaDescriptor = 0xF8;

   return FS_NO_ERROR;
}

static  int  SPI_MediaChanged(void * DriveData)
{	
		if(mIsInitialized)
		{
   		return FS_NO_ERROR;
		}
		else
		{
			return FS_MSDC_PRESNET_NOT_READY;
		}

	return FS_MSDC_NOT_PRESENT;
}


static int SPI_MSDC_GetCardStatus(void * DriveData, int AckType)
{
   return 0;
}

FS_Driver SPI_FS_SdDrv = {
   SPI_MountDevice,
   SPI_ShutDown,
   SPI_ReadSectors,
   SPI_WriteSectors,
   SPI_MediaChanged,
   SPI_DiscardSectors,
   SPI_GetDiskGeometry,
   0,
   0,
   0,
   0,
   0,
   0,
   SPI_MSDC_GetCardStatus   
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -