HPM SDK
HPMicro Software Development Kit
hpm_spi_sdcard.c File Reference
#include "stdio.h"
#include "hpm_spi_sdcard.h"
#include "board.h"

Macros

#define SPI_SD_LOG(...)
 
#define CSD_VERSION_V1_0   (0U)
 
#define CSD_VERSION_V2_0   (1U)
 
#define CSD_VERSION_V3_0   (2U)
 
#define CMD_WAIT_RESP_TIMEOUT   (0xFFFFFFFFU)
 
#define SPI_SPEED_INIT_HZ   (400000U)
 
#define SPI_SD_SPEED_MAX_HZ   (20000000U)
 
#define SPI_SD_AUTO_PROBE_COUNT   (5U)
 
#define SPI_SPEED_PROBE_FREQ   (12000000U)
 
#define CRC16_CCITT_SEED   0
 
#define CRC16_CCITT_POLY16   0x1021
 
#define SPI_SD_RETRY_COUNT   (5U)
 

Functions

static hpm_stat_t send_sdcard_command (uint8_t cmd, uint32_t arg, uint8_t crc)
 
static hpm_stat_t read_sdcard_buffer (uint8_t *buf, uint32_t len)
 
static hpm_stat_t read_sdcard_info (spi_sdcard_info_t *cardinfo)
 
static uint8_t crc7_calc (uint8_t *data, uint8_t len)
 
static bool check_cid_data (bool check_crc)
 
static hpm_stat_t sdcard_wait_not_busy (void)
 
static uint8_t sdcard_read_r1_status (void)
 
static hpm_stat_t sdcard_wait_data_token (uint8_t token)
 
hpm_stat_t sdcard_spi_status (void)
 
hpm_stat_t sdcard_spi_init (sdcard_spi_interface_t *spi_io)
 
hpm_stat_t sdcard_spi_get_card_info (spi_sdcard_info_t *cardinfo)
 
hpm_stat_t sdcard_spi_read_block (uint32_t sector, uint8_t *buffer)
 
hpm_stat_t sdcard_spi_write_block (uint32_t sector, uint8_t *buffer)
 
hpm_stat_t sdcard_spi_read_multi_block (uint8_t *buffer, uint32_t start_sector, uint32_t num_sectors)
 
hpm_stat_t sdcard_spi_write_multi_block (uint8_t *buffer, uint32_t sector, uint32_t num_sectors)
 

Variables

static volatile sdcard_type_t g_card_type
 
static spi_sdcard_info_t g_card_info
 
static volatile bool sdcard_init_status
 
static volatile sdcard_spi_interface_tg_spi_dev = NULL
 
static volatile uint32_t g_spi_max_speed
 
static uint8_t dummy_write_byte = 0xFFU
 
static uint8_t dummy_read_byte
 

Macro Definition Documentation

◆ CMD_WAIT_RESP_TIMEOUT

#define CMD_WAIT_RESP_TIMEOUT   (0xFFFFFFFFU)

◆ CRC16_CCITT_POLY16

#define CRC16_CCITT_POLY16   0x1021

◆ CRC16_CCITT_SEED

#define CRC16_CCITT_SEED   0

◆ CSD_VERSION_V1_0

#define CSD_VERSION_V1_0   (0U)

◆ CSD_VERSION_V2_0

#define CSD_VERSION_V2_0   (1U)

◆ CSD_VERSION_V3_0

#define CSD_VERSION_V3_0   (2U)

◆ SPI_SD_AUTO_PROBE_COUNT

#define SPI_SD_AUTO_PROBE_COUNT   (5U)

◆ SPI_SD_LOG

#define SPI_SD_LOG (   ...)

◆ SPI_SD_RETRY_COUNT

#define SPI_SD_RETRY_COUNT   (5U)

◆ SPI_SD_SPEED_MAX_HZ

#define SPI_SD_SPEED_MAX_HZ   (20000000U)

◆ SPI_SPEED_INIT_HZ

#define SPI_SPEED_INIT_HZ   (400000U)

◆ SPI_SPEED_PROBE_FREQ

#define SPI_SPEED_PROBE_FREQ   (12000000U)

Function Documentation

◆ check_cid_data()

static bool check_cid_data ( bool  check_crc)
static

◆ crc7_calc()

static uint8_t crc7_calc ( uint8_t *  data,
uint8_t  len 
)
static

◆ read_sdcard_buffer()

static hpm_stat_t read_sdcard_buffer ( uint8_t *  buf,
uint32_t  len 
)
static

◆ read_sdcard_info()

static hpm_stat_t read_sdcard_info ( spi_sdcard_info_t cardinfo)
static

◆ sdcard_read_r1_status()

static uint8_t sdcard_read_r1_status ( void  )
static

◆ sdcard_spi_get_card_info()

hpm_stat_t sdcard_spi_get_card_info ( spi_sdcard_info_t cardinfo)

◆ sdcard_spi_init()

hpm_stat_t sdcard_spi_init ( sdcard_spi_interface_t spi_io)

◆ sdcard_spi_read_block()

hpm_stat_t sdcard_spi_read_block ( uint32_t  sector,
uint8_t *  buffer 
)

◆ sdcard_spi_read_multi_block()

hpm_stat_t sdcard_spi_read_multi_block ( uint8_t *  buffer,
uint32_t  start_sector,
uint32_t  num_sectors 
)

◆ sdcard_spi_status()

hpm_stat_t sdcard_spi_status ( void  )

◆ sdcard_spi_write_block()

hpm_stat_t sdcard_spi_write_block ( uint32_t  sector,
uint8_t *  buffer 
)

◆ sdcard_spi_write_multi_block()

hpm_stat_t sdcard_spi_write_multi_block ( uint8_t *  buffer,
uint32_t  sector,
uint32_t  num_sectors 
)

◆ sdcard_wait_data_token()

static hpm_stat_t sdcard_wait_data_token ( uint8_t  token)
static

◆ sdcard_wait_not_busy()

static hpm_stat_t sdcard_wait_not_busy ( void  )
static

◆ send_sdcard_command()

static hpm_stat_t send_sdcard_command ( uint8_t  cmd,
uint32_t  arg,
uint8_t  crc 
)
static

Variable Documentation

◆ dummy_read_byte

uint8_t dummy_read_byte
static

◆ dummy_write_byte

uint8_t dummy_write_byte = 0xFFU
static

◆ g_card_info

spi_sdcard_info_t g_card_info
static

◆ g_card_type

volatile sdcard_type_t g_card_type
static

◆ g_spi_dev

volatile sdcard_spi_interface_t* g_spi_dev = NULL
static

◆ g_spi_max_speed

volatile uint32_t g_spi_max_speed
static

◆ sdcard_init_status

volatile bool sdcard_init_status
static