47#define PX_SD_MAX_SPI_CLOCK_HZ 25000000ul
49#define PX_SD_SPI_MODE PX_SPI_MODE0
51#define PX_SD_SPI_DATA_ORDER PX_SPI_DATA_ORDER_MSB
53#define PX_SD_SPI_MO_DUMMY_BYTE 0xff
56#define PX_SD_BLOCK_SIZE 512ul
61 PX_SD_CARD_TYPE_INVALID = 0,
62 PX_SD_CARD_TYPE_VER_1_SD = 1,
63 PX_SD_CARD_TYPE_VER_2_SCSD = 2,
64 PX_SD_CARD_TYPE_VER_2_HCSD_XCSD = 3,
68typedef struct PX_ATTR_PACKED
83typedef struct PX_ATTR_PACKED
86 uint8_t reserved1 : 6;
105 uint8_t c_size_hi : 2;
106 uint8_t reserved2 : 2;
108 uint8_t read_blk_misalign : 1;
109 uint8_t write_blk_misalign : 1;
110 uint8_t read_bl_partial : 1;
114 uint8_t vdd_r_curr_max : 3;
115 uint8_t vdd_r_curr_min : 3;
116 uint8_t c_size_lo : 2;
118 uint8_t c_size_mult_hi : 2;
119 uint8_t vdd_w_cur_max : 3;
120 uint8_t vdd_w_curr_min : 3;
122 uint8_t sector_size_hi : 6;
123 uint8_t erase_blk_en : 1;
124 uint8_t c_size_mult_lo : 1;
126 uint8_t wp_grp_size : 7;
127 uint8_t sector_size_lo : 1;
133 uint8_t reserved2 : 4;
135 uint8_t read_blk_misalign : 1;
136 uint8_t write_blk_misalign : 1;
137 uint8_t read_bl_partial : 1;
139 uint8_t c_size_hi : 6;
140 uint8_t reserved3 : 2;
142 uint8_t c_size_mid : 8;
144 uint8_t c_size_lo : 8;
146 uint8_t sector_size_hi : 6;
147 uint8_t erase_blk_en : 1;
148 uint8_t reserved4 : 1;
150 uint8_t wp_grp_size : 7;
151 uint8_t sector_size_lo : 1;
158 uint8_t reserved3 : 2;
161 uint8_t reserved4 : 5;
165 uint8_t reserved5: 2;
258uint8_t
px_sd_rd_blocks(uint8_t * data, uint32_t block_adr, uint8_t nr_of_blocks);
288uint8_t
px_sd_wr_blocks(
const uint8_t * data, uint32_t block_adr, uint8_t nr_of_blocks);
uint8_t year_hi
Manufacturing date [xYYM].
uint8_t mid
Manufacturer ID.
uint8_t r2w_factor
write speed factor
uint8_t tran_speed
max. data transfer rate
uint8_t prv
BCD Product revision [Major.Minor].
uint8_t month
Manufacturing date [xYYM].
uint8_t wp_grp_enable
write protect group enable
uint8_t ccc_hi
card command classes
uint8_t taac
data read access-time-1
uint8_t write_partial
partial blocks for write allowed
uint8_t csd_structure
CSD structure version 1.0 or 2.0.
uint8_t write_bl_len_hi
max. write data block length
uint8_t write_bl_len_low
max. write data block length
uint8_t read_bl_len
max. read data block length
uint32_t psn
Product serial number
uint8_t year_lo
Manufacturing date [xYYM].
uint8_t nsac
data read access-time-2 in CLK cycles (NSAC*100)
uint8_t perm_write_protect
permanent write protection
uint8_t file_format
File format.
uint8_t tmp_write_protect
temporary write protection
uint8_t ccc_lo
card command classes
uint8_t file_format_grp
File format.
bool px_sd_reset(void)
Detect and reset SD card.
bool px_sd_rd_block(uint8_t *data, uint32_t block_adr)
Read a data block from the SD card.
uint8_t px_sd_wr_blocks(const uint8_t *data, uint32_t block_adr, uint8_t nr_of_blocks)
Write a number of data blocks to the SD card.
bool px_sd_wait_wr_is_finished(void)
Wait up to 500 ms for write block transaction to finish.
void px_sd_init(px_spi_handle_t *handle)
Initialise driver.
bool px_sd_rd_cid(px_sd_cid_t *cid)
Read Card ID Register.
bool px_sd_wr_block(const uint8_t *data, uint32_t block_adr)
Write a data block to the SD card.
uint32_t px_sd_get_capacity_in_blocks(const px_sd_csd_t *csd)
Extract and calculate card capacity from Card Specific Data (CSD).
bool px_sd_get_status(uint16_t *status)
Read Card Status.
bool px_sd_rd_csd(px_sd_csd_t *csd)
Read Card Specific Data.
uint8_t px_sd_rd_blocks(uint8_t *data, uint32_t block_adr, uint8_t nr_of_blocks)
Read a number of data blocks from the SD card.
CID - Card ID register; Ref 1. Paragraph "5.2 CID Register", page 113.
CSD - Card Specific Data register; Paragraph "5.3 CSD Register", page 114.