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

📄 nf_drv.h

📁 ATMEL 89c51sndc mp3外接硬盘源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*H**************************************************************************
* NAME:         nf_drv.h         
*----------------------------------------------------------------------------
* Copyright (c) 2002 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      snd1c-demo-hdd-0_2_0      
* REVISION:     1.1     
*----------------------------------------------------------------------------
* PURPOSE:        This file contains the NF driver definitions
*
*****************************************************************************/

#ifndef _NF_DRV_H_
#define _NF_DRV_H_

/*_____ I N C L U D E S ____________________________________________________*/


/*_____ M A C R O S ________________________________________________________*/

/************************** Read Command ************************************/
#define NF_READ_A_AREA_CMD           0x00
#define NF_READ_B_AREA_CMD           0x01
#define NF_READ_C_AREA_CMD           0x50
/************************** Read ID Command *********************************/
#define NF_READ_ID_CMD               0x90
#define NF_RESET_CMD                 0xFF
/************************** Program command *********************************/
#define NF_SEQUENTIAL_DATA_INPUT_CMD  0x80
#define NF_PAGE_PROGRAM_CMD           0x10
#define NF_COPY_BACK_FROM_PAGE        0x00
#define NF_COPY_BACK_TO_PAGE          0x8A
/************************** Erase command ***********************************/
#define NF_BLOCK_ERASE_CMD           0x60
#define NF_BLOCK_ERASE_CONFIRM_CMD   0xD0
/************************** Read Status command *****************************/
#define NF_READ_STATUS_CMD           0x70

#define NF_BUFFER_SIZE              (Uint16)(80)



/*_____ D E F I N I T I O N ________________________________________________*/

/* Structure to store the correspondance between logical and physical block */
typedef struct 
{
  Byte   zone;
  Uint16 logical_block;
  Uint16 physical_block_odd;
  Uint16 physical_block_even;
} t_reassign_block;

typedef struct 
{
  Uint16 even;
  Uint16 odd;
} t_free_blocks;

typedef struct 
{
  Union16 even;
  Union16 odd;
} t_lut;





/* NAND-FLASH DEFINITION */

#define SAMSUNG_NF

/* This value are only for 16Mbytes and upper SMARTMEDIA Card capacities   */
#define NF_PAGE_PER_BLOCK (32)    /* pages_block value: pages in a block   */ 
#define NF_DATA_SIZE      (512)   /* data_size   value: data_size in bytes */
#define NF_SPARE_SIZE     (16)    /* spare_size  value: spare_size in bytes*/
#define NF_BLOCK_PER_ZONE (1024)  /* 1024 block per size                   */


#ifdef NF_32
#define NF_TYPE               (Byte)(1)
#define NF_SIZE               (Byte)(32)
#define NF_ZONE_MAX           (Byte)(1)
#define NF_SECTOR_SIZE        (Uint32)(63999)
#define NF_4_CYCLE_ADDRESS    (0)
#endif

#ifdef NF_64
#define NF_TYPE               (Byte)(2)
#define NF_SIZE               (Byte)(64)
#define NF_ZONE_MAX           (Byte)(2)
#define NF_SECTOR_SIZE        (Uint32)(127999)
#define NF_4_CYCLE_ADDRESS    (0) 
#endif

#ifdef NF_128
#define NF_TYPE               (Byte)(3)
#define NF_SIZE               (Byte)(128)
#define NF_ZONE_MAX           (Byte)(4)
#define NF_SECTOR_SIZE        (Uint32)(255999)
#define NF_4_CYCLE_ADDRESS    (1)
#endif

#ifdef NF_256
#define NF_TYPE               (Byte)(4)
#define NF_SIZE               (Byte)(128)
#define NF_ZONE_MAX           (Byte)(8)
#define NF_SECTOR_SIZE        (Uint32)(511999)
#define NF_4_CYCLE_ADDRESS    (1)
#endif

/* SCSI DEFINITION FOR SMARTMEDIA */
#define NF_BLOCK_SIZE     ((Uint32)(NF_DATA_SIZE))
#define NF_DISK_SIZE      ((Uint32)(NF_SECTOR_SIZE))

/* Low Level routine */
#define Nf_rd_byte_odd()                  (nf_data_odd)
#define Nf_wr_byte_odd(b)                 (nf_data_odd = b)
#define Nf_rd_byte_even()                 (nf_data_even)
#define Nf_wr_byte_even(b)                (nf_data_even = b)


#define Nf_send_command_even(command)     (nf_send_cmd_even = (Byte)command)
#define Nf_send_address_even(address)     (nf_send_add_even = (Byte)address)
#define Nf_send_command_odd(command)      (nf_send_cmd_odd = (Byte)command)
#define Nf_send_address_odd(address)      (nf_send_add_odd = (Byte)address)

#define Nf_wait_busy_odd()          while (!NF_BSY_ODD)
#define Nf_wait_busy_even()         while (!NF_BSY_EVEN)

#if (NF_4_CYCLE_ADDRESS == 1)
  #define Nf_send_cl_address_even(add_sect, add_byte)                                    \
                                      Nf_send_address_even ( add_byte );                 \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );    \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );    \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] ) 
  
  #define Nf_read_open_A_area_even(add_sect, add_byte )                                  \
                                      Nf_send_command_even (NF_READ_A_AREA_CMD);         \
                                      Nf_send_address_even ( add_byte );                 \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );    \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );    \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] );    \
                                      Nf_wait_busy_even()
  
  #define Nf_read_open_B_area_even(add_sect, add_byte )                                  \
                                      Nf_send_command_even (NF_READ_B_AREA_CMD);         \
                                      Nf_send_address_even ( add_byte );                 \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );    \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );    \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] );    \
                                      Nf_wait_busy_even()
  
  #define Nf_read_open_C_area_even(add_sect, add_byte )                                  \
                                      Nf_send_command_even (NF_READ_C_AREA_CMD);         \
                                      Nf_send_address_even ( add_byte );                 \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );    \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );    \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] );    \
                                      Nf_wait_busy_even()
  
  #define Nf_write_open_A_area_even(add_sect, add_byte)                                    \
                                      Nf_send_command_even (NF_READ_A_AREA_CMD);           \
                                      Nf_send_command_even (NF_SEQUENTIAL_DATA_INPUT_CMD); \
                                      Nf_send_address_even ( add_byte );                   \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );      \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );      \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] )
  
  #define Nf_write_open_B_area_even(add_sect, add_byte)                                    \
                                      Nf_send_command_even (NF_READ_B_AREA_CMD);           \
                                      Nf_send_command_even (NF_SEQUENTIAL_DATA_INPUT_CMD); \
                                      Nf_send_address_even ( add_byte );                   \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[3] );      \ 
                                      Nf_send_address_even ( ((Byte*)&add_sect)[2] );      \
                                      Nf_send_address_even ( ((Byte*)&add_sect)[1] )
  

⌨️ 快捷键说明

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