Skip to content

File sdcard.h

FileList > driver > Inc > sdcard.h

Go to the source code of this file

  • #include "stm32xx_hal.h"
  • #include <stdint.h>
  • #include <stddef.h>
  • #include "FreeRTOS.h"
  • #include "semphr.h"
  • #include "queue.h"
  • #include "queue_ex.h"

Classes

Type Name
struct sd_handle_t
Main Handle Structure for SD Card.
struct sd_job_t
Job structure passed through the RTOS Queue.

Public Types

Type Name
enum sd_job_type_t
Enum for Worker Task Job Types.
enum sd_status_t
Custom error status enum.

Public Functions

Type Name
sd_status_t SD_Init (sd_handle_t * sd, TickType_t timeout)
Low-level SD initialization to ready the card for SPI communication.
sd_status_t SD_ReadSingleBlock (sd_handle_t * sd, uint32_t blockNum, uint8_t * buffer, TickType_t timeout)
Reads a single 512-byte block from the SD card.
sd_status_t SD_WriteSingleBlock (sd_handle_t * sd, uint32_t blockNum, const uint8_t * buffer, TickType_t timeout)
Writes a single 512-byte block to the SD card.
sd_status_t USER_SD_Card_Init (sd_handle_t * sd, UBaseType_t priority)
Initializes RTOS resources and FatFs structures for the SD driver.
void USER_SD_Card_Worker_Task (void * params)
RTOS task that processes file system jobs from the queue.
sd_status_t USER_SD_Card_Write_Async (sd_handle_t * sd, const char * filename, const char * data, TickType_t delay_ticks)
Non-blocking write that sends a request to the background worker.
void sdcard_SPI_TxRxCpltCallback (SPI_HandleTypeDef * hspi, BaseType_t * xHigherPriorityTaskWoken)
Driver-specific callback triggered by the SPI ISR.

Macros

Type Name
define DATA_TOKEN_CMD18 0xFE
define DATA_TOKEN_CMD25 0xFC
define SD_ACMD41 41
define SD_BLOCK_SIZE 512
define SD_BUSY_WAIT_RETRIES 500
define SD_BYTE_MASK 0xFF
define SD_BYTE_SHIFT_16 16
define SD_BYTE_SHIFT_24 24
define SD_BYTE_SHIFT_8 8
define SD_CMD0 0
define SD_CMD12 12
define SD_CMD17 17
define SD_CMD18 18
define SD_CMD24 24
define SD_CMD25 25
define SD_CMD55 55
define SD_CMD58 58
define SD_CMD8 8
define SD_CMD_BASE 0x40
define SD_CMD_INDEX_MASK 0x3F
define SD_CMD_PACKET_SIZE 6
define SD_DATA_BUFFER_LEN 64
define SD_DEFAULT_SECTOR_COUNT 3934208
define SD_DEFAULT_TIMEOUT_MS 1000
define SD_DUMMY_BYTE 0xFF
define SD_DUMMY_CLOCKS_COUNT 10
define SD_MAX_FILENAME_LEN 13
define SD_QUEUE_LENGTH 5
define SD_R1_ERROR_CODE 0xFF
define SD_R1_IDLE_MASK 0x80
define SD_R1_POLL_RETRIES 8
define SD_SMALL_TRANSFER_THRESHOLD 16
define SD_TIMEOUT_MS 1000

Public Types Documentation

enum sd_job_type_t

Enum for Worker Task Job Types.

enum sd_job_type_t {
    SD_JOB_MOUNT,
    SD_JOB_WRITE_ASYNC,
    SD_JOB_FORMAT
};

enum sd_status_t

Custom error status enum.

enum sd_status_t {
    SD_OK = 0x00,
    SD_ERROR = 0x01,
    SD_TIMEOUT = 0x02,
    SD_ERR_SPI = 0x03,
    SD_ERR_INIT_CARD = 0x04,
    SD_ERR_VOLTAGE = 0x05,
    SD_ERR_READ = 0x06,
    SD_ERR_WRITE = 0x07,
    SD_ERR_MUTEX = 0x08,
    SD_ERR_QUEUE_FULL = 0x09,
    SD_ERR_LOCK_TIMEOUT = 0x0A
};

Public Functions Documentation

function SD_Init

Low-level SD initialization to ready the card for SPI communication.

sd_status_t SD_Init (
    sd_handle_t * sd,
    TickType_t timeout
) 

Parameters:

  • sd Pointer to the SD handle.
  • timeout Max time to wait for initialization.

Returns:

Returns SD_OK on success.


function SD_ReadSingleBlock

Reads a single 512-byte block from the SD card.

sd_status_t SD_ReadSingleBlock (
    sd_handle_t * sd,
    uint32_t blockNum,
    uint8_t * buffer,
    TickType_t timeout
) 

Parameters:

  • sd Pointer to the SD handle.
  • blockNum Sector address to read.
  • buffer Pointer to the 512-byte data buffer.
  • timeout Max time to wait for the block.

Returns:

Returns SD_OK on success.


function SD_WriteSingleBlock

Writes a single 512-byte block to the SD card.

sd_status_t SD_WriteSingleBlock (
    sd_handle_t * sd,
    uint32_t blockNum,
    const uint8_t * buffer,
    TickType_t timeout
) 

Parameters:

  • sd Pointer to the SD handle.
  • blockNum Sector address to write.
  • buffer Pointer to the 512-byte data buffer.
  • timeout Max time to wait for the write to finish.

Returns:

Returns SD_OK on success.


function USER_SD_Card_Init

Initializes RTOS resources and FatFs structures for the SD driver.

sd_status_t USER_SD_Card_Init (
    sd_handle_t * sd,
    UBaseType_t priority
) 

Parameters:

  • sd Pointer to the SD handle.
  • priority User choice of priority level

Returns:

Returns SD_OK on success.


function USER_SD_Card_Worker_Task

RTOS task that processes file system jobs from the queue.

void USER_SD_Card_Worker_Task (
    void * params
) 

Parameters:


function USER_SD_Card_Write_Async

Non-blocking write that sends a request to the background worker.

sd_status_t USER_SD_Card_Write_Async (
    sd_handle_t * sd,
    const char * filename,
    const char * data,
    TickType_t delay_ticks
) 

Parameters:

  • sd Pointer to the SD handle.
  • filename Name of the file to write to.
  • data String data to append.
  • delay_ticks Time to wait for queue space if full.

Returns:

Returns SD_OK if the job was queued.


function sdcard_SPI_TxRxCpltCallback

Driver-specific callback triggered by the SPI ISR.

void sdcard_SPI_TxRxCpltCallback (
    SPI_HandleTypeDef * hspi,
    BaseType_t * xHigherPriorityTaskWoken
) 

Parameters:

  • hspi Pointer to the HAL SPI handle that triggered the interrupt.
  • xHigherPriorityTaskWoken Pointer to a flag indicating if a context switch is required.

Macro Definition Documentation

define DATA_TOKEN_CMD18

#define DATA_TOKEN_CMD18 `0xFE`

define DATA_TOKEN_CMD25

#define DATA_TOKEN_CMD25 `0xFC`

define SD_ACMD41

#define SD_ACMD41 `41`

define SD_BLOCK_SIZE

#define SD_BLOCK_SIZE `512`

define SD_BUSY_WAIT_RETRIES

#define SD_BUSY_WAIT_RETRIES `500`

define SD_BYTE_MASK

#define SD_BYTE_MASK `0xFF`

define SD_BYTE_SHIFT_16

#define SD_BYTE_SHIFT_16 `16`

define SD_BYTE_SHIFT_24

#define SD_BYTE_SHIFT_24 `24`

define SD_BYTE_SHIFT_8

#define SD_BYTE_SHIFT_8 `8`

define SD_CMD0

#define SD_CMD0 `0`

define SD_CMD12

#define SD_CMD12 `12`

define SD_CMD17

#define SD_CMD17 `17`

define SD_CMD18

#define SD_CMD18 `18`

define SD_CMD24

#define SD_CMD24 `24`

define SD_CMD25

#define SD_CMD25 `25`

define SD_CMD55

#define SD_CMD55 `55`

define SD_CMD58

#define SD_CMD58 `58`

define SD_CMD8

#define SD_CMD8 `8`

define SD_CMD_BASE

#define SD_CMD_BASE `0x40`

define SD_CMD_INDEX_MASK

#define SD_CMD_INDEX_MASK `0x3F`

define SD_CMD_PACKET_SIZE

#define SD_CMD_PACKET_SIZE `6`

define SD_DATA_BUFFER_LEN

#define SD_DATA_BUFFER_LEN `64`

define SD_DEFAULT_SECTOR_COUNT

#define SD_DEFAULT_SECTOR_COUNT `3934208`

define SD_DEFAULT_TIMEOUT_MS

#define SD_DEFAULT_TIMEOUT_MS `1000`

define SD_DUMMY_BYTE

#define SD_DUMMY_BYTE `0xFF`

define SD_DUMMY_CLOCKS_COUNT

#define SD_DUMMY_CLOCKS_COUNT `10`

define SD_MAX_FILENAME_LEN

#define SD_MAX_FILENAME_LEN `13`

define SD_QUEUE_LENGTH

#define SD_QUEUE_LENGTH `5`

define SD_R1_ERROR_CODE

#define SD_R1_ERROR_CODE `0xFF`

define SD_R1_IDLE_MASK

#define SD_R1_IDLE_MASK `0x80`

define SD_R1_POLL_RETRIES

#define SD_R1_POLL_RETRIES `8`

define SD_SMALL_TRANSFER_THRESHOLD

#define SD_SMALL_TRANSFER_THRESHOLD `16`

define SD_TIMEOUT_MS

#define SD_TIMEOUT_MS `1000`


The documentation for this class was generated from the following file driver/Inc/sdcard.h