127 lines
2.4 KiB
C
127 lines
2.4 KiB
C
#include "tos_k.h"
|
|
#include "tos_hal.h"
|
|
#include "ch32v30x.h"
|
|
#include "sdio.h"
|
|
|
|
__API__ int tos_hal_sd_init(hal_sd_t *sd)
|
|
{
|
|
(void)sd;
|
|
|
|
return SD_Init() == SD_OK ? 0 : -1;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_read(hal_sd_t *sd, uint8_t *buf, uint32_t blk_addr, uint32_t blk_num, uint32_t timeout)
|
|
{
|
|
uint8_t err;
|
|
|
|
(void)sd;
|
|
|
|
if (!buf) {
|
|
return -1;
|
|
}
|
|
|
|
err = SD_ReadDisk(buf, blk_addr, blk_num);
|
|
|
|
return err == SD_OK ? 0 : -1;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_write(hal_sd_t *sd, const uint8_t *buf, uint32_t blk_addr, uint32_t blk_num, uint32_t timeout)
|
|
{
|
|
uint8_t err;
|
|
|
|
(void)sd;
|
|
|
|
if (!buf) {
|
|
return -1;
|
|
}
|
|
|
|
err = SD_WriteDisk((uint8_t *)buf, blk_addr, blk_num);
|
|
|
|
return err == SD_OK ? 0 : -1;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_read_dma(hal_sd_t *sd, uint8_t *buf, uint32_t blk_addr, uint32_t blk_num)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_write_dma(hal_sd_t *sd, const uint8_t *buf, uint32_t blk_addr, uint32_t blk_num)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_erase(hal_sd_t *sd, uint32_t blk_add_start, uint32_t blk_addr_end)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_info_get(hal_sd_t *sd, hal_sd_info_t *info)
|
|
{
|
|
SD_Error err;
|
|
SD_CardInfo card_info;
|
|
|
|
(void)sd;
|
|
|
|
if (!sd || !info) {
|
|
return -1;
|
|
}
|
|
|
|
err = SD_GetCardInfo(&card_info);
|
|
if (err != SD_OK) {
|
|
return -1;
|
|
}
|
|
|
|
info->card_type = card_info.CardType;
|
|
info->blk_num = card_info.CardCapacity / card_info.CardBlockSize;
|
|
info->blk_size = card_info.CardBlockSize;
|
|
|
|
return 0;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_state_get(hal_sd_t *sd, hal_sd_state_t *state)
|
|
{
|
|
int ret = 0;
|
|
SDCardState sd_state;
|
|
|
|
(void)sd;
|
|
|
|
if (!sd || !state) {
|
|
return -1;
|
|
}
|
|
|
|
sd_state = SD_GetState();
|
|
switch (sd_state) {
|
|
case SD_CARD_READY:
|
|
*state = HAL_SD_STAT_READY;
|
|
break;
|
|
|
|
case SD_CARD_SENDING:
|
|
*state = HAL_SD_STAT_PROGRAMMING;
|
|
break;
|
|
|
|
case SD_CARD_RECEIVING:
|
|
*state = HAL_SD_STAT_RECEIVING;
|
|
break;
|
|
|
|
case SD_CARD_TRANSFER:
|
|
*state = HAL_SD_STAT_TRANSFER;
|
|
break;
|
|
|
|
case SD_CARD_ERROR:
|
|
*state = HAL_SD_STAT_ERROR;
|
|
break;
|
|
|
|
default:
|
|
ret = -1;
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
__API__ int tos_hal_sd_deinit(hal_sd_t *sd)
|
|
{
|
|
(void)sd;
|
|
return 0;
|
|
}
|
|
|