蓝牙无线电重置和恢复是 Windows 10 版本 1803 及更高版本中的一种技术,为蓝牙无线电引入了可靠的重置和恢复机制。 此机制使蓝牙无线电能够从导致故障、连接丢失或对作命令无响应的硬件故障中恢复。 目标是自动恢复无线电,使用户体验无缝,并减少需要系统重启的可能性。
可以使用或不使用固件依赖项实现蓝牙无线电重置和恢复。 硬件合作伙伴可以扩展所有支持设备或固件级重置机制的 Windows 电脑上可用的基于软件的重置机制,以提高成功恢复的可能性。
重要
本主题面向开发人员。 如果你的客户遇到蓝牙问题,请参阅 修复 Windows 10 中的蓝牙问题。
蓝牙重置和恢复方案
启动重置和恢复时,有三大类问题:
总线枚举失败: 基础总线(通常是 USB 或 UART)未能正确枚举或重新枚举无线设备,这会在设备管理器中显示一个可见失败状态(黄色感叹号),可能表明底层硬件错误。
驱动程序枚举失败: 在基础总线成功枚举后,蓝牙设备处于失败状态。 为无线电构建驱动程序堆栈时,通常会发生此失败状态。 例如,在蓝牙无线电设备节点上安装筛选器或函数驱动程序时。 如果驱动程序在一个或多个启动操作中遇到错误,并因此报告 PnP 失败,可能会发生故障。 此类操作的一个示例可能是将固件下载到设备。
非枚举失败: 设备虽未处于失败状态,但按驱动程序堆栈的判定仍无法正常运行。 这些故障不在枚举路径之外,可能是一般的关键传输特定故障或特定于设备的故障,例如灾难性固件错误。 在这些情况下,使用以下蓝牙重置和恢复机制。
重置和恢复机制
虽然有不同方法从失败状态恢复,但蓝牙使用基于 ACPI 的标准化恢复机制尝试将无线电还原到工作状态。
GUID_DEVICE_RESET_INTERFACE_STANDARD 定义两个重置级别。 重置机制仅适用于 内部设备,因此不支持外部可插入的蓝牙无线电(如适配器)。 重置机制需要 Windows(通常是由函数驱动程序堆栈)和基础固件(通常在 ACPI BIOS 中)支持才能实际执行重置。 实际重置机制特定于系统。
重置级别
执行
函数级设备重置 (FLDR)
重置作仅限于特定设备,对其他设备不可见。 没有重新枚举。 函数驱动程序必须假定硬件在作后返回到其原始状态。 中间状态未被保留。
平台级设备重置(PLDR)
重置作会影响特定设备,以及通过同一电源轨或重置线路连接到它的其他所有设备。 重置操作会导致设备被报告为从总线中缺失,并重新枚举。 这种类型的重置对系统的影响最大,因为共享资源的所有设备都返回到其原始状态。
若要支持 FLDR ,必须在设备范围内定义__RST方法 ,如 ACPI 固件中详述:函数级重置。
若要支持 PLDR,如 ACPI 固件:平台级重置 中详细说明,必须在设备范围内定义 __RST 或 __PR3 方法。 如果使用 PR3 方法,ACPI 将使用 D3Cold 电源周期机制重置。D3Cold 电源周期机制模拟从设备中删除电源,然后还原它。如果任何其他设备共享相同的电源轨,它们也会重置。如果an__RST 方法由 _PRR (PowerResource)定义和引用,则使用该 PowerResource 的所有设备都会受到影响。
由于 PLDR 仅适用于内部设备,因此必须在 ACPI 中声明它。 对于 USB 设备,若要指定内部端口(不可见用户),并且可以连接到集成设备,请设置 一个网吧。要0xFF和the__PLD的 PortIsConnectable 字节。UserVisible 位到 0。
如果将 _PR3 (D3Cold) 机制用于 PLDR,请确保 SystemWake 和 DeviceWake 等方案继续工作。 从名义上说,这意味着为 D2 e.g._PR2 定义了适当的电源资源。 下表是一个有用的指南:
电源状态
ACPI 资源
行为
D2
_PR2
此状态的类定义的缩减功能所需的任何电源或时钟。
D3 热(必须)
_PR2
与支持的下一个更高状态相同的资源(D2、D1 或 D0)。
D3Cold
_PR3
仅需要为了让设备在其总线上出现并响应总线特定命令的电源或时钟。
相关链接
重置和恢复设备