SD 通用类设备驱动

更新时间:
2024-01-09
下载文档

SD 通用类设备驱动

概述

SD 通用设备类驱动主要是供 SD 存储卡类设备驱动和 SDIO 类设备基础驱动使用,一般不会用到此类设备驱动注册,如果随着协议的发展有其他不属于以上类型的通用设备驱动,则需要使用此方法注册。

SD 通用类设备驱动注册

向 SDM 层注册 SD 通用类设备驱动只需要调用 API_SdmSdDrvRegister 函数即可,其原型如下:

#include <SylixOS.h>
INT   API_SdmSdDrvRegister(SD_DRV *psddrv);

函数 API_SdmSdDrvRegister 原型分析:

  • 此函数成功返回 ERROR_NONE ,失败返回 PX_ERROR
  • psddrv 参数:通用类设备驱动对象指针。

需要填充的 SD_DRV 结构体其详细描述如下:

#include <SylixOS.h>
struct sd_drv {
    LW_LIST_LINE  SDDRV_lineManage;       /*  驱动挂载链                        */
    CPCHAR        SDDRV_cpcName;
    INT         (*SDDRV_pfuncDevCreate)(SD_DRV *psddrv, PLW_SDCORE_DEVICE psdcoredev, VOID **ppvDevPriv);
    INT         (*SDDRV_pfuncDevDelete)(SD_DRV *psddrv, VOID *pvDevPriv);
    atomic_t      SDDRV_atomicDevCnt;
    VOID         *SDDRV_pvSpec;
};
  • SDDRV_lineManage:SDM 内部将注册的驱动以链表的形式管理起来。
  • SDDRV_cpcName:驱动名称。
  • SDDRV_pfuncDevCreate:驱动创建对应设备的方法。参数 psdcoredev 由 SDM 提供,输出参数 ppvDevPriv 保存创建的设备私有数据。
  • SDDRV_pfuncDevDelete:驱动删除对应设备的方法。参数 pvDevPriv 即为创建时的设备私有数据。上面的设备创建和删除方法的定义是很多系统中采用的形式,即驱动完成具体的工作和自身的数据处理,而 SDM 负责在何时使用驱动处理这些工作。
  • SDDRV_atomicDevCnt:该驱动对应的设备计数,即当前有多少个设备在使用该驱动,此信息的主要用途是判断当前驱动是否能被删除。
  • SDDRV_pvSpec:由 SDM 内部使用,驱动程序本身不关心该成员的意义。当前,SDM 内部使用此指针保存一个“驱动为它的设备分配设备单元号的【数据对象】”。

由于该种类设备驱动基本不会被用到,因此这里不做详细展开,如若有相关需求请直接参考 SD 存储卡类设备驱动和 SDIO 类设备基础驱动的注册,以上两个设备在操作系统中的目录是“libsylixos/SylixOS/system/device/sdcard/client/”。

文档内容是否对您有所帮助?
有帮助
没帮助