当前位置: 首页 > article >正文

windows蓝牙驱动开发-蓝牙无线电重置和恢复

蓝牙无线电重置和恢复是 Windows 10 版本 1803 及更高版本中的一种技术,为蓝牙无线电引入了可靠的重置和恢复机制。 此机制使蓝牙无线电能够从导致故障、连接中断或对操作命令无响应的硬件故障中恢复。 目标是自动恢复无线电,使用户体验无缝,并降低需要系统重启的可能性。

蓝牙无线电重置和恢复可以使用或不具有固件依赖项来实现。 硬件合作伙伴可以扩展所有支持设备或固件级重置机制的 Windows 电脑上可用的基于软件的重置机制,以提高成功恢复的可能性。

蓝牙重置和恢复方案

启动重置和恢复时,有三大类问题:

  • 总线枚举失败:基础总线(通常为 USB 或 UART)的无线电失败枚举或重新枚举,如设备管理器中可见故障状态(黄色)指示,这可能是基础硬件错误的症状。

  • 驱动程序枚举失败:由底层总线成功枚举,蓝牙无线电处于失败状态。 为无线电构建驱动程序堆栈时,通常会发生此失败状态。 例如,在蓝牙无线电设备节点上安装筛选器或函数驱动程序时。 如果驱动程序在一个或多个启动操作期间遇到错误,并因此报告 PnP 失败,则可能出现失败。 此类操作的示例可能是固件下载到设备。

  • 非枚举失败: 设备未处于失败状态,但未按驱动程序堆栈确定的方式运行。 这些故障不在枚举路径之外,可能是一般的关键传输特定故障或特定于设备的故障,例如灾难性固件错误。 在这些情况下,使用以下蓝牙重置和恢复机制。

 重置和恢复机制

尽管有不同方法可从失败状态恢复,但蓝牙使用基于 ACPI 的标准化恢复机制尝试将无线电还原到正常工作状态。

GUID_DEVICE_RESET_INTERFACE_STANDARD 定义了两个重置级别。 重置机制仅适用于 内部设备 ,因此不支持外部可插入蓝牙无线电(如保护板)。 重置机制需要 Windows(通常是由功能驱动程序堆栈)和基础固件(通常在 ACPI BIOS 中)支持才能实际执行重置。 实际重置机制因系统而异。

  • 功能级设备重置 (FLDR):重置操作仅限于特定设备,对其他设备不可见。 没有重新枚举。 功能驱动程序必须假定硬件在操作后返回到其原始状态。 不会保留中间状态;
  • 平台级设备重置 (PLDR):重置操作会影响特定设备,以及通过同一电源轨或重置线路连接到此设备的其他所有设备。 重置操作会导致设备被报告为总线中缺少并重新枚举。 这种类型的重置对系统的影响最大,因为共享资源的所有设备都会返回到其原始状态;

若要支持 FLDR,必须在设备范围内定义 __RST 方法,如 ACPI 固件:函数级重置中详述。

若要支持 PLDR,必须在设备范围下定义 __RST 或 __PR3 方法,如 ACPI 固件:平台级重置中详述。 如果使用 PR3 方法,ACPI 将使用 D3Cold 电源周期机制重置。D3Cold 电源周期机制模拟从设备中删除电源,然后还原它。如果任何其他设备共享相同的电源轨,它们也会重置。如果an__RST方法由 _PRR (PowerResource)定义和引用,则使用该 PowerResource 的所有设备都会受到影响。

由于 PLDR 仅适用于内部设备,因此必须在 ACPI 中声明它。 对于 USB 设备,若要指定可以连接到集成设备的内部端口(对用户不可见),请将 UPC.PortIsConnectable 字节设为 0xFF,将 e__PLD.UserVisible 位设为 0。

如果将 _PR3 (D3Cold) 机制用于 PLDR,请确保 SystemWake 和 DeviceWake 等场景继续正常工作。 从名义上说,这意味着为 D2(例如 _PR2)定义了适当的电源资源。 下表可作为实用的指南:

电源状态ACPI 资源行为
D2_PR2此状态的类定义缩减功能所需的任何电源或时钟。
D3 热 (必需)_PR2与支持的下一个更高状态相同的资源(D2、D1 或 D0)。
D3Cold_PR3设备只需电源或时钟即可显示在其总线上,并响应特定于总线的命令。

http://www.kler.cn/a/538555.html

相关文章:

  • 黑马React保姆级(PPT+笔记)
  • TCP三次握手全方面详解
  • leetcode 80. 删除有序数组中的重复项 II
  • 蓝耘智算平台与DeepSeek R1模型:推动深度学习发展
  • UML学习
  • OpenCV:视频背景减除
  • cpp之模板
  • 安装和使用 Ollama(实验环境windows)
  • 2月7日QT
  • c/c++蓝桥杯经典编程题100道(16)链表反转
  • 面试经典150题——字典树
  • Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问
  • 基于开源AI智能名片2+1链动模式S2B2C商城小程序的个人IP活动运营策略与影响力提升研究
  • LangChain + DeepSeek-R1:构建高效的语言模型服务
  • Qt+海康虚拟相机的调试
  • 调用Jenkins接口api的几个例子
  • 【R语言】数据重塑
  • 什么是ZooKeeper?
  • 前端开发中遇到的小问题以及解决方案记录3
  • 使用GD32F470的硬件SPI读写W25Q64
  • mysql 库建表数量有限制吗?
  • C语言时间相关宏定义
  • 并发编程 - 线程同步(五)之原子操作Interlocked详解二
  • C语言【基础篇】之数组——解锁多维与动态数组的编程奥秘
  • ASP.NET Core 使用 WebClient 从 URL 下载
  • Linux进阶——搭建http静态网站