<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>BLE on 栈外随记</title>
    <link>https://btio.cn/tags/ble/</link>
    <description>Recent content in BLE on 栈外随记</description>
    <image>
      <title>栈外随记</title>
      <url>https://btio.cn/images/logo-arong.svg</url>
      <link>https://btio.cn/images/logo-arong.svg</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-CN</language><lastBuildDate>Tue, 04 Aug 2026 17:48:36 +0800</lastBuildDate>
    <atom:link href="https://btio.cn/tags/ble/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>一副 TWS 耳机，为什么既要用经典蓝牙，又要用 BLE</title>
      <link>https://btio.cn/posts/2026/08/04/%E4%B8%80%E5%89%AF-tws-%E8%80%B3%E6%9C%BA%E4%B8%BA%E4%BB%80%E4%B9%88%E6%97%A2%E8%A6%81%E7%94%A8%E7%BB%8F%E5%85%B8%E8%93%9D%E7%89%99%E5%8F%88%E8%A6%81%E7%94%A8-ble/</link>
      <pubDate>Tue, 04 Aug 2026 17:48:36 +0800</pubDate>
      <guid>https://btio.cn/posts/2026/08/04/%E4%B8%80%E5%89%AF-tws-%E8%80%B3%E6%9C%BA%E4%B8%BA%E4%BB%80%E4%B9%88%E6%97%A2%E8%A6%81%E7%94%A8%E7%BB%8F%E5%85%B8%E8%93%9D%E7%89%99%E5%8F%88%E8%A6%81%E7%94%A8-ble/</guid>
      <description>&lt;p&gt;做 TWS 耳机时，经常会同时看到经典蓝牙和 BLE。&lt;/p&gt;
&lt;p&gt;手机已经通过蓝牙连接耳机，可以播放音乐、接打电话，为什么配套 App 还要再连接一次 BLE？我刚开始接触时，也没有认真区分这两部分，只知道它们都叫蓝牙。&lt;/p&gt;
&lt;p&gt;后来做 App 交互功能多了，我才慢慢理解：在目前常见的 TWS 产品里，它们处理的事情并不一样。经典蓝牙主要负责音乐、通话和媒体控制，BLE 更像一条给 App 使用的数据通道。&lt;/p&gt;
&lt;h2 id=&#34;section-1&#34;&gt;一、经典蓝牙主要负责耳机的基本功能&lt;/h2&gt;
&lt;p&gt;平时用耳机听歌、调节音量和接打电话，主要涉及经典蓝牙中的几个 Profile：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Profile&lt;/th&gt;
					&lt;th&gt;在耳机中的主要作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;A2DP&lt;/td&gt;
					&lt;td&gt;传输音乐音频&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AVRCP&lt;/td&gt;
					&lt;td&gt;播放、暂停、切歌和音量控制&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HFP&lt;/td&gt;
					&lt;td&gt;来电、接听、挂断等通话控制&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通话时的语音通常还会通过 SCO/eSCO 链路传输。&lt;/p&gt;
&lt;p&gt;这些功能决定了一副耳机能不能正常听歌和通话。以我目前接触到的应用开发来说，平时主要处理 SDK 上报的 A2DP、AVRCP 和 HFP 事件，再根据当前状态执行对应的产品逻辑。&lt;/p&gt;
&lt;h2 id=&#34;section-2&#34;&gt;二、BLE 主要负责耳机与 App 交互&lt;/h2&gt;
&lt;p&gt;配套 App 需要做的事情和播放音乐不太一样。它传输的通常不是连续音频，而是一些控制命令和状态数据。&lt;/p&gt;
&lt;p&gt;我做过的项目里，BLE 主要用于这些功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改 EQ；&lt;/li&gt;
&lt;li&gt;切换 ANC 模式；&lt;/li&gt;
&lt;li&gt;读取耳机电量；&lt;/li&gt;
&lt;li&gt;OTA 升级；&lt;/li&gt;
&lt;li&gt;查找耳机。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如用户在 App 上切换 ANC，App 会通过 BLE 把命令发给耳机；耳机执行以后，还可能需要把最新状态返回给 App。读取电量也是类似的过程，只是数据方向和触发时机可能不同。&lt;/p&gt;
&lt;p&gt;我接触过 GATT 的 Service、Characteristic、读写和通知，不过实际开发时，大部分数据收发还是通过 SDK 封装好的接口完成。刚开始看这些名词时，我觉得它们比较抽象。结合 TWS 耳机的功能，可以先这样理解：&lt;/p&gt;</description>
    </item>
    <item>
      <title>BLE设备地址介绍</title>
      <link>https://btio.cn/posts/2025/11/09/ble%E8%AE%BE%E5%A4%87%E5%9C%B0%E5%9D%80%E4%BB%8B%E7%BB%8D/</link>
      <pubDate>Sun, 09 Nov 2025 21:19:34 +0800</pubDate>
      <guid>https://btio.cn/posts/2025/11/09/ble%E8%AE%BE%E5%A4%87%E5%9C%B0%E5%9D%80%E4%BB%8B%E7%BB%8D/</guid>
      <description>&lt;h2 id=&#34;section-1&#34;&gt;什么是BLE设备地址&lt;/h2&gt;
&lt;p&gt;BLE设备地址48位长度，用来识别低功耗蓝牙设备。&lt;/p&gt;
&lt;p&gt;地址分为公共地址和随机地址两大类，现代BLE设备为保护隐私，很少直接用公共地址广播。&lt;br&gt;
注意：BLE地址和经典蓝牙地址虽然都是48位，但机制不同。&lt;/p&gt;
&lt;h2 id=&#34;section-2&#34;&gt;一、公共设备地址&lt;/h2&gt;
&lt;p&gt;由IEEE官方分配，全球唯一，永久不变。&lt;br&gt;
常见设备：早期蓝牙键盘、鼠标。&lt;br&gt;
优点：全球唯一，不会冲突。&lt;br&gt;
缺点：申请要钱，容易被追踪定位。&lt;br&gt;
地址结构：通常前3字节是厂商代码，后3字节厂商自己分配，也可以自定义。&lt;/p&gt;
&lt;p&gt;举例：00:1A:7D:12:34:56&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:1A:7D = 苹果厂商代码&lt;/li&gt;
&lt;li&gt;12:34:56 = 苹果内部设备序号&lt;br&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;section-3&#34;&gt;二、随机设备地址&lt;/h2&gt;
&lt;p&gt;BLE随机设备地址，设备自己生成，分三种：&lt;/p&gt;
&lt;h3 id=&#34;1-静态随机地址&#34;&gt;1. 静态随机地址&lt;/h3&gt;
&lt;p&gt;开机时随机生成，本次开机内不变，重启后重新生成。&lt;br&gt;
地址特征：最高两位为&amp;quot;11&amp;quot;，地址C0-FF开头。&lt;br&gt;
常见设备：智能手环、体重秤、温度计。&lt;br&gt;
优点：免费，开机内稳定连接。&lt;br&gt;
缺点：设备多了可能冲突，重启后地址变化可能影响自动重连。&lt;/p&gt;
&lt;h3 id=&#34;2-可解析私有地址&#34;&gt;2. 可解析私有地址&lt;/h3&gt;
&lt;p&gt;BLE隐私保护核心。地址定期变化（通常15分钟），配对过的设备可通过IRK密钥识别真实身份。&lt;br&gt;
地址特征：最高两位为&amp;quot;01&amp;quot;，地址40-7F开头。&lt;br&gt;
常见设备：iPhone、Apple Watch、Android手机、AirPods。&lt;br&gt;
工作原理：设备用IRK密钥生成临时地址，配对设备存有IRK可验证身份，陌生设备只看到随机地址。&lt;br&gt;
举例：商场里手机地址每10分钟变一次，商家无法追踪你。但AirPods能认出你的手机，因为有共享密钥。&lt;br&gt;
优点：防位置追踪，不影响已配对设备连接。&lt;br&gt;
缺点：需要密钥管理和地址解析算法。&lt;/p&gt;
&lt;h3 id=&#34;3-不可解析私有地址nrpa&#34;&gt;3. 不可解析私有地址（NRPA）&lt;/h3&gt;
&lt;p&gt;完全随机临时地址，任何设备都无法识别。&lt;br&gt;
地址特征：最高两位为&amp;quot;00&amp;quot;，地址00-3F开头&lt;br&gt;
常见场景：BLE Beacon广播、一次性数据推送。&lt;br&gt;
举例：商场Beacon广播促销信息，路人收到即可，无需连接和识别。&lt;br&gt;
优点：最强隐私保护。&lt;br&gt;
缺点：无法建立连接，只能单向广播。&lt;/p&gt;
&lt;h2 id=&#34;section-4&#34;&gt;三、应用场景对比&lt;/h2&gt;
&lt;p&gt;蓝牙键盘鼠标：公共地址，稳定识别。&lt;br&gt;
智能手环体重秤：静态随机地址，成本低。&lt;br&gt;
iPhone和智能手表：可解析私有地址，防追踪。&lt;br&gt;
BLE Beacon：不可解析私有地址，一次性推送。&lt;/p&gt;
&lt;h2 id=&#34;section-5&#34;&gt;四、BLE和经典蓝牙地址区别&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;经典蓝牙主要用公共地址，很少变化。&lt;/li&gt;
&lt;li&gt;BLE主流用随机地址（特别是可解析私有地址），定期变化保护隐私。&lt;/li&gt;
&lt;li&gt;同一设备可能同时有经典蓝牙地址和BLE地址，它们独立。&lt;/li&gt;
&lt;li&gt;BLE地址最高2位标识类型，经典蓝牙没有。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;section-6&#34;&gt;五、实用知识&lt;/h2&gt;
&lt;p&gt;查看BLE地址（Android）：设置→关于手机→状态信息→蓝牙地址。&lt;br&gt;
手机地址为什么总变？现代手机用可解析私有地址，每10-15分钟换一次，防止被追踪。&lt;/p&gt;
&lt;p&gt;识别地址类型看第一字节：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C0-FF：静态随机&lt;/li&gt;
&lt;li&gt;40-7F：可解析私有&lt;/li&gt;
&lt;li&gt;00-3F：不可解析私有&lt;/li&gt;
&lt;li&gt;其他：公共地址&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;section-7&#34;&gt;总结：&lt;/h2&gt;
&lt;p&gt;BLE地址虽然分为四类，但一般都使用随机地址，在开发中&lt;/p&gt;
&lt;p&gt;小型外设一般用静态随机，简单省钱&lt;br&gt;
手机可穿戴一般用可解析私有，保护隐私&lt;br&gt;
广播类一般用不可解析私有，单向推送&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://blog.csdn.net/qq_56070244/article/details/154617680&#34;&gt;CSDN · BLE设备地址介绍&lt;/a&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>BLE的7种工作状态</title>
      <link>https://btio.cn/posts/2025/11/09/ble%E7%9A%847%E7%A7%8D%E5%B7%A5%E4%BD%9C%E7%8A%B6%E6%80%81/</link>
      <pubDate>Sun, 09 Nov 2025 21:11:30 +0800</pubDate>
      <guid>https://btio.cn/posts/2025/11/09/ble%E7%9A%847%E7%A7%8D%E5%B7%A5%E4%BD%9C%E7%8A%B6%E6%80%81/</guid>
      <description>&lt;p&gt;BLE芯片的链路层定义了7种工作状态，同一时间只能处于一种状态，不同状态之间可以切换，一颗芯片可以有多个状态机同时工作，下面对这些状态进行介绍。&lt;/p&gt;
&lt;h2 id=&#34;section-1&#34;&gt;七大状态介绍&lt;/h2&gt;
&lt;h3 id=&#34;section-2&#34;&gt;一、待机状态（Idle）&lt;/h3&gt;
&lt;p&gt;芯片既不发送也不接收数据，处于休眠。&lt;/p&gt;
&lt;p&gt;特点：&lt;/p&gt;
&lt;p&gt;可以从任何状态进入待机状态&lt;/p&gt;
&lt;p&gt;可以从待机进入除连接状态外的所有状态&lt;/p&gt;
&lt;p&gt;不发射不接收，最省电&lt;/p&gt;
&lt;p&gt;举例：你的手环没在用时，芯片就在待机状态睡觉。&lt;/p&gt;
&lt;h3 id=&#34;section-3&#34;&gt;二、广播状态（Advertising）&lt;/h3&gt;
&lt;p&gt;芯片主动发送广告包，告诉周围&amp;quot;我在这里&amp;quot;。&lt;/p&gt;
&lt;p&gt;作用：让别人发现你，并能回复扫描请求。&lt;/p&gt;
&lt;p&gt;举例：蓝牙音箱进入配对模式，不断广播&amp;quot;我是XX音箱，快来连我&amp;quot;。&lt;/p&gt;
&lt;p&gt;可以从广告状态直接进入连接状态。&lt;/p&gt;
&lt;h3 id=&#34;section-4&#34;&gt;三、扫描状态（Scanning）&lt;/h3&gt;
&lt;p&gt;芯片监听周围的广告包，寻找可用设备。&lt;/p&gt;
&lt;p&gt;作用：发现附近的BLE设备。&lt;/p&gt;
&lt;p&gt;举例：手机打开蓝牙，扫描附近设备，此时手机处于扫描状态。&lt;/p&gt;
&lt;h3 id=&#34;section-5&#34;&gt;四、发起状态（Initiating）&lt;/h3&gt;
&lt;p&gt;芯片接收特定设备的广告包，并回复连接请求。&lt;/p&gt;
&lt;p&gt;作用：主动发起连接。&lt;/p&gt;
&lt;p&gt;举例：手机点击&amp;quot;连接手环&amp;quot;，进入发起状态，向手环发送连接请求。&lt;/p&gt;
&lt;p&gt;可以从发起状态进入连接状态。&lt;/p&gt;
&lt;h3 id=&#34;section-6&#34;&gt;五、连接状态（Connection）&lt;/h3&gt;
&lt;p&gt;设备已建立连接，可以双向传输数据。&lt;/p&gt;
&lt;p&gt;作用：进行数据交互。&lt;/p&gt;
&lt;p&gt;举例：手环和手机已连接，正在同步步数和心率数据。&lt;/p&gt;
&lt;p&gt;注意：只能从广播状态或发起状态进入连接状态，不能从待机直接连接&lt;/p&gt;
&lt;h3 id=&#34;section-7&#34;&gt;六、同步状态（Synchronization）&lt;/h3&gt;
&lt;p&gt;芯片接收周期性广告的数据包。&lt;/p&gt;
&lt;p&gt;作用：同步接收定期更新的信息。&lt;/p&gt;
&lt;p&gt;举例：接收BLE定位信标的周期性位置信息。&lt;/p&gt;
&lt;p&gt;适用场景：需要定时接收广播数据但不建立连接。&lt;/p&gt;
&lt;h3 id=&#34;section-8&#34;&gt;七、等时广播状态（Isochronous Broadcasting）&lt;/h3&gt;
&lt;p&gt;芯片在等时信道上发送数据包。&lt;/p&gt;
&lt;p&gt;作用：发送对时间敏感的数据流。&lt;/p&gt;
&lt;p&gt;举例：BLE音频设备同步传输音乐到多个耳机（LE Audio）。&lt;/p&gt;
&lt;p&gt;适用场景：需要精确时序的音频或数据传输。&lt;/p&gt;
&lt;h3 id=&#34;section-9&#34;&gt;八、状态切换规则&lt;/h3&gt;
&lt;p&gt;常见切换路径：&lt;/p&gt;
&lt;p&gt;待机 → 广播 → 连接（外设被连接）&lt;/p&gt;
&lt;p&gt;待机 → 扫描 → 发起 → 连接（中心设备主动连接）&lt;/p&gt;
&lt;p&gt;连接 → 待机（断开连接）&lt;/p&gt;
&lt;p&gt;任何状态 → 待机（随时可以休眠省电）&lt;/p&gt;
&lt;p&gt;待机 → 广播/扫描/同步/等时广播（但不能直接到连接）&lt;/p&gt;
&lt;h3 id=&#34;section-10&#34;&gt;九、实际应用场景&lt;/h3&gt;
&lt;p&gt;智能手环：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;没用时：待机状态（省电）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等待连接：广播状态（被发现）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;已连接：连接状态（传数据）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;断开后：回到待机&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;手机：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
