跳转至

SDIO

SDIO Slave 模式下 WS63 作为从设备通过 SDIO 总线与主机通信。物理层使用 6 线(CLK + CMD + DATA0~DATA3),所有传输由主机发起,从机响应。

提供消息机制(sched_msg/sync_msg/process_msg)和完整的中断回调覆盖(读/写/消息/复位)。典型场景:WiFi/BT 模组通过 SDIO 向应用处理器上报数据,速率可达数十 MB/s。

头文件清单

#include "include/driver/sdio/sdio_slave.h"

接口清单

接口名称 功能简述
uapi_sdio_slave_init 初始化SDIO从设备
uapi_sdio_slave_deinit 去初始化SDIO从设备
uapi_sdio_slave_reinit 重新初始化SDIO从设备
uapi_sdio_slave_soft_reset 复位SDIO IP芯片
uapi_sdio_slave_register_callback 注册SDIO中断回调函数
uapi_sdio_slave_complete_send 配置EDMA描述符结束标志
uapi_sdio_slave_set_pad_admatab 配置数据对齐后的ADMA表
uapi_sdio_slave_write_extend_info 写SDIO扩展信息
uapi_sdio_slave_get_extend_info 获取SDIO扩展区配置信息
uapi_sdio_slave_prepare_send_data 启动数据发送
uapi_sdio_slave_set_admatab 设置ADMA传输通道
uapi_sdio_slave_sched_msg 调度SDIO挂起消息
uapi_sdio_slave_sync_msg 将消息加入消息队列并发送
uapi_sdio_slave_send_msg_ack 发送指定消息ACK
uapi_sdio_slave_process_msg 清除挂起消息并加入新消息发送
uapi_sdio_slave_is_pending_msg 判断指定消息是否处于挂起状态
uapi_sdio_slave_is_sending_msg 判断指定消息是否处于发送状态
uapi_sdio_slave_register_notify_message_callback 注册通知Host消息事件回调
uapi_sdio_slave_read_retry_when_read_err 读错误时重试读取
uapi_sdio_slave_init_no_wait 非阻塞初始化SDIO
uapi_sdio_slave_host_clk_ready 判断Host时钟是否就绪
uapi_sdio_slave_get_status 获取当前SDIO通道状态信息
uapi_sdio_slave_set_status 设置当前SDIO通道状态信息
uapi_sdio_slave_memory_init SDIO内存初始化
uapi_sdio_slave_get_info 获取SDIO状态信息
uapi_sdio_slave_set_extend_val_info 写扩展信息指定偏移量的值
uapi_sdio_slave_get_extend_val_info 获取扩展信息指定偏移量的值

Functions

uapi_sdio_slave_init

errcode_t uapi_sdio_slave_init(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 初始化指定SDIO从设备总线,完成硬件资源配置与中断注册
  • 初始化成功后SDIO从设备进入工作状态,可响应Host端读写操作
  • 调用该接口前需确保SDIO对应引脚已通过pinctrl完成复用配置

前置条件

  • SDIO对应引脚已通过pinctrl完成复用配置
  • SDIO硬件资源已就绪

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 初始化成功
Other 其他错误码,参考errcode_t 执行失败

uapi_sdio_slave_deinit

void uapi_sdio_slave_deinit(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 去初始化SDIO从设备,释放硬件资源与中断注册
  • 调用后SDIO从设备停止工作,不再响应Host端操作
  • 与uapi_sdio_slave_init配对使用

前置条件

  • SDIO从设备已通过uapi_sdio_slave_init初始化完成

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

uapi_sdio_slave_reinit

errcode_t uapi_sdio_slave_reinit(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 重新初始化SDIO从设备,用于设备异常恢复或配置变更后重新建立通信
  • 调用后SDIO从设备重新进入工作状态
  • 适用于SDIO通信异常后需要重新建立连接的场景

前置条件

  • SDIO从设备已通过uapi_sdio_slave_init初始化完成

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 重新初始化成功
Other 其他错误码,参考errcode_t 执行失败

uapi_sdio_slave_soft_reset

errcode_t uapi_sdio_slave_soft_reset(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 复位SDIO IP芯片,将SDIO控制器恢复到初始状态
  • 软复位后SDIO控制器寄存器恢复默认值,需重新初始化
  • 适用于SDIO控制器异常需硬件级复位的场景

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 复位成功
Other 其他错误码,参考errcode_t 复位失败

uapi_sdio_slave_register_callback

errcode_t uapi_sdio_slave_register_callback(sdio_bus_t bus, const sdio_callback_func_t* cb_func)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 注册SDIO中断回调函数,当Host端发起读写操作、消息接收或软复位时触发对应回调
  • 通过sdio_callback_func_t结构体指定各类回调函数
  • 回调函数在中断上下文中执行,禁止在回调中执行阻塞操作

前置条件

  • SDIO从设备已初始化
  • cb_func指针不为NULL且指向已分配的回调函数结构体

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
cb_func const sdio_callback_func_t* 回调函数结构体指针,参考sdio_callback_func_t 非NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 注册成功
Other 其他错误码,参考errcode_t 注册失败

uapi_sdio_slave_complete_send

void uapi_sdio_slave_complete_send(sdio_bus_t bus, uint32_t admatable_addr, uint32_t data_len, bool is_complete)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 配置EDMA描述符结束标志,标记数据发送是否完成
  • 通过ADMA表地址和数据长度配置EDMA传输描述符
  • is_complete为true时标记本次发送为最后一帧数据

前置条件

  • SDIO从设备已初始化
  • admatable_addr指向有效的ADMA描述符表

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
admatable_addr uint32_t ADMA描述符表地址 有效的ADMA表地址
data_len uint32_t 发送数据长度 大于0
is_complete bool 是否为最后一帧发送标志 true/false

uapi_sdio_slave_set_pad_admatab

void uapi_sdio_slave_set_pad_admatab(sdio_bus_t bus, uint32_t admatable_addr, uint32_t pad_len, uint32_t data_len, bool is_complete)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 配置数据对齐后的ADMA表,用于处理数据长度非对齐情况下的ADMA描述符
  • pad_len指定对齐填充长度,data_len指定实际数据长度
  • is_complete为true时标记本次发送为最后一帧数据

前置条件

  • SDIO从设备已初始化
  • admatable_addr指向有效的ADMA描述符表

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
admatable_addr uint32_t ADMA描述符表地址 有效的ADMA表地址
pad_len uint32_t 对齐填充长度 大于等于0
data_len uint32_t 实际数据长度 大于0
is_complete bool 是否为最后一帧发送标志 true/false

uapi_sdio_slave_write_extend_info

errcode_t uapi_sdio_slave_write_extend_info(sdio_bus_t bus, const sdio_extendfunc_t* extend_info)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 写SDIO扩展信息,将扩展功能结构体数据写入SDIO扩展寄存器区域
  • 用于配置SDIO从设备与Host之间的扩展通信参数
  • 写入后Host端可通过SDIO扩展寄存器读取配置信息

前置条件

  • SDIO从设备已初始化
  • extend_info指针不为NULL且指向有效的扩展功能结构体
  • CONFIG_SDIO_EXTEND_INFO宏已定义

Kconfig

配置项 宏类型 说明 默认值
CONFIG_SDIO_EXTEND_INFO 功能宏 支持SDIO扩展信息功能 n

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
extend_info const sdio_extendfunc_t* 扩展功能结构体指针,参考sdio_extendfunc_t 非NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入成功
Other 其他错误码,参考errcode_t 写入失败

uapi_sdio_slave_get_extend_info

errcode_t uapi_sdio_slave_get_extend_info(sdio_bus_t bus, sdio_extendfunc_t* extend_info)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 获取SDIO扩展区配置信息,读取SDIO扩展寄存器区域的当前配置
  • 通过输出参数返回扩展功能结构体数据
  • 用于查询SDIO从设备与Host之间的扩展通信参数

前置条件

  • SDIO从设备已初始化
  • extend_info指针不为NULL且指向已分配的内存
  • CONFIG_SDIO_EXTEND_INFO宏已定义

Kconfig

配置项 宏类型 说明 默认值
CONFIG_SDIO_EXTEND_INFO 功能宏 支持SDIO扩展信息功能 n

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

出参

名称 数据类型 输出说明
extend_info sdio_extendfunc_t* 扩展功能结构体指针,参考sdio_extendfunc_t

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取成功
Other 其他错误码,参考errcode_t 获取失败

uapi_sdio_slave_prepare_send_data

errcode_t uapi_sdio_slave_prepare_send_data(sdio_bus_t bus, uint32_t admatable_addr, uint32_t data_len, uint16_t msg, bool is_complete)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 启动数据发送,配置ADMA描述符表并通知Host端有数据待读取
  • 同时指定消息ID,Host端通过消息ID识别数据类型
  • is_complete为true时标记本次发送为最后一帧数据

前置条件

  • SDIO从设备已初始化
  • admatable_addr指向有效的ADMA描述符表
  • msg为有效的消息ID

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
admatable_addr uint32_t ADMA描述符表地址 有效的ADMA表地址
data_len uint32_t 发送数据长度 大于0
msg uint16_t 消息ID 0~31
is_complete bool 是否为最后一帧发送标志 true/false

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 发送准备完成
Other 其他错误码,参考errcode_t 准备失败

uapi_sdio_slave_set_admatab

void uapi_sdio_slave_set_admatab(sdio_bus_t bus, uint32_t admatable_addr, uint32_t data_len, uint16_t msg, bool is_complete)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 设置ADMA传输通道,配置ADMA描述符表、数据长度和消息ID
  • 与uapi_sdio_slave_prepare_send_data类似,但不触发发送通知
  • 适用于预先配置ADMA传输通道后再统一调度发送的场景

前置条件

  • SDIO从设备已初始化
  • admatable_addr指向有效的ADMA描述符表

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
admatable_addr uint32_t ADMA描述符表地址 有效的ADMA表地址
data_len uint32_t 发送数据长度 大于0
msg uint16_t 消息ID 0~31
is_complete bool 是否为最后一帧发送标志 true/false

uapi_sdio_slave_sched_msg

errcode_t uapi_sdio_slave_sched_msg(sdio_bus_t bus, uint16_t msg)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 调度SDIO挂起消息,将指定消息ID加入挂起队列并通知Host
  • Host端收到通知后可读取对应消息的数据
  • 适用于已通过uapi_sdio_slave_set_admatab配置好传输通道后调度发送

前置条件

  • SDIO从设备已初始化
  • msg为有效的消息ID

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint16_t 消息ID 0~31

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 调度成功
Other 其他错误码,参考errcode_t 调度失败

uapi_sdio_slave_sync_msg

errcode_t uapi_sdio_slave_sync_msg(sdio_bus_t bus, uint16_t msg, uint32_t timeout)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 将消息加入消息队列并发送,同步等待Host端确认接收
  • timeout指定同步等待超时时间,超时后返回错误码
  • 适用于需要确认Host端已接收消息的同步通信场景

前置条件

  • SDIO从设备已初始化
  • msg为有效的消息ID

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint16_t 消息ID 0~31
timeout uint32_t 同步等待超时时间 大于0

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 消息同步发送成功
Other 其他错误码,参考errcode_t 同步发送失败或超时

uapi_sdio_slave_send_msg_ack

errcode_t uapi_sdio_slave_send_msg_ack(sdio_bus_t bus, uint16_t msg)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 发送指定消息ACK,通知Host端该消息已被Device端确认处理
  • 用于Host-Device消息确认机制
  • 适用于Host端发送消息后Device端需回复确认的场景

前置条件

  • SDIO从设备已初始化
  • msg为有效的消息ID

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint16_t 消息ID 0~31

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 ACK发送成功
Other 其他错误码,参考errcode_t ACK发送失败

uapi_sdio_slave_process_msg

void uapi_sdio_slave_process_msg(sdio_bus_t bus, uint32_t msg)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 清除挂起消息并加入新消息发送,用于消息处理流程
  • 先清除当前挂起的指定消息,再将新消息加入发送队列
  • 适用于消息状态切换场景

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint32_t 消息ID 0~31

uapi_sdio_slave_is_pending_msg

bool uapi_sdio_slave_is_pending_msg(sdio_bus_t bus, uint32_t msg)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 判断指定消息是否处于挂起状态
  • 挂起状态表示消息已加入队列但尚未被Host端读取
  • 用于查询消息发送流程中的当前状态

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint32_t 消息ID 0~31

返回值

  • 返回类型:bool
返回值 文字含义 触发场景
true 消息处于挂起状态 指定消息已挂起
false 消息未处于挂起状态 指定消息未挂起

uapi_sdio_slave_is_sending_msg

bool uapi_sdio_slave_is_sending_msg(sdio_bus_t bus, uint32_t msg)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 判断指定消息是否处于发送状态
  • 发送状态表示消息正在通过SDIO总线传输中
  • 用于查询消息发送流程中的当前状态

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
msg uint32_t 消息ID 0~31

返回值

  • 返回类型:bool
返回值 文字含义 触发场景
true 消息处于发送状态 指定消息正在发送
false 消息未处于发送状态 指定消息未在发送

uapi_sdio_slave_register_notify_message_callback

void uapi_sdio_slave_register_notify_message_callback(sdio_bus_t bus, notify_host_event_t event_callback)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 注册通知Host消息事件回调,当SDIO从设备有消息或数据需要通知Host时触发
  • 回调函数类型为notify_host_event_t,参数为SDIO总线编号
  • 注册后Device端发送消息时自动通过回调通知Host

前置条件

  • SDIO从设备已初始化
  • event_callback为有效的回调函数指针

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
event_callback notify_host_event_t 通知Host事件回调函数,参考notify_host_event_t 非NULL

uapi_sdio_slave_read_retry_when_read_err

void uapi_sdio_slave_read_retry_when_read_err(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 读错误时重试读取,当Host端读数据发生错误时由Device端调用
  • 重新配置ADMA传输通道以允许Host端重新发起读操作
  • 适用于Host端读数据校验失败后需要重试的场景

前置条件

  • SDIO从设备已初始化
  • Host端读数据发生错误

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

uapi_sdio_slave_init_no_wait

errcode_t uapi_sdio_slave_init_no_wait(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 非阻塞初始化SDIO从设备,初始化后不等待Host端就绪
  • 与uapi_sdio_slave_init的区别在于不阻塞等待Host端卡就绪和Function1就绪
  • 适用于Host端初始化时序不确定或异步初始化场景

前置条件

  • SDIO对应引脚已通过pinctrl完成复用配置
  • SDIO硬件资源已就绪

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 非阻塞初始化成功
Other 其他错误码,参考errcode_t 初始化失败

uapi_sdio_slave_host_clk_ready

bool uapi_sdio_slave_host_clk_ready(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 判断Host端时钟是否就绪
  • Host端时钟就绪后Device端可正常进行SDIO数据传输
  • 适用于非阻塞初始化后轮询Host端状态的场景

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:bool
返回值 文字含义 触发场景
true Host时钟就绪 Host端时钟已就绪
false Host时钟未就绪 Host端时钟未就绪

uapi_sdio_slave_get_status

errcode_t uapi_sdio_slave_get_status(sdio_bus_t bus, sdio_status_info_t* satus_info)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 获取当前SDIO通道的状态信息,包括睡眠允许状态、发送状态、睡眠状态和工作状态
  • 通过输出参数返回状态信息结构体
  • 用于查询SDIO从设备的运行状态

前置条件

  • SDIO从设备已初始化
  • satus_info指针不为NULL且指向已分配的内存

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

出参

名称 数据类型 输出说明
satus_info sdio_status_info_t* 存储状态信息的缓冲区指针,参考sdio_status_info_t

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取成功
Other 其他错误码,参考errcode_t 获取失败

uapi_sdio_slave_set_status

errcode_t uapi_sdio_slave_set_status(sdio_bus_t bus, const sdio_status_info_t* satus_info)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 设置当前SDIO通道的状态信息,包括睡眠允许状态、发送状态、睡眠状态和工作状态
  • 通过输入参数指定目标状态信息结构体
  • 用于配置SDIO从设备的运行状态

前置条件

  • SDIO从设备已初始化
  • satus_info指针不为NULL且指向有效的状态信息结构体

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
satus_info const sdio_status_info_t* 指向存储状态信息的缓冲区,参考sdio_status_info_t 非NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 设置成功
Other 其他错误码,参考errcode_t 设置失败

uapi_sdio_slave_memory_init

void uapi_sdio_slave_memory_init(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • SDIO内存初始化函数,初始化SDIO从设备所需的内存资源
  • 用于SDIO从设备启动时或重置后重新分配内存
  • 调用后SDIO从设备内存空间完成初始化

前置条件

  • SDIO硬件资源已就绪

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

uapi_sdio_slave_get_info

sdio_info_t* uapi_sdio_slave_get_info(sdio_bus_t bus)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 获取SDIO状态信息,包括电压切换标志、Host到Device消息标志、重初始化次数、GPIO中断次数、SDIO状态和通道信息等
  • 返回指向sdio_info_t结构体的指针
  • 用于查询SDIO从设备的综合运行信息

前置条件

  • SDIO从设备已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线

返回值

  • 返回类型:sdio_info_t*
返回值 文字含义 触发场景
非NULL指针 sdio_info_t结构体指针 获取成功
NULL 空指针 获取失败或总线无效

参考案例

  • include/driver/sdio/sdio_slave.h#uapi_sdio_slave_get_info

uapi_sdio_slave_set_extend_val_info

void uapi_sdio_slave_set_extend_val_info(sdio_bus_t bus, uint32_t offset, uint32_t val)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 写扩展信息指定偏移量的值,向SDIO扩展信息区域的指定地址偏移量写入数据
  • 用于配置SDIO从设备扩展寄存器区域的通信参数
  • CONFIG_SDIO_EXTEND_INFO宏未定义时此接口不可用

前置条件

  • SDIO从设备已初始化
  • CONFIG_SDIO_EXTEND_INFO宏已定义

Kconfig

配置项 宏类型 说明 默认值
CONFIG_SDIO_EXTEND_INFO 功能宏 支持SDIO扩展信息功能 n

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
offset uint32_t 地址偏移量 有效扩展信息区域偏移
val uint32_t 设置的值 32位无符号整数

uapi_sdio_slave_get_extend_val_info

uint32_t uapi_sdio_slave_get_extend_val_info(sdio_bus_t bus, uint32_t offset)

头文件清单

#include "include/driver/sdio/sdio_slave.h"

功能说明

  • 获取扩展信息指定偏移量的值,从SDIO扩展信息区域的指定地址偏移量读取数据
  • 用于查询SDIO从设备扩展寄存器区域的配置参数
  • CONFIG_SDIO_EXTEND_INFO宏未定义时此接口不可用

前置条件

  • SDIO从设备已初始化
  • CONFIG_SDIO_EXTEND_INFO宏已定义

Kconfig

配置项 宏类型 说明 默认值
CONFIG_SDIO_EXTEND_INFO 功能宏 支持SDIO扩展信息功能 n

入参

名称 参数类型 详细说明 约束取值范围
bus sdio_bus_t SDIO总线编号 由sdio_porting.h定义的有效SDIO总线
offset uint32_t 地址偏移量 有效扩展信息区域偏移

返回值

  • 返回类型:uint32_t
返回值 文字含义 触发场景
扩展信息值 偏移量对应的值 读取成功

Type definitions

notify_host_event_t

notify_host_event_t

typedef void (*notify_host_event_t)(sdio_bus_t bus);

使用说明:用于uapi_sdio_slave_register_notify_message_callback接口的event_callback参数,当SDIO从设备有消息或数据需要通知Host时通过此回调触发事件通知

Enumerations

sdio_channel_t

sdio_channel_t

typedef enum {
    SDIO_CHANNEL_ERR    = 0x0,          /*!< SDIO错误 */
    SDIO_CHANNEL_RESET,                 /*!< 重置SDIO */
    SDIO_CHANNEL_INIT,                  /*!< 初始化SDIO */
    SDIO_CHANNEL_SLEEP,                 /*!< SDIO睡眠状态 */
    SDIO_CHANNEL_WAKE,                  /*!< 唤醒SDIO */
    SDIO_CHANNEL_WORK,                  /*!< SDIO工作状态 */
    SDIO_CHANNEL_BUTT                   /*!< SDIO状态枚举数 */
} sdio_channel_t;
枚举成员 取值 描述
SDIO_CHANNEL_ERR 0x0 SDIO错误状态
SDIO_CHANNEL_RESET 0x1 重置SDIO状态
SDIO_CHANNEL_INIT 0x2 初始化SDIO状态
SDIO_CHANNEL_SLEEP 0x3 SDIO睡眠状态
SDIO_CHANNEL_WAKE 0x4 唤醒SDIO状态
SDIO_CHANNEL_WORK 0x5 SDIO工作状态
SDIO_CHANNEL_BUTT 0x6 SDIO状态枚举总数(无效值,用于边界校验)

Structures

sdio_msg_t

sdio_msg_t

typedef struct sdio_msg {
    uint32_t pending_msg;                       /*!< 挂起中的消息 */
    uint32_t sending_msg;                       /*!< 发送中的消息 */
} sdio_msg_t;

成员说明

成员名称 数据类型 描述
pending_msg uint32_t 挂起中的消息
sending_msg uint32_t 发送中的消息

sdio_status_info_t

sdio_status_info_t

typedef struct sdio_status_info {
    uint8_t     allow_sleep;                    /*!< 允许睡眠 */
    uint8_t     tx_status;                      /*!< tx状态 */
    uint8_t     sleep_status;                   /*!< 睡眠状态 */
    sdio_channel_t  work_status;                /*!< 工作状态 */
} sdio_status_info_t;

成员说明

成员名称 数据类型 描述
allow_sleep uint8_t 允许睡眠标志
tx_status uint8_t 发送状态
sleep_status uint8_t 睡眠状态
work_status sdio_channel_t 工作状态,参考sdio_channel_t

sdio_extendfunc_t

sdio_extendfunc_t

#if defined(CONFIG_SDIO_EXTEND_INFO)
typedef struct sdio_extendfunc {
    uint32_t                   int_stat;
    uint32_t                   msg_stat;
    uint32_t                   xfer_count;
    uint32_t                   credit_info;
    uint8_t                    comm_reg[SDIO_EXTENDREG_COUNT];
    int32_t                    valid_commreg_cnt;
    int8_t                     commreg_isvalid;
    int8_t                     credit_isvalid;
} sdio_extendfunc_t;
#endif

Kconfig

配置项 宏类型 说明 默认值
CONFIG_SDIO_EXTEND_INFO 功能宏 支持SDIO扩展信息功能 n

成员说明

成员名称 数据类型 描述
int_stat uint32_t 中断状态
msg_stat uint32_t 消息状态
xfer_count uint32_t 传输计数
credit_info uint32_t 信用(credit)信息
comm_reg uint8_t[SDIO_EXTENDREG_COUNT] 通信寄存器数组,SDIO_EXTENDREG_COUNT由sdio_porting.h定义
valid_commreg_cnt int32_t 有效通信寄存器计数
commreg_isvalid int8_t 通信寄存器有效性标志
credit_isvalid int8_t 信用信息有效性标志

sdio_status_t

sdio_status_t

typedef struct sdio_status {
    uint16_t          rd_arg_invalid_cnt;
    uint16_t          wr_arg_invlaid_cnt;
    uint16_t          unsupport_int_cnt;
    uint16_t          mem_int_cnt;
    uint16_t          fn1_wr_over;
    uint16_t          fn1_rd_over;
    uint16_t          fn1_rd_error;
    uint16_t          fn1_rd_start;
    uint16_t          fn1_wr_start;
    uint16_t          fn1_rst;
    uint16_t          fn1_msg_rdy;
    uint16_t          fn1_ack_to_arm_int_cnt;
    uint16_t          fn1_adma_end_int;
    uint16_t          fn1_suspend;
    uint16_t          fn1_resume;
    uint16_t          fn1_adma_int;
    uint16_t          fn1_adma_err;
    uint16_t          fn1_en_int;
    uint16_t          fn1_msg_isr;
    uint16_t          soft_reset_cnt;
} sdio_status_t;

成员说明

成员名称 数据类型 描述
rd_arg_invalid_cnt uint16_t 读参数无效计数
wr_arg_invlaid_cnt uint16_t 写参数无效计数
unsupport_int_cnt uint16_t 不支持中断计数
mem_int_cnt uint16_t 内存中断计数
fn1_wr_over uint16_t Function1写溢出计数
fn1_rd_over uint16_t Function1读溢出计数
fn1_rd_error uint16_t Function1读错误计数
fn1_rd_start uint16_t Function1读启动计数
fn1_wr_start uint16_t Function1写启动计数
fn1_rst uint16_t Function1复位计数
fn1_msg_rdy uint16_t Function1消息就绪计数
fn1_ack_to_arm_int_cnt uint16_t Function1 ACK到ARM中断计数
fn1_adma_end_int uint16_t Function1 ADMA结束中断计数
fn1_suspend uint16_t Function1挂起计数
fn1_resume uint16_t Function1恢复计数
fn1_adma_int uint16_t Function1 ADMA中断计数
fn1_adma_err uint16_t Function1 ADMA错误计数
fn1_en_int uint16_t Function1使能中断计数
fn1_msg_isr uint16_t Function1消息中断服务计数
soft_reset_cnt uint16_t 软复位计数

sdio_chan_info_t

sdio_chan_info_t

typedef struct sdio_chan_info {
    uint32_t                 send_data_len;
    uint16_t                 last_msg;
    uint16_t                 panic_forced_timeout;
    uint16_t                 chan_msg_cnt[D2H_MSG_COUNT];
} sdio_chan_info_t;

成员说明

成员名称 数据类型 描述
send_data_len uint32_t 发送数据长度
last_msg uint16_t 最后一条消息
panic_forced_timeout uint16_t panic强制超时
chan_msg_cnt uint16_t[D2H_MSG_COUNT] 通道消息计数数组,D2H_MSG_COUNT由配置定义

sdio_info_t

sdio_info_t

typedef struct sdio_info {
    uint8_t                 volt_switch_flag;
    uint8_t                 host_to_device_msg_flag;
    uint16_t                reinit_times;
    uint16_t                gpio_int_times;
    uint16_t                pad;
    sdio_status_t           sdio_status;
    sdio_chan_info_t        chan_info;
    sdio_msg_t         sdio_msg_status;
} sdio_info_t;

成员说明

成员名称 数据类型 描述
volt_switch_flag uint8_t 电压切换标志
host_to_device_msg_flag uint8_t Host到Device消息标志
reinit_times uint16_t 重初始化次数
gpio_int_times uint16_t GPIO中断次数
pad uint16_t 填充对齐字段
sdio_status sdio_status_t SDIO状态,参考sdio_status_t
chan_info sdio_chan_info_t 通道信息,参考sdio_chan_info_t
sdio_msg_status sdio_msg_t 消息状态,参考sdio_msg_t

sdio_callback_func_t

sdio_callback_func_t

typedef struct sdio_callback_func {
    uint32_t (*read_start_callback)(uint32_t len, uint8_t *dma_tbl);    /*!< DEVICE感知到HOST发起了读操作 */
    uint32_t (*read_over_callback)(void);                               /*!< DEVICE感知到HOST读操作结束 */
    void (*read_err_callback)(void);                                    /*!< DEVICE感知到HOST读数据错误 */
    uint32_t (*write_start_callback)(uint32_t len, uint8_t *dma_tbl);   /*!< DEVICE感知到HOST发起了写操作 */
    uint32_t (*write_over_callback)(void);                              /*!< DEVICE感知到HOST写操作结束 */
    void (*process_msg_callback)(uint32_t);                             /*!< DEVICE接收到HOST发来的消息 */
    void (*soft_rst_callback)(void);                                    /*!< DEVICE接收到HOST发来的软复位 */
} sdio_callback_func_t;

成员说明

成员名称 数据类型 描述
read_start_callback uint32_t ()(uint32_t len, uint8_t dma_tbl) Host发起读操作时回调,DEVICE感知到HOST发起了读操作
read_over_callback uint32_t (*)(void) Host读操作结束时回调,DEVICE感知到HOST读操作结束
read_err_callback void (*)(void) Host读数据错误时回调,DEVICE感知到HOST读数据错误
write_start_callback uint32_t ()(uint32_t len, uint8_t dma_tbl) Host发起写操作时回调,DEVICE感知到HOST发起了写操作
write_over_callback uint32_t (*)(void) Host写操作结束时回调,DEVICE感知到HOST写操作结束
process_msg_callback void (*)(uint32_t) Device接收到Host消息时回调,DEVICE接收到HOST发来的消息
soft_rst_callback void (*)(void) Device接收到Host软复位时回调,DEVICE接收到HOST发来的软复位