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

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

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

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

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

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

  • 设备能够检测 USB 主机或充电器何时连接或分离。
  • 设备能够检测 BC 1.2 规范定义的不同 USB 充电端口。
  • 对于由 BC 1.2 规格定义的 USB 充电器,设备会以 BC 1.2 规范允许的最大电流进行充电。
  • 该设备能够检测专有 USB 充电器。
  • 对于专有 USB 充电器,请确定设备可以汲取的最大电流。
  • 通知操作系统关于连接的 USB 端口类型。
  • 阻止设备在操作系统中通过 USB 抽取电流,即使已连接 USB 主机,并且设备已经配置为与主机连接。

这些操作由 USB 功能类扩展 (UFX)/客户端驱动程序 对处理,并由作为 USB 功能设备堆栈中下筛选器加载的筛选器驱动程序来完成。 驱动程序从 USB 端口检测开始管理 USB 充电,以通知电池组何时可以开始充电,以及设备可以承受的最大电流量。

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

USB 充电。

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

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