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

📄 sm.h

📁 <B>SMSC USB2.0 Flash硬盘驱动源码</B>
💻 H
📖 第 1 页 / 共 2 页
字号:
//------------------------------------------------------------------------------
// smart media library options
//------------------------------------------------------------------------------
#define k_sm_option_rderr_reassign  1  /* Reassign with Read Error */
#define k_sm_option_l2p_err_erase   1  /* BlockErase for Contradicted L2P Table */
#define k_sm_option_use_hw_ecc      0  /* 0:do sw ecc, 1:use hw ecc support */


/***************************************************************************
SmartMedia Command & Status Definition
***************************************************************************/
/* SmartMedia Command */
#define k_sm_read         0x00 
#define k_sm_read2        0x01 
#define k_sm_write        0x10 
#define k_sm_read_redt    0x50 
#define k_sm_erase1       0x60 
#define k_sm_read_status  0x70 
#define k_sm_read_id      0x90 
#define k_sm_write_data   0x80 
#define k_sm_erase2       0xD0 
#define k_sm_reset_chip   0xFF 

// new nand flash command opcodes
#define k_nand_cmd_read_for_data      0x30
#define k_nand_cmd_read_for_copy      0x35
#define k_nand_cmd_read_cache_next    0x31  /* toshiba only */
#define k_nand_cmd_read_cache_final   0x3f  /* toshiba only */
#define k_nand_cmd_read_offset_addr   0x05
#define k_nand_cmd_read_offset_data   0xE0
#define k_nand_cmd_write_cache_data   0x85
#define k_nand_cmd_write_cache        0x15
#define k_nand_cmd_write_page         k_sm_write
#define k_nand_cmd_read_id            0x90 
#define k_nand_cmd_read_id_ex         0x91
#define k_nand_cmd_reset              k_sm_reset_chip 


/* SmartMedia Status */
#define kbm_sm_status_write_failed    0x01  /* 0:Pass, 1:Fail */
#define kbm_sm_status_suspended       0x20  /* 0:Not Suspended, 1:Suspended */
#define kbm_sm_status_ready           0x40  /* 0:Busy, 1:Ready */
#define kbm_sm_status_n_wr_protect    0x80  /* 0:Protect, 1:Not Protect */

/* SmartMedia Busy Time (1bit:0.1ms) */
#define k_sm_busy_programming_timeout 21  /* tPROG : 20ms ----- Program Time */
#define k_sm_busy_erase_timeout       400 /* tBERASE: 400ms ----- Block Erase Time */
#define k_sm_busy_read_timeout        2   /* tR : 100us ----- Data transfer Time */
#define k_sm_busy_reset_timeout       7   /* tRST : 6ms ----- Device Resetting Time */
// new nand flash timeouts
#define k_nand_write_page_timeout     2   /* 700 usecs max */
#define k_nand_reset_timeout          7   /* tRST : 6ms ----- Device Resetting Time */


/* Hardware Timer (1bit:0.1ms) */
#define k_sm_busy_power_up_timeout    301 // 300ms ------ Power On Wait Time TIME_PON*/
#define k_sm_card_check_poll_interval 21  // 20ms  ------ Card Check Interval Timer CDCHK */
#define k_sm_time_wp_poll_interval    6   // 5ms  ------ WP Check Interval Timer */

//------------------------------------------------------------------------------
// Redundant Data (aka extra data) buffer field offsets
//------------------------------------------------------------------------------
#define k_ix_redt_data_status   0x04
#define k_ix_redt_block_status  0x05
#define k_ix_redt_lba1_hi       0x06
#define k_ix_redt_lba1_lo       0x07
#define k_ix_redt_lba2_hi       0x0B
#define k_ix_redt_lba2_lo       0x0C
#define k_ix_redt_ecc1_0        0x0D
#define k_ix_redt_ecc1_1        0x0E
#define k_ix_redt_ecc1_2        0x0F
#define k_ix_redt_ecc2_0        0x08
#define k_ix_redt_ecc2_1        0x09
#define k_ix_redt_ecc2_2        0x0A

// export the buffer for sm_ecc usage
extern xdata uint8  x_sm_redt_data[] ;


//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// SmartMedia lun specific attribute
#define kbm_sm_media_addr_4cyc  kbm_lun_media_custom0 

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern xdata uint8 nand_id_maker ;
extern xdata uint8 nand_id_device ;
extern xdata uint8 nand_id_3;
extern xdata uint8 nand_id_4;
extern xdata uint8 nand_id_5;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern xdata uint8 g_nand_rd_addr_msb ;
extern xdata uint8 g_nand_rd_addr_mid ;
extern xdata uint8 g_nand_rd_addr_lsb ;
extern xdata uint8 g_nand_wr_addr_msb ;
extern xdata uint8 g_nand_wr_addr_mid ;
extern xdata uint8 g_nand_wr_addr_lsb ;

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
extern xdata uint8 g_nand_rw_speed ;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern void nand_rd_va2pa() reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern void nand_wr_va2pa() reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern void nand_incr_addr() reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
t_result sm_redt_data_wr(void) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
t_result sm_identify_media_format(void)reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void sm_soft_reset(void) reentrant ;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint8 sm_read_id(void) reentrant ;

//+-----------------------------------------------------------------------------
//------------------------------------------------------------------------------
void sm_read_id_ex(void) reentrant ;

//+-----------------------------------------------------------------------------
//------------------------------------------------------------------------------
void sm_pio_rd_buf(uint8 *databuf) reentrant ;

//-----------------------------------------------------------------------------
t_result sm_media_check_format(void)reentrant;

//-----------------------------------------------------------------------------
t_result sm_media_seek_cis(void) reentrant;

//-----------------------------------------------------------------------------
t_result sm_read_cis_sect(uint8 *)reentrant;

//-----------------------------------------------------------------------------
t_result sm_validate_cis(uint8 *) reentrant ;

//-----------------------------------------------------------------------------
t_result sm_wait_rdy_with_timeout(uint16 ) reentrant;

//-----------------------------------------------------------------------------
void sm_synch_hw_buff_to_redt_buf(void) reentrant;

//------------------------------------------------------------------------------
void sm_set_write_mode_extra_data(void) reentrant ;

//------------------------------------------------------------------------------
void sm_set_write_mode_page_data(void) reentrant ;

//------------------------------------------------------------------------------
void sm_correct_sram_bit(uint8 buffer, uint16 offset, uint8 ix_bit) reentrant;

//------------------------------------------------------------------------------
t_result sm_check_data_status(uint8 start_page, uint8 count) reentrant;

//------------------------------------------------------------------------------

t_result sm_write_end_split(void) reentrant;
//------------------------------------------------------------------------------

t_result sm_read_end_burst(void) reentrant;
//------------------------------------------------------------------------------

t_result sm_write_begin_burst(void) reentrant;


//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// sm lun overrides
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// define instance method of enabling the lun mux.  since thereis already
// a mechanism for doing this, I'm simply going to use it (defined in fmc.h)
// instead of wrapping a function call in this class (which is the more "OO" pure way
// of encapsulating the "class" methods) to that function.
//
// note it is a FUNCTION not a DFA!!!!
//-------------------------------------------------------------------------------
#undef _v_lun_enable_mux
#define _v_lun_enable_mux fmc_select_smc

//------------------------------------------------------------------------------
void sm_reset_controller(void) reentrant;
#undef _v_lun_reset_controller
#define _v_lun_reset_controller sm_reset_controller

//------------------------------------------------------------------------------
void sm_initialize_controller(void) reentrant;
#undef _v_lun_initialize_controller
#define _v_lun_initialize_controller sm_initialize_controller

//------------------------------------------------------------------------------
void dfa_sm_initialize_media(void) reentrant;
#undef _v_dfa_lun_initialize_media
#define _v_dfa_lun_initialize_media dfa_sm_initialize_media

//------------------------------------------------------------------------------
void dfa_sm_reset_media(void) reentrant;
#undef _v_dfa_lun_reset_media
#define _v_dfa_lun_reset_media dfa_sm_reset_media

//--------------------------------------------------------------------------------
void dfa_sm_identify_media(void) reentrant;
#undef _v_dfa_lun_identify_media
#define _v_dfa_lun_identify_media dfa_sm_identify_media

//------------------------------------------------------------------------------
void sm_dfa_read(void) reentrant ;
#undef _v_dfa_lun_read
#define _v_dfa_lun_read sm_dfa_read

//------------------------------------------------------------------------------
void sm_dfa_write(void) reentrant ;
#undef _v_dfa_lun_write
#define _v_dfa_lun_write sm_dfa_write

//------------------------------------------------------------------------------
void sm_dfa_verify(void) reentrant ;
#undef _v_dfa_lun_verify
#define _v_dfa_lun_verify sm_dfa_verify

//------------------------------------------------------------------------------
#undef _v_dfa_lun_erase_media
#define _v_dfa_lun_erase_media media_dfa_erase

//------------------------------------------------------------------------------
#undef _v_dfa_lun_report_media_geometry
#define _v_dfa_lun_report_media_geometry media_dfa_report_media_geometry



// index into the vtbl
typedef uint8 t_sm_vtbl_ix ;
typedef enum e_sm_vtbl_entry
{
  k_sm_vtbl_sz = k_lun_vtbl_sz
} ;

// sm class definition:
#define _v_sm _v_lun

// sm class vtable declaration & vtable size declaration
extern code  _vtbl_decl(sm) ;

#else
#error "header file 'sm.h' included too many times"
#endif //  _sm_h_

⌨️ 快捷键说明

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