?? nf_drv.h
字號:
/*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 + -