2.22. 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

Public Members

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

Public Members

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

Public Members

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

Public Members

struct sd_csd_v1_t sd_csd_t::v1
struct sd_csd_v2_t sd_csd_t::v2
struct

Public Members

struct spi_driver_t *sd_driver_t::spi_p
int sd_driver_t::type