sdcard_spi.h¶
Public interface for the sdcard_spi driver.
-
SD_HC_BLOCK_SIZE¶ size of a single block on SDHC cards
1
(512)
-
SDCARD_SPI_INIT_ERROR¶ returned on failed init
1
(-1)
-
SDCARD_SPI_OK¶ returned on successful init
1
(0)
-
SD_SIZE_OF_OID¶ OID (OEM/application ID field in CID reg)
1
2
-
SD_SIZE_OF_PNM¶ PNM (product name field in CID reg)
1
5
-
enum
sd_version_t¶ - SD_V2
- SD version 2.
- SD_V1
- SD version 1.
- MMC_V3
- MMC version 3.
- SD_UNKNOWN
- SD-version unknown.
-
enum
sd_rw_response_t¶ - SD_RW_OK
= 0 - no error
- SD_RW_NO_TOKEN
- no token was received (on block read)
- SD_RW_TIMEOUT
- cmd timed out (not-busy-state wasn’t entered)
- SD_RW_RX_TX_ERROR
- error while performing SPI read/write
- SD_RW_WRITE_ERROR
- data-packet response indicates error
- SD_RW_CRC_MISMATCH
- CRC-mismatch of received data.
- SD_RW_NOT_SUPPORTED
- operation not supported on used card
- SD_RW_OK
-
int
sdcard_spi_init(sdcard_spi_t * card, const sdcard_spi_params_t * params)¶ Initializes the sd-card with the given parameters in sdcard_spi_t structure.
The init procedure also takes care of initializing the spi peripheral to master mode and performing all neccecary steps to set the sd-card to spi-mode. Reading the CID and CSD registers is also done within this routine and their values are copied to the given sdcard_spi_t struct.
Parameters
card: the device descriptor params: parameters for this device (pins and spi device are initialized by this driver) Return values
- 0 if the card could be initialized successfully
- false if an error occured while initializing the card
-
int
sdcard_spi_read_blocks(sdcard_spi_t * card, int blockaddr, char * data, int blocksize, int nblocks,sdcard_spi.h::sd_rw_response_t* state)¶ Reads data blocks (usually multiples of 512 Bytes) from card to buffer.
Parameters
card: Initialized sd-card struct blockaddr: Start adress to read from. Independet of the actual adressing scheme of the used card the adress needs to be given as block address (e.g. 0, 1, 2… NOT: 0, 512… ). The driver takes care of mapping to byte adressing if needed. data: Buffer to store the read data in. The user is responsible for providing a suitable buffer size. blocksize: Size of data blocks. For now only 512 byte blocks are supported because only older (SDSC) cards support variable blocksizes anyway. With SDHC/SDXC-cards this is always fixed to 512 bytes. SDSC cards are automatically forced to use 512 byte as blocksize by the init procedure. nblocks: Number of blocks to read state: Contains information about the error state if something went wrong (if return value is lower than nblocks). Return values
- number of successfully read blocks (0 if no block was read).
-
int
sdcard_spi_write_blocks(sdcard_spi_t * card, int blockaddr, const char * data, int blocksize, int nblocks,sdcard_spi.h::sd_rw_response_t* state)¶ Writes data blocks (usually multiples of 512 Bytes) from buffer to card.
Parameters
card: Initialized sd-card struct blockaddr: Start adress to read from. Independet of the actual adressing scheme of the used card the adress needs to be given as block address (e.g. 0, 1, 2… NOT: 0, 512… ). The driver takes care of mapping to byte adressing if needed. data: Buffer that contains the data to be sent. blocksize: Size of data blocks. For now only 512 byte blocks are supported because only older (SDSC) cards support variable blocksizes anyway. With SDHC/SDXC-cards this is always fixed to 512 bytes. SDSC cards are automatically forced to use 512 byte as blocksize by the init procedure. nblocks: Number of blocks to write state: Contains information about the error state if something went wrong (if return value is lower than nblocks). Return values
- number of successfully written blocks (0 if no block was written).
-
uint64_t
sdcard_spi_get_capacity(sdcard_spi_t * card)¶ Gets the capacity of the card.
Parameters
card: Initialized sd-card struct Return values
- capacity of the card in bytes
-
struct
cid_t¶ CID register see section 5.2 in SD-Spec v5.00.
-
uint8_t
MID¶ Manufacturer ID.
-
char
OID()¶ OEM/Application ID.
-
char
PNM()¶ Product name.
-
uint8_t
PRV¶ Product revision.
-
uint32_t
PSN¶ Product serial number.
-
uint16_t
MDT¶ Manufacturing date.
-
uint8_t
CID_CRC¶ CRC7 checksum.
-
uint8_t
-
struct
csd_v1_t¶ CSD register with csd structure version 1.0 see section 5.3.2 in SD-Spec v5.00.
-
uint8_t
CSD_STRUCTURE¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
TAAC¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
NSAC¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
TRAN_SPEED¶ see section 5.3.2 in SD-Spec v5.00
-
uint16_t
CCC¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
READ_BL_LEN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
READ_BL_PARTIAL¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
WRITE_BLK_MISALIGN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
READ_BLK_MISALIGN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
DSR_IMP¶ see section 5.3.2 in SD-Spec v5.00
-
uint16_t
C_SIZE¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
VDD_R_CURR_MIN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
VDD_R_CURR_MAX¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
VDD_W_CURR_MIN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
VDD_W_CURR_MAX¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
C_SIZE_MULT¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
ERASE_BLK_EN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
SECTOR_SIZE¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
WP_GRP_SIZE¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
WP_GRP_ENABLE¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
R2W_FACTOR¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
WRITE_BL_LEN¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
WRITE_BL_PARTIAL¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
FILE_FORMAT_GRP¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
COPY¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
PERM_WRITE_PROTECT¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
TMP_WRITE_PROTECT¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
FILE_FORMAT¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
CSD_CRC¶ see section 5.3.2 in SD-Spec v5.00
-
uint8_t
-
struct
csd_v2_t¶ CSD register with csd structure version 2.0 see section 5.3.3 in SD-Spec v5.00.
-
uint8_t
CSD_STRUCTURE¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
TAAC¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
NSAC¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
TRAN_SPEED¶ see section 5.3.3 in SD-Spec v5.00
-
uint16_t
CCC¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
READ_BL_LEN¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
READ_BL_PARTIAL¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
WRITE_BLK_MISALIGN¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
READ_BLK_MISALIGN¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
DSR_IMP¶ see section 5.3.3 in SD-Spec v5.00
-
uint32_t
C_SIZE¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
ERASE_BLK_EN¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
SECTOR_SIZE¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
WP_GRP_SIZE¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
WP_GRP_ENABLE¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
R2W_FACTOR¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
WRITE_BL_LEN¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
WRITE_BL_PARTIAL¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
FILE_FORMAT_GRP¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
COPY¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
PERM_WRITE_PROTECT¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
TMP_WRITE_PROTECT¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
FILE_FORMAT¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
CSD_CRC¶ see section 5.3.3 in SD-Spec v5.00
-
uint8_t
-
union
csd_t¶ CSD register (see section 5.3 in SD-Spec v5.00)
-
struct
sd_status_t¶ SD status register (see section 4.10.2 in SD-Spec v5.00)
-
uint32_t
SIZE_OF_PROTECTED_AREA¶ see section 4.10.2 in SD-Spec v5.00
-
uint32_t
SUS_ADDR¶ see section 4.10.2.12 in SD-Spec v5.00
-
uint32_t
VSC_AU_SIZE¶ see section 4.10.2.11 in SD-Spec v5.00
-
uint16_t
SD_CARD_TYPE¶ see section 4.10.2 in SD-Spec v5.00
-
uint16_t
ERASE_SIZE¶ see section 4.10.2.5 in SD-Spec v5.00
-
uint8_t
SPEED_CLASS¶ see section 4.10.2.2 in SD-Spec v5.00
-
uint8_t
PERFORMANCE_MOVE¶ see section 4.10.2.3 in SD-Spec v5.00
-
uint8_t
VIDEO_SPEED_CLASS¶ see section 4.10.2.10 in SD-Spec v5.00
-
uint8_t
ERASE_TIMEOUT¶ see section 4.10.2.6 in SD-Spec v5.00
-
uint8_t
ERASE_OFFSET¶ see section 4.10.2.7 in SD-Spec v5.00
-
uint8_t
UHS_SPEED_GRADE¶ see section 4.10.2.8 in SD-Spec v5.00
-
uint8_t
UHS_AU_SIZE¶ see section 4.10.2.9 in SD-Spec v5.00
-
uint8_t
AU_SIZE¶ see section 4.10.2.4 in SD-Spec v5.00
-
uint8_t
DAT_BUS_WIDTH¶ see section 4.10.2 in SD-Spec v5.00
-
uint8_t
SECURED_MODE¶ see section 4.10.2 in SD-Spec v5.00
-
uint32_t
-
struct
sdcard_spi_params_t¶ sdcard_spi device params
-
spi.h::spi_tspi_dev¶ SPI bus used.
-
gpio.h::gpio_tcs¶ pin connected to the DAT3 sd pad
-
gpio.h::gpio_tclk¶ pin connected to the CLK sd pad
-
gpio.h::gpio_tmosi¶ pin connected to the CMD sd pad
-
gpio.h::gpio_tmiso¶ pin connected to the DAT0 sd pad
-
gpio.h::gpio_tpower¶ pin that controls sd power circuit
-
bool
power_act_high¶ true if card power is enabled by ‘power’-pin HIGH
-
-
struct
sdcard_spi_t¶ Device descriptor for sdcard_spi.
-
sdcard_spi_params_t
params¶ parameters for pin and spi config
-
atmega_common/include/periph_cpu_common.h::spi_clk_tspi_clk¶ active SPI clock speed
-
bool
use_block_addr¶ true if block adressing (vs.
byte adressing) is used
-
bool
init_done¶ set to true once the init procedure completed successfully
-
sdcard_spi.h::sd_version_tcard_type¶ version of SD-card
-
int
csd_structure¶ version of the CSD register structure
-
sdcard_spi_params_t