📄 sm.h
字号:
//------------------------------------------------------------------------------
// 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 + -