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

📄 fs_comm.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 H
字号:
/*
$Log: fs_comm.h,v $
Revision 1.15  2008/01/07 12:52:17  Huangshilin
no message

Revision 1.14  2008/01/03 04:56:26  Penghuacheng
媒体库、资源管理器大更新

Revision 1.13  2007/12/24 07:56:10  Lingzhaojun
同步蓝魔版本基本模块

Revision 1.12  2007/12/12 02:39:04  Fangzhenfu
文件系统更新! FLASH 底层更新!

Revision 1.11  2007/11/13 14:28:04  Fangzhenfu
文件系统BUG修改! FLASH 底层修改,解决媒体库多次更新造成文件
系统破坏,文件名大小写转换问题!

Revision 1.10  2007/11/07 07:26:25  Fangzhenfu
USB 提速(小文件提速,目前速度写 3M 左右,读 6.5M左右, 4K PAGE FLASH 可到 5M,8M),
文件系统修改!
加入 FLASH 访问时序 API ! 见 flash_dev.h 中
FlashTimingCfg(uint32 Freq) Freq 为总线频率---打包
第一次调用 FlashTimingCfg()时请在 FS_Init() 之后调用,其它在总线频率变化时调用!

Revision 1.9  2007/11/02 02:40:56  Fangzhenfu
文件系统更新!fs_comm.h (V15000)!
文件句柄采用 MALLOC !

Revision 1.8  2007/10/30 08:35:20  Penghuacheng
增加文件打开个数限制,排序时同时打开多个文件

Revision 1.7  2007/10/25 07:52:44  Fangzhenfu
USB 模块 OS 嵌入!初次上传!
请将 修改板子 上的 VBUS 的连接方式!
每个盘的 盘符 请根据需要自行修改(每个设备的 dec.c中)!
如下:
const FS_DEVICE_TYPE FS_SdmmcDevice={
    "C:\",
    SdmmcGetStatus,
    SdmmcReadSec,
    SdmmcWriteSec,
    SdmmcIoCtl,
    SdmmcMediumInit,
    &SdFatCache,
    &SdFdtCache,
    &SdDataCache
};
别外请将 FLASH 的写保护直接上拉,否则写不了FLASH!
初次使用时请将 SD 卡设置为 C 盘,系统从SD启动后将 FLASH 格式
化后,COPY 所需的 资源文件 到 FLASH 中的 第一个盘中(目前保留
容量为 60M),再修改FLASH SYS 的盘符为 C 盘,即可从FLASH 启动
系统!
目前提交的版本比较不规范,有待以后改进!

Revision 1.6  2007/10/20 04:46:31  Huangshilin
for RK2700

Revision 1.5  2007/10/11 04:08:09  Huangshilin
System\os

Revision 1.4  2007/10/08 02:58:14  Lingzhaojun
添加版本自动注释脚本

*/

#ifndef _FS_COMM_H_
#define _FS_COMM_H_

//定义工程所在的仿真环境
#define DEMO_BOARD      0x01    /* 开发板上的仿真环境 */
#define PC_VC_EMU       0x02    /* VC 仿真环境 */
#define ARM_ADS_EMU     0x03    /* AXD 仿真环境, FS 单独编译使用 */

#if (defined(BOARD))
#define FS_EMU_ENT         DEMO_BOARD
#elif (defined(ROCK_FS))
#define FS_EMU_ENT         PC_VC_EMU
#else
#define FS_EMU_ENT         PC_VC_EMU
#endif

//定义工程所用的 MEMMAP 表
#define PORSCHE9_IO_MEMMAP  0   /* RK27XX DEMO 板(目前不用) */
#define LDK_MMU_DISABLE     1   /* LDK 板 MMU 关闭          */
#define LDK_MMU_ENABLE      2   /* LDK 板 MMU 开启          */

#define _USE_ADS_CLIB_                    //定义是否使用 ADS 常用的 C 库(详见 fs_clib.c)

#define FS_VERSION              18000UL //文件系统版本号1.00.00
#define FS_MALLOC_HANDLE_SP     1       //定义是否使用 Malloc
#define FLASH_DISK              1       //定义FLASH盘使能
#ifndef SETUP
#define SD_CARD_EN              1       //定义SD卡使能
#define FS_OS_SUPPORT                   //定义OS下的文件系统
#endif
#define FS_IN_RK27XX_SYS
//#define  BOOT_ONLY               //定义是否生成引导代码
#define FS_FILE_HANDLE_MALLOC   1


#define FS_MAX_VOLUME       8
#define FS_MAX_OPEN_FILE    16  // changed by phc, 排序时同时打开多个文件
#define FS_MAX_LFN_ENTRIES  0x14      /*最长就3*13个字符*/

#define FS_MAX_NAME_LENGTH  256    /*文件或目录名字(包括路径)的最大长度*/

#define FS_MAX_DIR_DEPTH    8
#define FS_MAX_FILENAME_LEN ((FS_MAX_LFN_ENTRIES * 13 * 2 + 2)/2)       //结尾的NUL占用2B
#define FS_LFN_SEQ_MASK     0x3f

#define FS_MAX_PATH_LEN  (2+FS_MAX_DIR_DEPTH*12+4)  // 短路径名长度

#if(FS_EMU_ENT == PC_VC_EMU)
#define __packed
#endif

#if(FS_EMU_ENT == ARM_ADS_EMU)
#undef  FS_OS_SUPPORT
#undef  FS_IN_RK27XX_SYS
#endif

#ifdef FS_IN_RK27XX_SYS
#include "stdio.h"

#include "Typedef.h"
#include "sysGlobal.h"

#include "hw_include.h"
#include "Support.h"

#define RK27XX_IO_MEMMAP    PORSCHE9_IO_MEMMAP

#define     uint8   INT8U
#define     int8    INT8S
#define     uint16  INT16U
#define     int16   INT16S
#define     uint32  INT32U
#define     int32   INT32S
#define     uint64  INT64U
#define     int64   INT64S
#define     bool    BOOL
//    #define     size_t;
#else

#define RK27XX_IO_MEMMAP    LDK_MMU_DISABLE

typedef     unsigned char       uint8;
typedef     signed char         int8;
typedef     unsigned short      uint16;
typedef     signed short        int16;
typedef     unsigned long       uint32;
typedef     signed long         int32;
typedef     unsigned long long  uint64;
typedef     signed long long    int64;
typedef     unsigned char       bool;
typedef     unsigned int        size_t;
#endif

#if 1

#ifndef read_XDATA8
#define     read_XDATA8(address)            (*((unsigned char volatile*)(address)))
#endif

#ifndef read_XDATA16
#define     read_XDATA16(address)               (*((unsigned short volatile*)(address)))
#endif

#ifndef write_XDATA8
#define     write_XDATA8(address, value)        (*((unsigned char volatile*)(address)) = value)
#endif

#ifndef write_XDATA16
#define     write_XDATA16(address, value)       (*((unsigned short volatile*)(address)) = value)
#endif

#ifndef read_XDATA32
#define     read_XDATA32(address)               (*((unsigned int volatile*)(address)))
#endif

#ifndef write_XDATA32
#define     write_XDATA32(address, value)       (*((unsigned int volatile*)(address)) = value)
#endif

#endif

#ifndef NULL
#define NULL    0
#endif

#ifndef TRUE
#define TRUE    1
#endif

#ifndef FALSE
#define FALSE   0
#endif

#ifndef OK
#define OK      0
#endif

#ifndef ERROR
#define ERROR   (1)
#endif


#define FS_FAT_SEC_SIZE         512
#define FS_LBL_MEDIACHANGED     0x0001


/* FDT文件属性 */
#define FS_ATTR_READ_ONLY       0x01
#define FS_ATTR_HIDDEN          0x02
#define FS_ATTR_SYSTEM          0x04
#define FS_ATTR_VOLUME_ID       0x08
#define FS_ATTR_LFN_ENTRY       0x0F      /* LFN entry attribute */
#define FS_ATTR_DIRECTORY       0x10
#define FS_ATTR_ARCHIVE         0x20


/* Global error codes */
#define FS_ERR_OK                 (int16)0x0000
#define FS_ERR_EOF                (int16)0xfff0
#define FS_ERR_DISKFULL           (int16)0xffe0
#define FS_ERR_INVALIDPAR         (int16)0xffd0
#define FS_ERR_WRITEONLY          (int16)0xffc0
#define FS_ERR_READONLY           (int16)0xffb0
#define FS_ERR_READERROR          (int16)0xffa0
#define FS_ERR_WRITEERROR         (int16)0xff90
#define FS_ERR_DISKCHANGED        (int16)0xff80
#define FS_ERR_CLOSE              (int16)0xff70

//文件跳转宏定义,与标准C语言定义保持一至
#define FS_SEEK_SET     0
#define FS_SEEK_CUR     1
#define FS_SEEK_END     2
#define FS_SEEK_REF     3


#define FS_O_RDONLY     0x001
#define FS_O_RDWR       0x002
#define FS_O_WRONLY     0x004
#define FS_O_CREAT      0x008
#define FS_O_APPEND     0x010
#define FS_O_TRUNC      0x020
#define FS_O_BINARY     0x040
#define FS_O_TEXT       0x080
#define FS_O_WFLAG      0x100


/* FDT类型 */
#define     FS_FILE_NOT_EXIST               0
#define     FS_FILE_DELETED                 0xe5
#define     FS_ESC_FDT                      0x05

/* 函数返回值 */
#define     FS_RETURN_OK                    0x00        /* 操作成功*/
#define     FS_NOT_FIND_DISK                0x01        /* 逻辑盘不存在*/
#define     FS_DISK_FULL                    0x02        /* 逻辑盘满*/
#define     FS_SECTOR_NOT_IN_CACHE          0x03        /* 扇区没有被cache  */
#define     FS_NOT_EMPTY_CACHE              0x04        /* 没有空闲cache*/
#define     FS_SECTOR_READ_ERR              0x05        /* 读扇区错误*/
#define     FS_CLUSTER_NOT_IN_DISK          0x06        /* 逻辑盘中没有此簇  */
#define     FS_NOT_FIND_FDT                 0x07        /* 没有发现文件(目录)*/
#define     FS_NOT_FAT_DISK                 0x08        /* 非FAT文件系统*/
#define     FS_FDT_OVER                     0x09        /* FDT索引超出范围*/
#define     FS_FDT_EXISTS                   0x0a        /* 文件(目录)已经存在*/
#define     FS_ROOT_FDT_FULL                0x0b        /* 根目录满*/
#define     FS_DIR_EMPTY                    0x0C        /* 目录空*/
#define     FS_DIR_NOT_EMPTY                0x0d        /* 目录不空*/
#define     FS_PATH_NOT_FIND                0x0e        /* 路径未找到*/
#define     FS_FAT_ERR                      0x0f        /* FAT表错误*/
#define     FS_FILE_NAME_ERR                0x10        /* 文件(目录)名错误*/
#define     FS_FILE_EOF                     0x11        /* 文件结束*/
#define     FS_FILE_LOCK                    0x12        /* 文件被锁定*/
#define     FS_NOT_FIND_FILE                0x13        /* 没有发现指定文件*/
#define     FS_NOT_FIND_DIR                 0x14        /* 没有发现指定目录*/
#define     FS_NOT_RUN                      0xfd        /* 命令未执行*/
#define     FS_BAD_COMMAND                  0xfe        /* 错误命令*/
#define     FS_PARAMETER_ERR                0xff        /* 非法参数*/


#define     FS_LBL_READ_ERR             (int)0xFC
#define     FS_LBL_WRITE_ERR            (int)0xFB
#define     FS_LBL_READ_API_ERR         (int)0xFA
#define     FS_LBL_WRITE_API_ERR        (int)0xF9
#define     FS_LBL_IOCTL_ERR            (int)0xF8
#define     FS_LBL_IOCTL_API_ERR        (int)0xF7
#define     FS_LBL_READ_CACHE_ERR       (int)0xF6
#define     FS_LBL_WRITE_CACHE_ERR      (int)0xF5
#define     FS_LBL_CACHE_NULL_ERR       (int)0xF4
#define     FS_LBL_MEDIA_INIT_ERR       (int)0xF3
#define     FS_LBL_MEDIA_INIT_API_ERR   (int)0xF2


#define     FS_FDT_WRITE_ERR            (int)0xE0

#define     FS_API_GET_LFN_ERR          (int)0xE1
#define     FS_FAT_CREATE_ERR           (int)0xE0

/* 簇类型 */
#define     FS_EMPTY_CLUS               0
#define     FS_EMPTY_CLUS_1             1
#define     FS_BAD_CLUS                 0x0ffffff7L
#define     FS_EOF_CLUS_1               0x0ffffff8L
#define     FS_EOF_CLUS_END             0x0fffffffL


#define FS_FAT12   12
#define FS_FAT16   16
#define FS_FAT32   32

#define MEDIUM_STATUS_RDY               0x00
#define MEDIUM_STATUS_BUSY              0x01
#define MEDIUM_STATUS_NOON              0x02

#define IO_CTL_GET_CAPACITY             0x01
#define IO_CTL_GET_MEDIUM_START_SEC     0x02
#define IO_CTL_CACHE_WRITE_BACK         0x03
#define IO_CTL_MEDIUM_CHANGE            0x04
#define IO_CTL_GET_MEDIUM_STATUS        0x05
#define IO_CTL_FLUSH_CACHE              0x06

#ifdef FS_OS_SUPPORT
#define FS_OBTAIN_FILE_SEM  RockSemObtain(&gFatFlashSem)
#define FS_RELEASE_FILE_SEM RockSemRelease(&gFatFlashSem)
#else
#define FS_OBTAIN_FILE_SEM
#define FS_RELEASE_FILE_SEM
#endif

#ifdef FS_OS_SUPPORT
#if(defined(BOARD))
#define OBTAIN_FLASH_CS_SEM     OSSchedLock(); //{RockSemObtain(&gHwIOmuxI2CSem);}
#define RELEASE_FLASH_CS_SEM    OSSchedUnlock();//{RockSemRelease(&gHwIOmuxI2CSem);}
#else
#define OBTAIN_FLASH_CS_SEM
#define RELEASE_FLASH_CS_SEM
#endif
#else
#define OBTAIN_FLASH_CS_SEM
#define RELEASE_FLASH_CS_SEM
#endif

#include "fs_clib.h"
#include "fs_dev.h"
#include "fs_lbl.h"
#include "fs_api.h"
#include "fs_fat.h"
#include "fs_fdt.h"

#endif

⌨️ 快捷键说明

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