00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef SDMODULES
00020 #define SDMODULES
00021
00022 #include "type.h"
00023
00024 typedef enum {
00025 SD_OK = 0,
00026 SD_NOT_READY,
00027 SD_NOT_PRESENT,
00028 SD_CLK_E,
00029 SD_WRITE_E,
00030 SD_READ_E,
00031 SD_READ_DMA_E,
00032 SD_UNKNOWN_E,
00033 SD_WRONG_CARD
00034 } SRESULT;
00035
00036 typedef struct
00037 {
00038 UINT16 rca;
00039 UINT8 isSDHC;
00040 UINT32 size;
00041
00042 UINT32 sector_count;
00043 UINT32 erase_size;
00044 } SDCardData;
00045
00046
00047 #define SD_DATAline 4
00048 #define SD_CMDline 2
00049 #define SD_All 1
00050
00051
00052 #define CMD0 0
00053 #define CMD1 1
00054 #define CMD2 2
00055 #define CMD3 3
00056 #define CMD4 4
00057 #define CMD5 5
00058 #define CMD6 6
00059 #define CMD7 7
00060 #define CMD8 8
00061 #define CMD9 9
00062 #define CMD10 10
00063 #define CMD12 12
00064 #define CMD13 13
00065 #define CMD15 15
00066 #define CMD16 16
00067 #define CMD17 17
00068 #define CMD18 18
00069 #define CMD23 23
00070 #define CMD24 24
00071 #define CMD25 25
00072 #define CMD27 27
00073 #define CMD28 28
00074 #define CMD29 29
00075 #define CMD30 30
00076 #define CMD32 32
00077 #define CMD33 33
00078 #define CMD38 38
00079 #define CMD42 42
00080 #define CMD50 50
00081 #define CMD52 52
00082 #define CMD53 53
00083 #define CMD55 55
00084 #define CMD56 56
00085 #define CMD57 57
00086
00087 #define ACMD6 6
00088 #define ACMD13 13
00089 #define ACMD22 22
00090 #define ACMD23 23
00091 #define ACMD41 41
00092 #define ACMD42 42
00093 #define ACMD51 51
00094
00095
00096 #define NORM_CMD 0x00
00097 #define wResp_CMD 0x02
00098 #define R2_Resp_CMD 0x01
00099 #define R1bR5b_Resp_CMD 0x03
00100
00101
00102
00103 #define abort_cmd 0xC0
00104 #define resume_cmd 0x80
00105 #define suspend_cmd 0x40
00106 #define normal_cmd 0x00
00107 #define data_present 0x20
00108 #define cmd_index_chk 0x10
00109 #define cmd_crc_chk 0x08
00110 #define cmd_check cmd_index_chk|cmd_crc_chk
00111
00112
00113 #define no_resp 0x00
00114 #define r1_resp 0x02
00115 #define r1b_resp 0x03
00116 #define r2_resp 0x01
00117 #define r3_resp 0x02
00118 #define r6_resp 0x02
00119 #define r7_resp 0x02
00120
00121
00122
00123 #define TMR_DMA_EN 1<<0
00124 #define TMR_BLKCNT_EN 1<<1
00125 #define TMR_AUTOCMD12_EN 1<<2
00126 #define TMR_RD_EN 1<<4
00127 #define TMR_MULTI_EN 1<<5
00128
00129
00130
00131 void SD_clear_int_1130(UINT8 d);
00132 void SD_clear_int_1132(UINT8 d);
00133 void SD_clear_int(void);
00134 void SD_clear_int_ff(void);
00135 UINT8 SD_wait_cmd_complete(void);
00136 UINT8 SD_wait_cmd_complete_val(UINT8 val);
00137 UINT8 SD_wait_cmd_resp_check(void);
00138
00139 UINT8 Init_SD(SDCardData *sdcd);
00140 UINT8 SD_init(SDCardData *sdcd);
00141 UINT8 Select_card(SDCardData *sdcd);
00142 UINT8 Deselect_card(void);
00143 UINT32 SD_Get_CSD(SDCardData *sdcd);
00144
00145 UINT8 SD_reset_quick(UINT8 reset_type);
00146 UINT8 SD_reset(UINT8 reset_type);
00147 void SD_Power_On(void);
00148 void SD_Power_Off(void);
00149 void SD_Clck_Off(void);
00150 UINT8 SD_Clck_Ctrl(char value);
00151 UINT8 Card_Detect(void);
00152 UINT8 set_SD_parameters(UINT16 rca);
00153 UINT32 get_cardstatus(UINT16 rca);
00154
00155 UINT8 SD_Send_CMD(UINT8 cmd, UINT32 cmd_argu, UINT8 cmd_resp_type);
00156 void SD_Send_appCMD(UINT16 rca, UINT8 cmd, UINT32 cmd_argu, UINT8 cmd_resp_type);
00157 void SD_send_csd(UINT16 rca);
00158 UINT8 SD_xfer512bytes(UINT32 address);
00159 UINT8 SD_read512bytes(UINT32 SD_data_address);
00160
00161 UINT8 SD_csd(UINT16 rca);
00162 UINT8 SD_write(SDCardData *sdcd, UINT32 LBA_address,const UINT8* buf,UINT8 count) ;
00163 UINT8 SD_read(SDCardData *sdcd, UINT32 LBA_address,UINT8* buf,UINT8 count, UINT8 bToSSDMem);
00164
00165 UINT8 SD_read_multiple(SDCardData *sdcd, UINT32 LBA_address,UINT8* buf,UINT8 rcount, UINT16 count);
00166 UINT8 SD_write_multiple(SDCardData *sdcd, UINT32 LBA_address,const UINT8* buf,UINT8 count) ;
00167
00168 UINT8 Show_SD_Content(void);
00169
00170 #endif
00171