2.20. sd — Secure Digital memory

Source code: src/drivers/sd.h, src/drivers/sd.c

Test code: tst/drivers/sd/main.c


Defines

SD_ERR_NORESPONSE_WAIT_FOR_DATA_START_BLOCK
SD_ERR_GO_IDLE_STATE
SD_ERR_CRC_ON_OFF
SD_ERR_SEND_IF_COND
SD_ERR_CHECK_PATTERN
SD_ERR_SD_SEND_OP_COND
SD_ERR_READ_OCR
SD_ERR_READ_COMMAND
SD_ERR_READ_DATA_START_BLOCK
SD_ERR_READ_WRONG_DATA_CRC
SD_ERR_WRITE_BLOCK
SD_ERR_WRITE_BLOCK_TOKEN_DATA_RES_ACCEPTED
SD_ERR_WRITE_BLOCK_WAIT_NOT_BUSY
SD_ERR_WRITE_BLOCK_SEND_STATUS
SD_BLOCK_SIZE
SD_CCC(csd_p)
SD_C_SIZE(csd_p)
SD_C_SIZE_MULT(csd_p)
SD_SECTOR_SIZE(csd_p)
SD_WRITE_BL_LEN(csd_p)
SD_CSD_STRUCTURE_V1
SD_CSD_STRUCTURE_V2

Functions

int sd_init(struct sd_driver_t *self_p, struct spi_driver_t *spi_p)

Initialize given driver object.

Return
zero(0) or negative error code.
Parameters
  • self_p: Driver object to initialize.

int sd_start(struct sd_driver_t *self_p)

Start given SD card driver. This resets the SD card and performs the initialization sequence.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.

int sd_stop(struct sd_driver_t *self_p)

Stop given SD card driver.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.

ssize_t sd_read_cid(struct sd_driver_t *self_p, struct sd_cid_t *cid_p)

Read card CID register. The CID contains card identification information such as Manufacturer ID, Product name, Product serial number and Manufacturing date.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.
  • cid: pointer to cid data store.

ssize_t sd_read_csd(struct sd_driver_t *self_p, union sd_csd_t *csd_p)

Read card CSD register. The CSD contains that provides information regarding access to the card’s contents.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.
  • csd: pointer to csd data store.

ssize_t sd_read_block(struct sd_driver_t *self_p, void *dst_p, uint32_t src_block)

Read given block from SD card.

Return
Number of read bytes or negative error code.
Parameters
  • self_p: Initialized driver object.
  • buf_p: Buffer to read into.
  • src_block: Block to read from.

ssize_t sd_write_block(struct sd_driver_t *self_p, uint32_t dst_block, const void *src_p)

Write data to the SD card.

Return
Number of written bytes or negative error code.
Parameters
  • self_p: Initialized driver object.
  • dst_block: Block to write to.
  • src_p: Buffer to write.

Variables

struct sd_csd_v2_t PACKED
struct sd_cid_t

Public Members

uint8_t mid
char oid[2]
char pnm[5]
uint8_t prv
uint32_t psn
uint16_t mdt
uint8_t crc
struct sd_csd_v1_t

Public Members

uint8_t reserved1
uint8_t csd_structure
uint8_t taac
uint8_t nsac
uint8_t tran_speed
uint8_t ccc_high
uint8_t read_bl_len
uint8_t ccc_low
uint8_t c_size_high
uint8_t reserved2
uint8_t dsr_imp
uint8_t read_blk_misalign
uint8_t write_blk_misalign
uint8_t read_bl_partial
uint8_t c_size_mid
uint8_t vdd_r_curr_max
uint8_t vdd_r_curr_min
uint8_t c_size_low
uint8_t c_size_mult_high
uint8_t vdd_w_curr_max
uint8_t vdd_w_curr_min
uint8_t sector_size_high
uint8_t erase_blk_en
uint8_t c_size_mult_low
uint8_t wp_grp_size
uint8_t sector_size_low
uint8_t write_bl_len_high
uint8_t r2w_factor
uint8_t reserved3
uint8_t wp_grp_enable
uint8_t reserved4
uint8_t write_bl_partial
uint8_t write_bl_len_low
uint8_t reserved5
uint8_t file_format
uint8_t tmp_write_protect
uint8_t perm_write_protect
uint8_t copy
uint8_t file_format_grp
uint8_t crc
struct sd_csd_v2_t

Public Members

uint8_t reserved1
uint8_t csd_structure
uint8_t taac
uint8_t nsac
uint8_t tran_speed
uint8_t ccc_high
uint8_t read_bl_len
uint8_t ccc_low
uint8_t reserved2
uint8_t dsr_imp
uint8_t read_blk_misalign
uint8_t write_blk_misalign
uint8_t read_bl_partial
uint8_t c_size_high
uint8_t reserved3
uint8_t c_size_mid
uint8_t c_size_low
uint8_t sector_size_high
uint8_t erase_blk_en
uint8_t reserved4
uint8_t wp_grp_size
uint8_t sector_size_low
uint8_t write_bl_len_high
uint8_t r2w_factor
uint8_t reserved5
uint8_t wp_grp_enable
uint8_t reserved6
uint8_t write_bl_partial
uint8_t write_bl_len_low
uint8_t reserved7
uint8_t file_format
uint8_t tmp_write_protect
uint8_t perm_write_protect
uint8_t copy
uint8_t file_format_grp
uint8_t crc
union sd_csd_t

Public Members

struct sd_csd_v1_t v1
struct sd_csd_v2_t v2
struct sd_driver_t

Public Members

struct spi_driver_t *spi_p
int type