当前位置: 首页 > 文档资料 > YoC 编程基础 >

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_insertedSD卡或设备插入触发回调idx:设备号;user_data:用户注册的回调函数参数。
card_removedSD卡或设备被拔出触发回调同上
sdif_interruptSD卡或 设备产生中断信号同上
dma_des_unavailableDMA描述符不可用同上
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_SPEEDDMA功能
SDIF_SUPPORT_USPEND_RESUME暂停/恢复
SDIF_SUPPORT_V3303.3v电压
SDIF_SUPPORT_4BIT4bit模式
SDIF_SUPPORT_8BIT8bit模式

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
modedma模式
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_WIDTH1bit总线宽度、1bit模式和4bit模式共享一个寄存器位
SDIF_BUS_4BIT_WIDTH4bit模式
SDIF_BUS_8BIT_WIDTH8bit模式

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 实例句柄。
  • 返回值:
    • 设备号