支持 USB 充电器的 USB 筛选器驱动程序

如果功能控制器使用内置 Synopsys 和 ChipIdea 驱动程序,则编写支持充电器检测的筛选器驱动程序。 如果要为专有功能控制器编写客户端驱动程序,则通过实现 EVT_UFX_DEVICE_PROPRIETARY_CHARGER_SET_PROPERTYEVT_UFX_DEVICE_PROPRIETARY_CHARGER_RESETEVT_UFX_DEVICE_DETECT_PROPRIETARY_CHARGER,将充电器/附加检测集成到客户端驱动程序中。

USB 功能堆栈允许设备(如手机或平板电脑)在连接到 USB 电池充电 (BC) 1.2 规范定义的主机和 USB 充电器时充电。

  • 设备可以使用两种类型的端口进行充电。 设备可以从设备随附的充电器上的专用充电端口 (DCP) 充电。 或者,设备可以从标准下游端口或在设备连接到电脑时向下游端口充电。 这两种情况都符合 USB BC 1.2 规范

  • 某些充电器不符合规范。 USB 功能堆栈允许设备从这些专有 USB 充电器充电。

若要支持符合规范的专有充电器,需要执行这些操作。

  • 设备能够检测到 USB 主机或充电器何时连接或分离。
  • 设备能够检测到 BC 1.2 规范定义的不同 USB 充电端口。
  • 对于 BC 1.2 规范定义的 USB 充电器,设备按 BC 1.2 规范允许的最大电流量充电。
  • 设备能够检测专有的 USB 充电器。
  • 对于专用 USB 充电器,确定设备可以消耗的最大电流量。
  • 通知操作系统已连接的 USB 端口类型。
  • 阻止设备通过 OS 中的 USB 拉取电流,即使 USB 主机已连接且设备已使用主机自行配置也是如此。

这些操作由 USB 函数类扩展 (UFX) /client 驱动程序 对和作为 USB 函数设备堆栈中的较低筛选器加载的筛选器驱动程序进行处理。 驱动程序管理 USB 充电,从 USB 端口检测开始,到通知电池堆栈何时可以开始充电,以及设备可以消耗的最大电流量。

下面是设备堆栈的体系结构表示形式。

USB 充电。

当 USB 端口连接到设备时,客户端驱动程序会通过较低筛选器驱动程序或中断收到通知。 此时,客户端驱动程序通过与 USB 硬件通信来执行端口检测,并将端口类型报告给 UFX。 或者,它可以请求筛选器驱动程序。 在这种情况下,筛选器驱动程序与 USB 硬件协调以执行 USB 端口检测,并将检测到的端口类型返回给客户端驱动程序,客户端驱动程序将其传递给 UFX。

根据端口类型,UFX 确定设备可以绘制的最大电流量,并将该信息发送到充电聚合驱动程序 (CAD) 。 CAD 验证信息。 如果当前有效,CAD 会向电池类驱动程序发送请求,以开始充电至指定的最大电流。 电池类驱动程序将充电请求转发到电池微型类驱动程序进行处理。 如果充电请求指定附加了专有充电器,并且电池微型类处理专有充电器,则微型类驱动程序可以尝试使用它确定合适的最大电流充电。 否则,电池微型类最多只能充电到 CAD 指定的最大电流。