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

📄 virtual_mem.h

📁 at89c5131 实现 mass storage 的源码.
💻 H
字号:
//! @file virtual_mem.h,v
//!
//! Copyright (c) 2004 Atmel.
//!
//! Use of this program is subject to Atmel's End User License Agreement.
//! Please read file license.txt for copyright notice.
//!
//! @brief This file is a template for writing C software programs.
//!
//! This file contains the C51 RAM called CRAM management routines which are
//! used for Mass storage when doing ISP 
//! This file calls routines of the cram_mem.c file 
//!
//! @version 1.5 c5131-mass-storage-virtual-1_0_6 $Id: virtual_mem.h,v 1.5 2005/03/22 11:50:22 lguilhau Exp $
//!
//! @todo
//! @bug
#ifndef _VMEM_H_
#define _VMEM_H_

#include "conf\conf_access.h"
#include "modules\control_access\ctrl_status.h"

//_____ D E F I N I T I O N S ______________________________________________

#define MEM_BASE_ADDRESS       0x4000

//! FAT specification
#define  ENTRY_SIZE           32    // size of entrie in byte

//! Value of virtual PBR
#define  VMEM_SECTOR_SIZE     512   // SECTOR = 512B
#define  VMEM_CLUSTER_SIZE    1     // Number of sector per cluster
#define  VMEM_RESERVED_SIZE   1     // Number of reserved sectors in the Reserved region of the volume starting at the first sector (FAT sector) of the volume 
                                    // It must be 1 for FAT 12 and 16 and 32 for FAT 32
#define  VMEM_NB_FATS         1     // number of FAT, it must be 2 for support all systems
#define  VMEM_NB_ROOT_ENTRY   16    // the count of 32 byte directory entries in the root directory (32*this value = must be a multiple of sector size)
                                    // It must be 512 for FAT 12 and 16 and 0 for FAT 32
#define  VMEM_MEDIA_TYPE      0xF8  // hard disk device (not removable=0xF8 or removable=0xF0), the standard value is 0xF8
#define  VMEM_SIZE_FAT        1     // number of sector per fat
// Physical structure of disk
#define  VMEM_SECT_PER_TRACK  1     // number of sector by track (after 8?)
#define  VMEM_NB_HEAD         1     // number of header

#define  VMEM_NB_HIDDEN_SECT  0     // This field should always be zero on media that not partitioned
#define  VMEN_DRIVE_NUMBER    0x80  // It must be 0x00 for floppy disk and 0x80 for hard disk


// First sector of the disk virtual (this disk isn't partitioned, only one partion)
#define  PBR_SECTOR           (0)
#define  FAT_SECTOR           (PBR_SECTOR  + VMEM_RESERVED_SIZE)
#define  ROOT_SECTOR          (FAT_SECTOR  + (VMEM_SIZE_FAT*VMEM_NB_FATS))
#define  FILE_SECTOR          (ROOT_SECTOR + ((ENTRY_SIZE*VMEM_NB_ROOT_ENTRY) / VMEM_SECTOR_SIZE))                   // 1(sector) = size root dir 

#define  FILE_SIZE            30     // Nb cluster disponible

// Computed the size of virtual mem
#define  VMEM_NB_SECTOR       ((FILE_SIZE * VMEM_CLUSTER_SIZE) + FILE_SECTOR)


#if (VMEM_NB_SECTOR > 0xFF)
#  error the size of the volume > 512B * 0xFF
#endif

#define vmem_write(offset,data_to_write)       (__api_wr_code_byte(offset, data_to_write))

#define _COMMAND_WR_CODE_BYTE		13
#define _COMMAND_WR_CODE_PAGE		13


//---- CONTROL FONCTIONS ----

Ctrl_status    virtual_test_unit_ready(void);
Ctrl_status    virtual_read_capacity( U32 _MEM_TYPE_SLOW_ *u32_nb_sector );
Bool           virtual_wr_protect(void);
Bool           virtual_removal(void);


//---- ACCESS DATA FONCTIONS ----

// Standard fonctions for open in read/write mode the device
Ctrl_status    virtual_read_10( U32 addr , U16 nb_sector );
Ctrl_status    virtual_write_10( U32 addr , U16 nb_sector );


//** If your device transfer have a specific transfer for USB (Particularity of Chejudo product, or bootloader)
   #include "lib_mcu\usb\usb_drv.h"    // In this case the driver must be know the USB access
   Ctrl_status virtual_usb_read( void );
   Ctrl_status virtual_usb_write( void );

Uchar __api_wr_code_byte (Uchar xdata* , Uchar);

Uchar __api_wr_code_page_fix (Uchar xdata* pt_code, Uchar xdata* pt_xram, Uchar nb_data);

#endif   // _VMEM_H_

⌨️ 快捷键说明

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