1 #ifndef SPI_SDCARD_DRIVER_H
2 #define SPI_SDCARD_DRIVER_H
7 #define READ_TOKEN_TIMEOUT 4000
8 #define SECTOR_SIZE 512
10 #define CMD_ABORT_NO_READ_TOKEN 0x1
11 #define CMD_ABORT_CRC16_INVALID 0x2
12 #define CMD_ABORT_WRITE_ERROR 0x3
13 #define CMD_ABORT_UKNOWN_ERROR 0x7
15 typedef enum card_type_e {
17 CARD_TYPE_SDV1 = 0x01,
18 CARD_TYPE_SDV2 = 0x02,
19 CARD_TYPE_SDV2HC = 0x04
22 typedef enum spisd_result_s {
45 u8 read_bl_partial : 1;
46 u8 write_blk_misalign : 1;
47 u8 read_blk_misalign : 1;
54 u8 vdd_r_curr_max : 3;
55 u8 vdd_r_curr_min : 3;
58 u8 vdd_w_curr_max : 3;
59 u8 vdd_w_curr_min : 3;
64 u8 sector_size_high : 6;
65 u8 sector_size_low : 1;
70 u8 write_bl_len_high : 2;
71 u8 write_bl_len_low : 2;
72 u8 write_bl_partial : 1;
74 u8 file_format_group : 1;
76 u8 perm_write_protect : 1;
77 u8 tmp_write_protect : 1;
97 u8 read_bl_partial : 1;
98 u8 write_blk_misalign : 1;
99 u8 read_blk_misalign : 1;
113 u8 sector_size_high : 6;
114 u8 sector_size_low : 1;
116 u8 ep_grp_enable : 1;
119 u8 write_bl_len_high : 2;
120 u8 write_bl_len_low : 2;
121 u8 write_bl_partial : 1;
123 u8 file_format_group : 1;
125 u8 perm_write_protect : 1;
126 u8 tmp_write_protect : 1;
138 uint8_t ManufacturerID;
139 uint16_t OEM_AppliID;
145 uint16_t ManufactDate;
154 card_type_t card_type;
163 extern uint16_t spisd_read_status_register();
166 extern int spisd_init_card();
167 extern int spisd_get_card_info();
168 extern int spisd_recover();
171 extern int spisd_read(
struct block_device *bd, uint64_t sector,
void *buffer, uint16_t
count);
172 extern int spisd_write(
struct block_device *bd, uint64_t sector,
const void *buffer, uint16_t
count);