SD 卡驱动程序堆栈
安全数字 (SD) 卡技术始于便携式微型存储卡,但随着安全数字 I/O (SDIO) 规范的发布,安全数字协会 (SDA) 扩大了 SD 技术的定义,包括各种卡功能,如蓝牙设备、摄像机、无线 LAN 设备, 和全局定位系统 (GPS) 接收器。 本文档介绍操作系统如何支持 SD 技术的 卡 函数扩展。
许多早期 SD 存储设备的读卡器设计为连接到 USB 总线。 Windows 使用 USB 大容量存储驱动程序 (usbstor.sys) 和本机存储类驱动程序 (disk.sys) 来管理这些设备,如下图所示:
有关 Windows 为连接到 USB 总线的内存卡创建的设备堆栈的更完整说明,请参阅 USB 大容量存储设备的设备对象示例。
操作系统支持直接连接到 PCI 总线的 SD 主机控制器。 当系统枚举 SD 主控制器时,它将加载本机 SD 总线驱动程序 (sdbus.sys) 。 如果用户插入 SD 内存卡,Windows 将加载本机 SD 存储类驱动程序 (sffdisk.sys) ,存储微型端口驱动程序 (总线驱动程序顶部sffp_sd.sys) 。 如果用户插入具有其他类型功能的 SD 卡(例如 GPS 或无线 LAN),则 Windows 会加载供应商为该设备提供的驱动程序。
SD 堆栈中的所有设备驱动程序(无论是本机驱动程序还是供应商提供的驱动程序)都必须通过调用静态 SD 总线库中 (sdbus.lib) 中的例程来与 SD 总线驱动程序通信。 SD 驱动程序在编译时必须链接到此库。 下图描绘了系统在枚举 SD 控制器和随附卡时创建的 SD 驱动程序堆栈:
SD 设备驱动程序不能直接访问主机控制器寄存器集,也不能在 I/O 请求数据包中嵌入主机控制器的直通命令, (IRP) 。 SD 设备驱动程序通过调用 SD 总线库例程向主机控制器发出命令,然后库为主机控制器生成相应的 SD 命令。
SD 设备驱动程序必须处理标准 PnP 和电源 IRP,但它们不会请求或管理硬件资源,例如端口、内存或中断矢量。 因此,处理 IRP_MN_START_DEVICE 请求时,不需要 SD 设备驱动程序映射任何硬件资源。 但是,当 SD 设备驱动程序收到 IRP_MN_STOP_DEVICE 请求时,它必须停止所有 I/O 操作。 此外,驱动程序必须关闭其与 SD 总线驱动程序的接口,以响应 IRP_MN_QUERY_REMOVE_DEVICE 请求。
发生硬件中断时,SD 总线库会截获中断,屏蔽进一步的中断,并通过回调例程通知 SD 设备驱动程序硬件中断已发生。 有关总线驱动程序用于通知 SD 设备驱动程序硬件中断的回调例程的说明,请参阅 PSDBUS_CALLBACK_ROUTINE。 有关 SD 驱动程序堆栈和库如何管理硬件中断的一般说明,请参阅 处理安全数字 (SD) 硬件中断。
windows 驱动程序工具包 (WDK) 中提供的 ntddsd.h 头文件声明 SD 总线库公开的例程的原型。