📄 sddisk.c
字号:
/* Copyright (C) 2006 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*
File : usb\Flash\Flash.c
Desc : 定义 Flash BLOCK 设备和 USB 的接口实现.
Author : Miaolf
Date :
Notes :
*
* 2007-11-28 15:37 Miaolf for rk27.
*
*/
/***************************************************************************/
#include "include.h"
#if (SD_CARD_EN)
#include "fs_sdmmc_dev.h"
#include "UsbBlock.h"
extern unsigned long SDTotSec;
extern unsigned short SDBytsPerSec; //SD卡每扇区字节数
//SCSI命令INQUIRY格式
//下面两必须 4 BYTE 对齐,目前在注册表里保证
UINT8 *SCSI_INQUIRY_SD;
void SDInitialize(MSC_DEVICE *pDev)
{
GPIO_SetPinDirection(SD_DETECT_PIN, GPIO_IN);
if (pDev->IoCtrl)
{
pDev->IoCtrl(MSC_IOCTL_GET_LUNSTARTSEC, &pDev->LunStartSec);
}
}
uint32 SDInsert = 0;
uint32 SDChange = 0;
int SDChkInsert(void)
{
uint32 rdata;
uint32 InsertState;
rdata = GPIO_GetPinLevel(SD_DETECT_PIN);//GetPinLevelOfSDCard(rdata);
#if (SDCheckInsetLevel == 0)
if (rdata == 1)
#else
if (rdata == 0)
#endif
{
InsertState = FALSE;
}
else
{
InsertState = TRUE;
}
if (InsertState != SDInsert)
{
SDInsert = InsertState;
SDChange = 1;
}
return(SDInsert);
}
BOOLEAN SDIoCtrl(MSC_IOCTL ioctl, void *pArg)
{
switch (ioctl)
{
case MSC_IOCTL_RESET:
if (SUCCEED != SdmmcInit())
{
Scu_ClockDisable(SDMMC_CLOCK);
}
SDChange = 0;
break;
case MSC_IOCTL_GET_GEOMETRY:
{
int32 aaa;
MSC_GEOMETRY *p = (MSC_GEOMETRY*)pArg;
p->LbaSize = 512;
aaa = SDBytsPerSec >> 9;
p->LbaMax = ((UINT32)SDTotSec * aaa);;
p->Loaded = TRUE;
}
break;
case MSC_IOCTL_FLUSH_CACHE:
break;
case MSC_IOCTL_GET_PROPERTIES:
{
MSC_PROPERTIES *p = (MSC_PROPERTIES*)pArg;
p->ProductID = "2007";
p->VendorID = "ffff";
p->Version = "0100";
p->SCSI_Inquiry = (char*)SCSI_INQUIRY_SD;
p->Removable = FALSE;
}
break;
case MSC_IOCTL_CHECK_STATUS:
{
MSC_STATUS *p = (MSC_STATUS*)pArg;
if (!SDChkInsert())
{
*p = MSC_STATUS_NO_MEDIA;
}
else if (SDChange == 1)
{
*p = MSC_STATUS_MEDIA_CHANGE;
}
else
{
*p = MSC_STATUS_NO_CHANGE;
}
}
break;
default:
return FALSE;
}
return TRUE;
}
BOOLEAN SDReadData(INT32U Lba, INT32U LbaCount, void *pBuf)
{
UINT8 * P;
P = pBuf;
//while(LbaCount)
{
//FS_SdReadSec(Lba++, LbaCount--, P);
SdmmcReadMSecs(Lba, LbaCount, pBuf);
}
return(TRUE);
}
BOOLEAN SDWriteData(INT32U Lba, INT32U LbaCount, void *pBuf)
{
//return FS_SdWriteSec(Lba, LbaCount, pBuf);
UINT8 * P;
P = pBuf;
//while(LbaCount)
{
SdmmcWriteMSecs(Lba, LbaCount, pBuf);
}
return(TRUE);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -