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

📄 sddisk.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -