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:
sdPointer to the SD handle.timeoutMax 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:
sdPointer to the SD handle.blockNumSector address to read.bufferPointer to the 512-byte data buffer.timeoutMax 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:
sdPointer to the SD handle.blockNumSector address to write.bufferPointer to the 512-byte data buffer.timeoutMax 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:
sdPointer to the SD handle.priorityUser 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:
paramsPointer to the sd_handle_t structure.
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:
sdPointer to the SD handle.filenameName of the file to write to.dataString data to append.delay_ticksTime 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:
hspiPointer to the HAL SPI handle that triggered the interrupt.xHigherPriorityTaskWokenPointer 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