SDIF
优质
小牛编辑
119浏览
2023-12-01
SDIF
简要说明
SDIF(SD Interface)是在SD内存卡接口的基础上发展起来的接口,接口兼容以前的SD内存卡,并且可以连接SD接口的设备。同时支持高速、低速模式。
接口描述
drv_sdif_initialize
sdif_handle_t drv_sdif_initialize(uint32_t idx, sdif_callback_t *callback,
void *user_data);
功能描述:
- 通过设备号初始化对应的SDIF实例,返回SDIF实例的句柄。
参数:
idx
: 设备号。callback
: sdif实例的事件回调函数。应用可根据回调函数做相应的行为。回调函数原型定义见sdif_callback_t。
/* \brief sdif callback functions. */
typedef struct {
void (*card_inserted)(uint32_t idx, void *user_data); ///< card insert call back
void (*card_removed)(uint32_t idx, void *user_data); ///< card remove call back
void (*sdif_interrupt)(uint32_t idx, void *user_data); ///< SDIF card interrupt occurs
void (*dma_des_unavailable)(uint32_t idx, void *user_data); ///< DMA descriptor unavailable
void (*command_reload)(uint32_t idx, void *user_data); ///< command buffer full,need re-load
void (*transfer_complete)(uint32_t idx, void *state, int32_t status, void *user_data); ///<Transfer complete callback
} sdif_callback_t;
- user_data:用户回调函数参数。
返回值:
- NULL: 初始化失败。
- 其它: 实例句柄。
sdif_callback_t:
名称 | 定义 | 备注 |
---|---|---|
card_inserted | SD卡或设备插入触发回调 | idx:设备号;user_data:用户注册的回调函数参数。 |
card_removed | SD卡或设备被拔出触发回调 | 同上 |
sdif_interrupt | SD卡或 设备产生中断信号 | 同上 |
dma_des_unavailable | DMA描述符不可用 | 同上 |
command_reload | 命令缓存已满,需要重新执行 | 同上 |
transfer_complete | 发送完毕 | idx:设备号;user_data:用户回调函数参数;state:;status:;user_data:; |
drv_sdif_uninitialize
void drv_sdif_uninitialize(sdif_handle_t handle);
功能描述:
- 反初始化SDIF实例。
参数:
handle
: SDIF 实例句柄。
返回值:
- 无。
drv_sdif_config
void drv_sdif_config(sdif_handle_t handle, sdif_config_t *config);
- 功能描述:
- SDIF实例配置。
- 参数:
handle
: SDIF 实例句柄。config
: SDIF 配置参数,见sdif_config_t定义。
- 返回值:
- 无。
sdif_config_t:
名称 | 定义 | 备注 |
---|---|---|
response_timeout | 命令响应超时值 | |
card_det_debounce_clock | 用于检测设备接口反跳的时钟计数,典型值为5-25ms | |
endian_mode | 定义endian模式,此字段实际上不在此模块中使用,保持与中间件兼容 | |
data_timeout | 数据超时时间 |
drv_sdif_get_capabilities
void drv_sdif_get_capabilities(sdif_handle_t handle, sdif_capability_t *capability);
- 功能描述:
- 获取SDIF实例的功能列表。
- 参数:
handle
: SDIF 实例句柄。capability
: SDIF 功能列表,见sdif_capability_t定义。
- 返回值:
- 无。
sdif_capability_t:
名称 | 定义 | 备注 |
---|---|---|
sd_version | 支持的sd卡/sdif 的版本 | |
mmc_version | 支持的emmc 卡的版本 | |
max_block_length | 最大块长度(bytes) | |
max_block_count | 可以传输的最大字节数 | |
flags | 指示支持信息的功能标志,见sdif_capability_flag_e定义,对应位为1表示支持 |
sdif_capability_flag_e:
名称 | 定义 | 备注 |
---|---|---|
SDIF_SUPPORT_HIGH_SPEED | 高速功能 | |
SDIF_SUPPORT_DMA_SPEED | DMA功能 | |
SDIF_SUPPORT_USPEND_RESUME | 暂停/恢复 | |
SDIF_SUPPORT_V330 | 3.3v电压 | |
SDIF_SUPPORT_4BIT | 4bit模式 | |
SDIF_SUPPORT_8BIT | 8bit模式 |
drv_sdif_power_control
int32_t drv_sdif_power_control(sdif_handle_t handle, csi_power_stat_e state);
- 功能描述:
- 获取SDIF实例功率控制。
- 参数:
handle
: SDIF 实例句柄。state
: 功率状态设置,见csi_power_stat_e定义。
- 返回值:
- 0:成功。
- 其他:错误码。
csi_power_stat_e:
名字 | 定义 | 备注 |
---|---|---|
DRV_POWER_OFF | 关电源状态 | |
DRV_POWER_LOW | 低电平状态 | |
DRV_POWER_FULL | 全电源状态 | |
DRV_POWER_SUSPEND | 挂起电源状态 |
drv_sdif_send_command
int32_t drv_sdif_send_command(sdif_handle_t handle, sdif_command_t *cmd,
uint32_t retries);
- 功能描述:
- SDIF发送指令。
- 参数:
handle
: SDIF 实例句柄。cmd
: 发送的命令,见sdif_command_t定义。retries
: 命令重试次数。
- 返回值:
- 0:成功。
- 其他:错误码。
sdif_command_t:
名称 | 定义 | 备注 |
---|---|---|
index | 命令索引 | |
argument | 命令参数 | |
response | 命令的响应 | |
type | 命令类型 | |
response_type | 命令响应类型 | |
flags | 命令标志 | |
resopnse_error_flags | 命令响应标志 |
drv_sdif_transfer
int32_t drv_sdif_transfer(sdif_handle_t handle, sdif_dma_config_t *dma_config, sdif_transfer_t *transfer);
- 功能描述:
- SDIF传输函数,在轮询/非阻塞模式下传输 数据/指令。
- 参数:
handle
: SDIF 实例句柄。dma_config
: dma的参数配置,此参数为NULL使用轮询发送,配置DMA参数使用dma发送,参数见sdif_dma_config_t定义。transfer
: sdif传输配置,见sdif_transfer_t定义。
- 返回值:
- 0:成功。
- 其他:错误码。
sdif_dma_config_t:
名称 | 定义 | 备注 |
---|---|---|
enable_fix_burst_len | 启动修正burst len | |
mode | dma模式 | |
dma_des_buffer_start_addr | 内部DMA描述符启动地址 | |
dma_des_buffer_len | 内部DMA描述符缓存区长度 | |
dma_dws_skip_len | 定义描述符跳过长度,该字段的两个描述符之间的长度对于双DMA模式是特殊的 |
sdif_transfer_t:
名称 | 定义 | 备注 |
---|---|---|
data | 传输的数据,见sdif_data_t定义 | |
command | 传输的命令,见sdif_command_t定义 |
sdif_data_t:
名称 | 定义 | 备注 |
---|---|---|
stream_transfer | 指示是否是一个流数据传输命令 | |
enable_auto_command12 | 当数据传输结束时,请指示是否自动停止发送 | |
enable_ignore_error | 指示传输中是否启动忽略错误 | |
block_size | 块大小 | |
block_count | 块计数 | |
rx_date_buffer | 接收数据缓存区 | |
tx_data_buffer | 发送数据缓存区 |
drv_sdif_transfer_abort
void drv_sdif_transfer_abort(sdif_handle_t handle);
- 功能描述:
- SDIF中止传输。
- 参数:
handle
: SDIF 实例句柄。
- 返回值:
- 无。
drv_sdif_bus_width
void drv_sdif_bus_width(sdif_handle_t handle, sdif_bus_width_e bus_width);
- 功能描述:
- SDIF设置总线宽度。
- 参数:
handle
: SDIF 实例句柄。bus_width
: sdif设置总线宽度,见bus_width定义。
- 返回值:
- 无。
名称 | 定义 | 备注 |
---|---|---|
SDIF_BUS_1BIT_WIDTH | 1bit总线宽度、1bit模式和4bit模式共享一个寄存器位 | |
SDIF_BUS_4BIT_WIDTH | 4bit模式 | |
SDIF_BUS_8BIT_WIDTH | 8bit模式 |
drv_sdif_set_clock
uint32_t drv_sdif_set_clock(sdif_handle_t handle, uint32_t target_hz);
- 功能描述:
- SDIF设置时钟频率。
- 参数:
handle
: SDIF 实例句柄。target_hz
: 设置时钟频率。
- 返回值:
- 0:成功。
- 其他:错误码。
drv_sdif_get_handle
sdif_handle_t drv_sdif_get_handle(uint32_t idx);
- 功能描述:
- SDIF通过设备号获取实例句柄。
- 参数:
idx
: 设备号。
- 返回值:
- NULL:失败。
- 其他:实例句柄。
drv_sdif_get_idx
uint32_t drv_sdif_get_idx(sdif_handle_t handle);
- 功能描述:
- SDIF通过实例句柄获取设备号。
- 参数:
handle
: SDIF 实例句柄。
- 返回值:
- 设备号