damiaa 发表于 2023-9-7 11:02

【stm32wba】+9 stm32wba低功耗蓝牙软件app部分分析之二

<div class='showpostmsg'> 本帖最后由 damiaa 于 2023-9-7 11:40 编辑

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size:18px;"><strong>【stm32wba】+9 stm32wba低功耗蓝牙软件app部分分析之二</strong></span></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1250745-1-1.html">【NUCLEO-WBA52CG】+1开箱贴</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1250558-1-1.html">【STM32WBA52CG】+2 STM32WBA Web Bluetooth试玩</a></p>

<p><a href="https://bbs.eeworld.com.cn/forum.php?mod=viewthread&amp;tid=1252139&amp;page=1&amp;extra=#pid3251401">【STM32WBA52CG】+3 STM32WBA 外设应用一 按键和点灯</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1252142-1-1.html">【STM32WBA52CG】+4 外设应用二 串口使用</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1252882-1-1.html">【STM32WBA52CG】+5 THREADX使用</a></p>

<p><span style="font-size:12px;"><a href="https://bbs.eeworld.com.cn/thread-1255128-1-1.html">【STM32WBA52CG】+6 SEQUENCER调度器</a></span></p>

<p><span style="font-size:12px;"><a href="https://bbs.eeworld.com.cn/thread-1255338-1-1.html">【stm32wba】+7 stm32wba低功耗蓝牙软件基本架构</a></span></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1255401-1-1.html#pid3259425">【stm32wba】+8 stm32wba低功耗蓝牙软件app部分分析之一</a><strong>之后继续</strong></p>

<p><strong>今天主要了解</strong><strong>一下和STM32_WPAM==&gt;APP里面的三个文件相关的概念。</strong></p>

<p></p>

<p>这三个文件主要功能就是各种初始化和相关的蓝牙用户事情的响应和处理,等等,对应的软件框架部分是GAP和GATT/ATT。</p>

<p></p>

<p>&nbsp;</p>

<p><span style="font-size:18px;"><strong>通用访问配置文件(</strong><strong>GAP</strong><strong>) </strong></span></p>

<p>&nbsp;</p>

<p><span style="color:#27ae60;">蓝牙系统为所有的蓝牙设备定义了一个基础配置文件,叫做通用访问配置文件(GAP)。此配置文件定义了一个蓝牙设备所需具备的基本要求。</span>下表中描述了四种 GAP 配置文件的角色:</p>

<div style="text-align: center;"></div>

<p><strong>GAP 中,定义了两个基本概念:</strong></p>

<p>&nbsp;&nbsp; GAP 模式:配置设备,使之以特定方式长时间工作。GAP 模式有四种类型:广播、可发现、可连接和可 绑定类型</p>

<p>&nbsp;&nbsp; GAP 流程:配置设备,使之在特定的时间段或有限时间内执行某一动作。有四种类型的 GAP 流程:监听、发现、连接和绑定流程</p>

<p>&nbsp;</p>

<p><strong>不同类型的可发现和可连接模式可以同时使用。定义的 GAP 模式如下:</strong></p>

<p><strong>&nbsp; GAP </strong><strong>广播器模式</strong><strong> 在此模式下</strong>设备可使用监听流程检测广播数据 GAP脚色为广播设备</p>

<p><strong>&nbsp; GAP </strong><strong>可发现模式</strong><strong> 此模式细分为:</strong></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">非可发现模式</span> 不能在 AD 类型标记上设置有限和一般可发现位。不能通过执行通用和有限发现流程的设备对其进行发现 GAP脚色为外设</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">有限可发现模式</span> 在 AD 类型标记上设置有限可发现位允许约 30 s。由用户最近交互的设备使用。例如用户按下设备上的按钮 GAP脚色为外设</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">一般可发现模式</span> 在 AD 类型标记上设置一般可发现位。在设备希望成为可发现设备时使用。对可发现时间无限制 GAP脚色为外设</p>

<p><strong>&nbsp; GAP </strong><strong>可连接模式</strong><strong> 细分为:</strong></p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">不可连接模式</span> 只能使用 ADV_NONCONN_IND 或 ADV_SCAN_IND 广播数据包 在广播时不能使用可连接广播数据包 GAP脚色为外设</p>

<p>&nbsp;&nbsp;&nbsp;<span style="color:#2980b9;"> 直接可连接模式</span> 使用 ADV_DIRECT 广播数据包 由要快速连接中央设备的外设使用。 只能使用 1.28 秒,并且需要外设和 中央设备地址 GAP脚色为外设</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">非定向可连接模式</span> 使用 ADV_IND 广播数据包 在设备希望成为可连接设备时使用。 由于 ADV_IND 广播数据包可以包含 AD 类型标记,因此设备可同时处于 可发现和非定向可连接模&nbsp; 式。 当设备进入连接模式或不可连接模式时,可连接模式终止。GAP脚色为外设</p>

<p><strong>GAP </strong><strong>可绑定模式</strong></p>

<p>&nbsp;&nbsp; <span style="color:#2980b9;">不可绑定模式</span> 不允许与对端设备建立绑定 设备不保存密钥 GAP设备为外设</p>

<p>&nbsp;&nbsp; <span style="color:#2980b9;">可绑定模式</span> 设备接受来自中央设备的绑定请求。 GAP设备为外设</p>

<p>&nbsp;</p>

<p><strong>GAP 监听流程中定义了以下 GAP 流程:</strong></p>

<p><strong>&nbsp; GAP </strong><strong>监听流程</strong> 它允许设备搜索广播设备数据 角色为监听设备</p>

<p><strong>&nbsp; GAP </strong><strong>发现流程</strong><strong> 细分为下面三种:</strong></p>

<p>&nbsp;&nbsp;&nbsp;<span style="color:#2980b9;"> 有限可发现流程</span> 用于在有限发现模式下发现外设 根据 AD 类型标记信息应用 设备过滤 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">通用可发现流程 </span>用于在通用和有限发现模式下发现外设 根据 AD 类型标记信息应用 设备过滤 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">名称发现流程</span> 用于从可连接设备检索&ldquo;蓝牙设备名称&rdquo;的流程 角色为中央设备</p>

<p><strong>&nbsp; GAP </strong><strong>连接流程</strong><strong>细分如下:</strong></p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">自动连接建立流程</span> 允许连接一个或多个处于定向可连接模式或非定向可连接模式的设备 使用白名单 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">通用连接建立流程</span> 允许连接一组处于定向可连接模式或非定向可连接模式的已知对端设备 当在被动扫描期间检测到具有私有地址的设备时,它使用直接连接建立流程 支持私有地址 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">选择性连接建立流程</span> 使用主机的选定连接配置参数与白名单中的一 组设备建立连接使用白名单,并按照该白名单进行扫描 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">直接连接建立流程</span> 使用一组连接间隔参数与特定设备建立连接由通用和选择性流程使用 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp; <span style="color:#2980b9;">连接参数更新流程</span> 在连接期间更新使用的连接参数 角色为中央设备</p>

<p>&nbsp;&nbsp;&nbsp;<span style="color:#2980b9;"> 终止流程</span> 终止 GAP 流程 角色为中央设备</p>

<p><strong>&nbsp;&nbsp; GAP </strong><strong>绑定流程</strong> 在配对请求上设置了绑定位的情况下,启动配对过程 角色为中央设备</p>

<p>&nbsp;</p>

<p><span style="font-size:18px;"><strong>属性配置文件(</strong><strong>ATT</strong><strong>) </strong></span></p>

<p>&nbsp;</p>

<p><span style="color:#27ae60;">属性配置文件(ATT)允许设备向另一设备公开某些数据,即属性。公开属性的设备被称为服务器,而使用它们的对端设备被称为客户端。</span> 属性是一种包含下列组成部分的数据:</p>

<p>&bull;<span style="color:#2980b9;">属性句柄</span>:16 位值,用于标识服务器端相应属性数据。客户端在读写请求中引用该句柄</p>

<p>&bull;<span style="color:#2980b9;">属性类型</span>:通过通用唯一标识符(UUID)定义,决定了对应属性值的含义。蓝牙 SIG 定义了标准 16 位</p>

<p>&bull;<span style="color:#2980b9;">属性 UUID</span></p>

<p>&bull;<span style="color:#2980b9;">属性值</span>:长度为 0~512 字节的数据。</p>

<p>&bull; <span style="color:#2980b9;">属性权限</span>:由使用该属性的更高层协议定义。它们指定读和/或写访问以及通知和/或指示需要的安全级别。使用属性协议不能获取这些权限。几种不同的许可类型如下:</p>

<p>‒<span style="color:#9b59b6;"> 访问权限</span>:决定了可以对属性执行的请求类型(可读、可写、可读且可写)</p>

<p>‒ <span style="color:#9b59b6;">验证权限</span>:决定了属性是否需要验证。如果发生了验证错误,客户端可以尝试使用安全管理器进行验证并发回请求</p>

<p>‒ <span style="color:#9b59b6;">授权权限</span>(无授权、授权):这是服务器的特性,决定了是否授权客户端访问一组属性(客户端不能解决授权错误)</p>

<p><span style="color:#1abc9c;"><strong>属性示例&nbsp; 句柄属性</strong> 0x0008 &ldquo;温度 UUID&rdquo; &ldquo;温度值&rdquo; &ldquo;只读,无授权,无验证&rdquo;</span></p>

<p><span style="color:#1abc9c;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &bull; &ldquo;温度 UUID&rdquo;由&ldquo;温度特征&rdquo;规范定义,为有符号 16 位整数。</span></p>

<p><span style="color:#27ae60;">属性的集合被称为数据库,始终包含在属性服务器中。</span> <span style="color:#1abc9c;">属性协议定义了一组方法协议,用于在对端设备上发现、读取和写入属性。它在如下属性服务器和属性客户端 之间实现端到端的客户端-服务器协议:</span></p>

<p>&bull; <span style="color:#8e44ad;">服务器角色</span></p>

<p>‒ 包含所有属性(属性数据库)</p>

<p>‒ 接收请求、执行、响应指令</p>

<p>‒ 在数据变化时可以指示、通知属性值</p>

<p>&bull; <span style="color:#8e44ad;">客户端角色</span></p>

<p>‒ 与服务器通信</p>

<p>‒ 发送请求,等待响应(可以访问(读取)和更新(写入)数据)</p>

<p>‒ 确认指示</p>

<p></p>

<p><span style="font-size:18px;"><strong>通用属性配置文件(</strong><strong>GATT</strong></span><strong><span style="font-size:18px;">)</span> </strong></p>

<p>&nbsp;</p>

<p><span style="color:#27ae60;">通用属性配置文件(GATT)定义了使用 ATT 协议的框架,它被用于服务、特征、描述符发现、特征读取、写入、指示和通知。</span></p>

<p>就 GATT 而言,当两个设备已经连接时,有两种设备角色:</p>

<p>&bull; <span style="color:#8e44ad;">GATT 客户端</span>:通过读取、写入、通知或指示操作访问远程 GATT 服务器上的数据的设备</p>

<p>&bull; <span style="color:#8e44ad;">GATT 服务器</span>:在本地保存数据并向远程 GATT 客户端提供数据访问方法的设备</p>

<p><span style="color:#2980b9;">一个设备可以既是 GATT 服务器又是 GATT 客户端</span>。</p>

<p><span style="color:#996600;">设备的 GATT 角色在逻辑上独立于主、从角色。主、从角色定义了 BLE 无线连接的管理方式,而 GATT 客户 端/服务器角色由数据存储和数据流动来决定。</span></p>

<p>因此,不要求从(外围)设备必须是 GATT 服务器以及主(中央)设备必须是 GATT 客户端。</p>

<p>ATT 传输的属性封装在下列基础类型中:</p>

<ol>
        <li>特征(具有相关描述符)</li>
        <li>服务(主要、次要和包含)</li>
</ol>

<p><strong>特征属性类型 </strong></p>

<p><span style="color:#27ae60;">特征是一种包含单个值和任意数量描述符的属性类型,描述符描述的特征值使用户能够理解该特征。</span></p>

<p><span style="color:#27ae60;">特征揭示了值代表的数据类型、值是否能够读取或写入以及如何配置要指示或通知的值,它还描述了值的含义。</span></p>

<p>特征具有以下组成部分:</p>

<ol>
        <li><span style="color:#8e44ad;">特征声明</span></li>
        <li><span style="color:#8e44ad;">特征值</span></li>
        <li><span style="color:#8e44ad;">特征描述符</span></li>
</ol>

<p></p>

<p>特征声明是一种属性,其定义如下:</p>

<p></p>

<p></p>

<p><strong>特征描述符类型 </strong></p>

<p><span style="color:#27ae60;">特征描述符用于描述特征值,以便为特征添加特定&ldquo;含义&rdquo;,使客户能够理解特征。</span>有以下特征描述符可供使用:</p>

<ol>
        <li><span style="color:#8e44ad;">特征扩展属性</span>:允许为特征添加扩展属性</li>
        <li><span style="color:#8e44ad;">特征用户描述</span>:使设备能够将文本字符串关联到特征</li>
        <li><span style="color:#8e44ad;">客户端特征配置</span>:如果特征可以通知或指示,为强制要求。客户端应用必须写入该特征描述符以使特征通知或指示成为可能(前提是特征属性允许通知或指示)</li>
        <li><span style="color:#8e44ad;">服务器特征配置</span>:可选描述符</li>
        <li><span style="color:#8e44ad;">特征表达格式</span>:它允许通过一些字段(例如,格式、指数、单位命名空间、描述)定义特征值表达格<br />
        式,以便正确显示相关值(例如,oC 格式的温度测量值)</li>
        <li><span style="color:#8e44ad;">特征聚合格式</span>:可以聚合多种特征表达格式。</li>
</ol>

<p><strong>服务属性类型 </strong></p>

<p><span style="color:#27ae60;">服务是特征的集合,共同为一个可实现的应用配置文件提供通用服务类型。</span>例如,健康体温计服务包含温度测 量值特征和每次测量的间隔时间特征。服务或主要服务可以引用被称为次要服务的其他服务。</p>

<p>服务的定义如下:</p>

<p></p>

<p>服务包含服务声明,其他服务包含定义(可选)和特征定义。服务包含声明位于服务声明之后。</p>

<p></p>

<p>&ldquo;包含服务属性句柄&rdquo;是所包含次要服务的属性句柄,&ldquo;结束组句柄&rdquo;是所包含次要服务中最后一个属性的句柄。</p>

<p>&nbsp;</p>

<p><strong>GATT </strong><strong>流程 </strong></p>

<p><span style="color:#27ae60;">通用属性配置文件(GATT)定义了一组发现服务、特征和相关描述符的标准流程以及它们的使用方法。</span></p>

<p>有以下流程可供使用:</p>

<p>&bull; 发现流程</p>

<p></p>

<p>&bull; 客户端发起的流程</p>

<p></p>

<p>&bull; 服务器发起的流程</p>

<p></p>

<p>&nbsp;对了解的概念先分享到这里,谢谢支持!</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

火辣西米秀 发表于 2023-9-8 07:30

<p>三个东西对应的软件框架部分是GAP和GATT/ATT,明白了</p>

damiaa 发表于 2023-9-8 09:25

火辣西米秀 发表于 2023-9-8 07:30
三个东西对应的软件框架部分是GAP和GATT/ATT,明白了

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan76.gif" width="48" />感谢支持!</p>
页: [1]
查看完整版本: 【stm32wba】+9 stm32wba低功耗蓝牙软件app部分分析之二