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

📄 ramdisk.c

📁 smartARM2400 USB OTG例程
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               ramdisk.c
** Latest modified Date:    2007-09-20
** Latest Version:          1.0
** Descriptions:            内存虚拟盘的大容量类存储器用户接口函数的实现
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Lizhenming
** Created date:            2007-09-9
** Version:                 1.0
** Descriptions:            The original version
**
*********************************************************************************************************/
#include    "msdevincludes.h"

/*********************************************************************************************************
  Disk define
*********************************************************************************************************/
static __uint32 __GuiCurrentLBA;                                        /*  当前逻辑块地址              */
static __uint32 __GuiXferSectorCnt;                                     /*  要传输的逻辑块数            */
static __uint8  __GucDiskStatus = __MS_NOT_READY;                       /*  存储器状态                  */ 

static __uint8 const __GucRamDiskFirstSec[512] = {
0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x08,0x08,0x00,
0x02,0x00,0x02,0x00,0x50,0xF8,0x08,0x00,0x3F,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x9A,0x80,0x72,0x6C,0x4E,0x4F,0x20,0x4E,0x41,
0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x32,0x20,0x20,0x20,0x33,0xC9,
0x8E,0xD1,0xBC,0xF0,0x7B,0x8E,0xD9,0xB8,0x00,0x20,0x8E,0xC0,0xFC,0xBD,0x00,0x7C,
0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A,
0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,
0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7,
0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11,
0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,
0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6,
0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6,
0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0,
0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E,
0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB,
0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8,
0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0,
0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6,
0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8,
0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8,
0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB,
0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33,
0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8,
0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42,
0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03,
0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB,
0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x52,0x65,
0x6D,0x6F,0x76,0x65,0x20,0x64,0x69,0x73,0x6B,0x73,0x20,0x6F,0x72,0x20,0x6F,0x74,
0x68,0x65,0x72,0x20,0x6D,0x65,0x64,0x69,0x61,0x2E,0xFF,0x0D,0x0A,0x44,0x69,0x73,
0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,0x65,0x73,0x73,0x20,
0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,0x65,0x73,0x74,0x61,
0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xCB,0xD8,0x55,0xAA
};

static __DISK_INFO __GramdiskInfo = {
    SECTOR_CAPACITY,
    SECTOR_SIZE
};

/*********************************************************************************************************
** Function name:           ramdiskFormat
**
** Descriptions:            格式化存储器
**
** input parameters:        无
** output parameters:       无

** Returned value:          无
**
*********************************************************************************************************/
void ramdiskFormat (void)
{
    __uint32 i;
    
    OS_ENTER_CRITICAL();
    for (i = 0; i < 512; i++) {
        __GucRamDiskSpace[i] = __GucRamDiskFirstSec[i];
    }
    for (i = 512; i < 512 * 2 * 64; i++) {
        __GucRamDiskSpace[i] = 0;
    }
    OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** Function name:           ramdiskInit
**
** Descriptions:            初始化存储器
**
** input parameters:        无
** output parameters:       无

** Returned value:          __MASS_SUCCESS  初始化成功
**                          __MASS_FAIL     初始化失败
**
*********************************************************************************************************/
__uint8   ramdiskInit (void)
{
    massResetSoft();
    __GucDiskStatus = __MS_READY;
    return __MASS_SUCCESS;
}

/*********************************************************************************************************
** Function name:           ramdiskReset
**
** Descriptions:            复位存储器
**
** input parameters:        无
** output parameters:       无

** Returned value:          __MASS_SUCCESS  复位成功
**                          __MASS_FAIL     复位失败
**
*********************************************************************************************************/
__uint8   ramdiskReset (void)
{
    __GucDiskStatus = __MS_READY;
    return __MASS_SUCCESS;
}

/*********************************************************************************************************
** Function name:           ramdiskGetInfo
**
** Descriptions:            获取存储器容量,扇区大小信息
**
** input parameters:        无
** output parameters:       无

** Returned value:          存储器容量(扇区数),扇区大小信息
**
*********************************************************************************************************/
__PDISK_INFO  ramdiskGetInfo (void)
{
    return &__GramdiskInfo;
}

/*********************************************************************************************************
** Function name:           ramdiskGetStatus
**
** Descriptions:            获取存储器状态
**
** input parameters:        无
** output parameters:       无
** Returned value:          __MS_READY       -- 存储器准备好
**                          __MS_NOT_READY   -- 存储器未准备好
*********************************************************************************************************/
__uint8   ramdiskGetStatus (void)
{
    return __GucDiskStatus;
}

/*********************************************************************************************************
** Function name:           ramdiskReadSetting
**
** Descriptions:            读存储器之前的设置
**
** input parameters:        LBA         逻辑块地址
**                          uiXferCnt   总共要传输的扇区数
** output parameters:       无

** Returned value:          __MASS_SUCCESS    操作成功
**                          __MASS_FAIL       操作失败
**
*********************************************************************************************************/
__uint8 ramdiskReadSetting (__uint32 uiLBA, __uint32 uiXferCnt)
{   
    __GuiCurrentLBA      = uiLBA;
    __GuiXferSectorCnt   = uiXferCnt;
    __GpucMassStorageBuf = &__GucRamDiskSpace[__GuiCurrentLBA*SECTOR_SIZE];
    return __MASS_SUCCESS;
}

/*********************************************************************************************************
** Function name:           ramdiskWriteSetting
**
** Descriptions:            写存储器之前的设置
**
** input parameters:        LBA         逻辑块地址
**                          uiXferCnt   总共要传输的扇区数 
** output parameters:       无

** Returned value:          __MASS_SUCCESS    操作成功
**                          __MASS_FAIL       操作失败
**
*********************************************************************************************************/
__uint8 ramdiskWriteSetting (__uint32 uiLBA, __uint32 uiXferCnt)
{
    __GuiCurrentLBA      = uiLBA;
    __GuiXferSectorCnt   = uiXferCnt;
    __GpucMassStorageBuf = &__GucRamDiskSpace[__GuiCurrentLBA*SECTOR_SIZE];
    return __MASS_SUCCESS;
}


/*********************************************************************************************************
** Function name:           ramdiskRead
**
** Descriptions:            读取存储器数据到缓冲区
**
** input parameters:        无
** output parameters:       无

** Returned value:          __MASS_SUCCESS    操作成功
**                          __MASS_FAIL       操作失败
**
*********************************************************************************************************/
__uint8 ramdiskRead (__uint32 uiLBA, __uint8 *pucData)
{
    __GpucMassStorageBuf = &__GucRamDiskSpace[__GuiCurrentLBA*SECTOR_SIZE];
    __GuiCurrentLBA++;
    __GuiXferSectorCnt--;
    return __MASS_SUCCESS;
}

/*********************************************************************************************************
** Function name:           ramdiskWrite
**
** Descriptions:            把存储器缓冲区数据写回存储器
**
** input parameters:        无
** output parameters:       无

** Returned value:          __MASS_SUCCESS    操作成功
**                          __MASS_FAIL       操作失败
**
*********************************************************************************************************/
__uint8 ramdiskWrite (__uint32 uiLBA, __uint8 *pucData)
{
    __GuiCurrentLBA++;
    __GuiXferSectorCnt--;
    __GpucMassStorageBuf = &__GucRamDiskSpace[__GuiCurrentLBA*SECTOR_SIZE];
    return __MASS_SUCCESS;
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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