53 #include "user_board.h"
56 #define SPI_LOW_SPEED 400000
57 #define SPI_HIGH_SPEED 6000000
58 #define SD_MMC_SPI_BITS 8
61 #define MMC_SECTOR_SIZE 512
67 #define SD_CARD_2_SDHC 3
72 #define SD_SPEC_SDHC 2
76 #define OP_UNLOCK 0x00
78 #define OP_RESET_PWD 0x02
79 #define OP_SET_PWD 0x01
80 #define OP_FORCED_ERASE 0x08
83 #define MMC_GO_IDLE_STATE 0
84 #define MMC_SEND_OP_COND 1
86 #define MMC_SEND_IF_COND 8
87 #define MMC_SEND_CSD 9
88 #define MMC_SEND_CID 10
89 #define MMC_SEND_STATUS 13
90 #define MMC_SET_BLOCKLEN 16
91 #define MMC_READ_SINGLE_BLOCK 17
92 #define MMC_WRITE_BLOCK 24
93 #define MMC_PROGRAM_CSD 27
94 #define MMC_SET_WRITE_PROT 28
95 #define MMC_CLR_WRITE_PROT 29
96 #define MMC_SEND_WRITE_PROT 30
97 #define SD_TAG_WR_ERASE_GROUP_START 32
98 #define SD_TAG_WR_ERASE_GROUP_END 33
99 #define MMC_TAG_SECTOR_START 32
100 #define MMC_TAG_SECTOR_END 33
101 #define MMC_UNTAG_SECTOR 34
102 #define MMC_TAG_ERASE_GROUP_START 35
103 #define MMC_TAG_ERASE_GROUP_END 36
104 #define MMC_UNTAG_ERASE_GROUP 37
106 #define SD_SEND_OP_COND_ACMD 41
107 #define MMC_LOCK_UNLOCK 42
108 #define SD_APP_CMD55 55
109 #define SD_READ_OCR 58
110 #define MMC_CRC_ON_OFF 59
111 // R1 Response bit-defines
112 #define MMC_R1_BUSY 0x80
113 #define MMC_R1_PARAMETER 0x40
114 #define MMC_R1_ADDRESS 0x20
115 #define MMC_R1_ERASE_SEQ 0x10
116 #define MMC_R1_COM_CRC 0x08
117 #define MMC_R1_ILLEGAL_COM 0x04
118 #define MMC_R1_ERASE_RESET 0x02
119 #define MMC_R1_IDLE_STATE 0x01
121 #define MMC_STARTBLOCK_READ 0xFE
122 #define MMC_STARTBLOCK_WRITE 0xFE
123 #define MMC_STARTBLOCK_MWRITE 0xFC
125 #define MMC_STOPTRAN_WRITE 0xFD
127 #define MMC_DE_MASK 0x1F
128 #define MMC_DE_ERROR 0x01
129 #define MMC_DE_CC_ERROR 0x02
130 #define MMC_DE_ECC_FAIL 0x04
131 #define MMC_DE_OUT_OF_RANGE 0x04
132 #define MMC_DE_CARD_LOCKED 0x04
134 #define MMC_DR_MASK 0x1F
135 #define MMC_DR_ACCEPT 0x05
136 #define MMC_DR_REJECT_CRC 0x0B
137 #define MMC_DR_REJECT_WRITE_ERROR 0x0D
142 #define SD_FAILURE -1
167 bool sd_spi_mem_check(
void);
173 void sd_spi_get_capacity(
void);
181 bool sd_spi_reset_card(
void);
189 void sd_spi_get_sector_count(
void* res);
196 void sd_spi_get_sector_size(
void* res);
204 void sd_spi_get_block_size(
void* res);
211 bool is_sd_spi_write_pwd_locked(
void);
218 bool sd_spi_init(
void);
226 bool sd_spi_status(
void);
234 bool sd_spi_wait_not_busy(
void);
244 bool sd_spi_write_sector_from_ram(
const void *ram);
255 bool sd_spi_read_sector_to_ram_pcda(
void* ram, uint32_t beginning_sector, uint8_t count);
264 bool sd_mmc_spi_read_sector_to_ram(
void *ram);
275 bool sd_spi_read_given_sector_to_ram(
void* ram, uint32_t beginning_sector, uint8_t count);
284 bool sd_mmc_spi_read_open_PDCA (uint32_t pos);
295 bool sd_spi_write_given_sector_from_ram(
const void *ram, uint32_t beginning_sector, uint8_t count);
300 void sd_spi_test(
void);
uint8_t card_type
stores SD_CARD or MMC_CARD type card
Definition: sd_spi.h:152
Define the SD SPI structure.
Definition: sd_spi.h:148
uint32_t last_block_address
Define the last block address read or written.
Definition: sd_spi.h:156
bool init_done
Define the init status.
Definition: sd_spi.h:150
uint16_t capacity_mult
Define the multi capacity.
Definition: sd_spi.h:154
uint32_t clock
Define the clock to use.
Definition: sd_spi.h:155
uint64_t capacity
stores the capacity in bytes
Definition: sd_spi.h:153
uint16_t erase_group_size
Define the size of the erase group command.
Definition: sd_spi.h:157