61 lines
2.3 KiB
C
61 lines
2.3 KiB
C
#ifndef __BSP_SD_SPI_H
|
|
#define __BSP_SD_SPI_H
|
|
|
|
#include "ch32v30x.h"
|
|
|
|
#define BSP_SD_BLOCK_SIZE 512
|
|
|
|
#define BSP_SD_SPI SPI2
|
|
#define BSP_SD_SPI_CLK_ENABLE() RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE)
|
|
|
|
#define BSP_SD_SPI_SCK_PIN GPIO_Pin_13 /* PB.13 */
|
|
#define BSP_SD_SPI_SCK_GPIO_PORT GPIOB /* GPIOB */
|
|
#define BSP_SD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOB
|
|
#define BSP_SD_SPI_MISO_PIN GPIO_Pin_14 /* PB.14 */
|
|
#define BSP_SD_SPI_MISO_GPIO_PORT GPIOB /* GPIOB */
|
|
#define BSP_SD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOB
|
|
#define BSP_SD_SPI_MOSI_PIN GPIO_Pin_15 /* PB.15 */
|
|
#define BSP_SD_SPI_MOSI_GPIO_PORT GPIOB /* GPIOB */
|
|
#define BSP_SD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOB
|
|
#define BSP_SD_CS_PIN GPIO_Pin_12 /* PB.12 */
|
|
#define BSP_SD_CS_GPIO_PORT GPIOB /* GPIOB */
|
|
#define BSP_SD_CS_GPIO_CLK RCC_APB2Periph_GPIOB
|
|
|
|
#define BSP_SD_TX_DMA_CHANNEL DMA1_Channel5
|
|
#define BSP_SD_RX_DMA_CHANNEL DMA1_Channel4
|
|
#define BSP_SD_TX_DMA_IT_TC_FLAG DMA1_IT_TC4
|
|
|
|
typedef enum {
|
|
bsp_sd_type_unknown = 0,
|
|
bsp_sd_type_mmc,
|
|
bsp_sd_type_sdv1,
|
|
bsp_sd_type_sdv2,
|
|
bsp_sd_type_sdv2hc,
|
|
} bsp_sd_type_t;
|
|
|
|
typedef enum {
|
|
bsp_sd_error_none = 0,
|
|
bsp_sd_error_no_card,
|
|
bsp_sd_error_invalid_parameter,
|
|
bsp_sd_error_unknown_card_type,
|
|
bsp_sd_error_not_ready,
|
|
bsp_sd_error_invalid_response,
|
|
bsp_sd_error_timeout,
|
|
} bsp_sd_error_t;
|
|
|
|
typedef struct {
|
|
bsp_sd_type_t card_type;
|
|
uint32_t sector_count;
|
|
} bsp_card_info_t;
|
|
|
|
bsp_sd_error_t bsp_sd_init(void);
|
|
|
|
bsp_sd_error_t bsp_sd_read_block(uint8_t* buffer, uint32_t sector_address);
|
|
bsp_sd_error_t bsp_sd_read_multi_blocks(uint8_t* buffer, uint32_t sector_address, uint16_t sector_count);
|
|
bsp_sd_error_t bsp_sd_write_block(const uint8_t *buffer, uint32_t sector_address);
|
|
bsp_sd_error_t bsp_sd_write_multi_blocks(const uint8_t *buffer, uint32_t sector_address, uint16_t sector_count);
|
|
|
|
void bsp_sd_spi_get_card_info(bsp_card_info_t *card_info_out);
|
|
|
|
#endif
|