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

📄 sd.h

📁 <B>SMSC USB2.0 Flash硬盘驱动源码</B>
💻 H
📖 第 1 页 / 共 2 页
字号:
   _mcu_register_wr(x_sram_data, temp_buf[13]);    \
   _mcu_register_wr(x_sram_data, temp_buf[14]);    \
   _mcu_register_wr(x_sram_data, temp_buf[15]);    \
   _mcu_register_wr(x_sram_data, temp_buf[16]);    \
   _mcu_register_wr(x_sram_data, temp_buf[17]);    \
   _mcu_register_wr(x_sram_data, temp_buf[18]);    \
   _mcu_register_wr(x_sram_data, temp_buf[19]);    \
   _mcu_register_wr(x_sram_data, temp_buf[20]);    \
   _mcu_register_wr(x_sram_data, temp_buf[21]);    \
   _mcu_register_wr(x_sram_data, temp_buf[22]);    \
   _mcu_register_wr(x_sram_data, temp_buf[23]);    \
   _mcu_register_wr(x_sram_data, temp_buf[24]);    \
   _mcu_register_wr(x_sram_data, temp_buf[25]);    \
   _mcu_register_wr(x_sram_data, temp_buf[26]);    \
   _mcu_register_wr(x_sram_data, temp_buf[27]);    \
   _mcu_register_wr(x_sram_data, temp_buf[28]);    \
   _mcu_register_wr(x_sram_data, temp_buf[29]);    \
   _mcu_register_wr(x_sram_data, temp_buf[30]);    \
   _mcu_register_wr(x_sram_data, temp_buf[31]);    \
   _mcu_register_wr(x_sram_data, temp_buf[32]);    \
   _mcu_register_wr(x_sram_data, temp_buf[33]);    \
   _mcu_register_wr(x_sram_data, temp_buf[34]);    \
   _mcu_register_wr(x_sram_data, temp_buf[35]);    \
   _mcu_register_wr(x_sram_data, temp_buf[36]);    \
   _mcu_register_wr(x_sram_data, temp_buf[37]);    \
   _mcu_register_wr(x_sram_data, temp_buf[38]);    \
   _mcu_register_wr(x_sram_data, temp_buf[39]);    \
   _mcu_register_wr(x_sram_data, temp_buf[40]);    \
   _mcu_register_wr(x_sram_data, temp_buf[41]);    \
   _mcu_register_wr(x_sram_data, temp_buf[42]);    \
   _mcu_register_wr(x_sram_data, temp_buf[43]);    \
   _mcu_register_wr(x_sram_data, temp_buf[44]);    \
   _mcu_register_wr(x_sram_data, temp_buf[45]);    \
   _mcu_register_wr(x_sram_data, temp_buf[46]);    \
   _mcu_register_wr(x_sram_data, temp_buf[47]);    \
   _mcu_register_wr(x_sram_data, temp_buf[48]);    \
   _mcu_register_wr(x_sram_data, temp_buf[49]);    \
   _mcu_register_wr(x_sram_data, temp_buf[50]);    \
   _mcu_register_wr(x_sram_data, temp_buf[51]);    \
   _mcu_register_wr(x_sram_data, temp_buf[52]);    \
   _mcu_register_wr(x_sram_data, temp_buf[53]);    \
   _mcu_register_wr(x_sram_data, temp_buf[54]);    \
   _mcu_register_wr(x_sram_data, temp_buf[55]);    \
   _mcu_register_wr(x_sram_data, temp_buf[56]);    \
   _mcu_register_wr(x_sram_data, temp_buf[57]);    \
   _mcu_register_wr(x_sram_data, temp_buf[58]);    \
   _mcu_register_wr(x_sram_data, temp_buf[59]);    \
   _mcu_register_wr(x_sram_data, temp_buf[60]);    \
   _mcu_register_wr(x_sram_data, temp_buf[61]);    \
   _mcu_register_wr(x_sram_data, temp_buf[62]);    \
   _mcu_register_wr(x_sram_data, temp_buf[63]);    \
}

#define _sd_wait_48b_resp();                                                     \
{                                                                                \
   sdc_mode_ctl = 0;                                                             \
   trace1(0, sd, 0, "The stat register %02x",_mcu_register_rd(x_sdc_stat));    \
   sdc_mode_ctl |= kbm_sdc_cmd_48b_rsp;                                          \
   trace1(0, sd, 0, "The sdc_mode_ctl register %02x",sdc_mode_ctl);            \
   sdc_wait_status_with_timeout(kbm_sdc_stat_rsp_rdy,300);                       \
   trace1(0, sd, 0, "The stat register %02x",_mcu_register_rd(x_sdc_stat));    \
}


//Define the various bitmasks for SDC

//For the register sdc_mode_ctl (SDC_MODE_CTL)
#define kbm_sdc_sd_dat            0x20
#define kbm_sdc_rsp_crc_ds        0x10
#define kbm_sdc_mode_cmd          0x0f
#define kbm_sdc_cmd_no_rsp        0x01
#define kbm_sdc_cmd_48b_rsp       0x02
#define kbm_sdc_cmd_136b_rsp      0x04
#define kbm_sdc_cmd_dflt          0x00

//For the register sdc_ctl (SDC_CTL)
#define kbm_sdc_r2_crc_136        0x10
#define kbm_sdc_crc_dis           0x08
#define kbm_sdc_bus_type          0x04
#define kbm_sdc_id_data           0x02
#define kbm_sdc_device_type       0x01


#if (k_log_lun_sd < k_max_log_lun)
//------------------------------------------------------------------------------
// 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_sdc

void sd_init_controller() reentrant;
#undef _v_lun_initialize_controller
#define _v_lun_initialize_controller sd_init_controller
//+ ----------------------------------------------------------------------------
// override dfa_lun_reset
//- ----------------------------------------------------------------------------
void dfa_sd_reset() reentrant;
#undef _v_dfa_lun_reset_media
#define _v_dfa_lun_reset_media dfa_sd_reset
//------------------------------------------------------------------------------
// override dfa_lun_initialize
//------------------------------------------------------------------------------
void dfa_sd_initialize() reentrant;
#undef _v_dfa_lun_initialize_media
#define _v_dfa_lun_initialize_media dfa_sd_initialize

//+ ------------------------------------------------------------------------------
// override msc_inquiry
//- ------------------------------------------------------------------------------
void dfa_sd_identify_device() reentrant ;
#undef _v_dfa_lun_identify_media
#define _v_dfa_lun_identify_media dfa_sd_identify_device
//+ ------------------------------------------------------------------------------
// override sd_read
//- ------------------------------------------------------------------------------
void dfa_sd_read() reentrant ;
#undef _v_dfa_lun_read
#define _v_dfa_lun_read dfa_sd_read

//+ ------------------------------------------------------------------------------
// override sd_write
//- ------------------------------------------------------------------------------
void dfa_sd_write() reentrant ;
#undef _v_dfa_lun_write
#define _v_dfa_lun_write dfa_sd_write
//+ ------------------------------------------------------------------------------
// override sd_verify
//- ------------------------------------------------------------------------------
void dfa_sd_verify(void) reentrant ;
#undef _v_dfa_lun_verify
#define _v_dfa_lun_verify dfa_sd_verify


// index into the vtbl
typedef uint8 t_sd_vtbl_ix ;
typedef enum e_sd_vtbl_entry
{
   k_sd_vtbl_sz = k_lun_vtbl_sz
} ;

// sd class definition:
#define _v_sd _v_lun

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

#endif

#define k_sdc_cmd_read_mult_blocks    0x52
#define k_sdc_cmd_write_mult_blocks   0x59
#define k_sdc_cmd_read_sgl_block      0x51
#define k_sdc_cmd_write_sgl_block     0x58

//sd states
#define k_sdc_state_idle            0
#define k_sdc_state_ready           1
#define k_sdc_state_ident           2
#define k_sdc_state_stby            3
#define k_sdc_state_tran            4
#define k_sdc_state_data            5
#define k_sdc_state_rcv             6
#define k_sdc_state_prg             7
#define k_sdc_state_dis             8

void sd_wait_48b_resp() reentrant;
void sd_get_status() reentrant;
void sdc_read_rsp(uint8 length) reentrant;
void sd_display_rsp_buf() reentrant;
void sd_pre_cmd() reentrant;
void sdc_wait_status_with_timeout(uint8 mask, uint16 ticks) reentrant;
void sd_pre_erase() reentrant;
t_result sdc_wait_irq_with_timeout(uint8 irq_name, uint16 ticks) reentrant;
t_result sd_read_write_end_xfer() reentrant;
t_result sd_read_write_begin_xfer() reentrant;
t_result sd_read_end_burst() reentrant;
t_result sd_read_intra_burst() reentrant;
t_result my_fmc_transfer() reentrant;
t_result sd_read_write_end_xfer() reentrant;
t_result sd_write_begin_burst() reentrant;
t_result sd_read_write_begin_split() reentrant;

#define k_single_data_line  1  /* SDC single data line */
#define k_four_data_lines   2  /* SDC four data lines */
#else
#error "warning: header included too many times!"
#endif  // __sd_dot_h__

⌨️ 快捷键说明

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