经典蓝牙协议PAN详解

描述

蓝牙 Profile定义了蓝牙设备之间如何进行通信以及实现特定的功能和应用场景。正是由于各种Profile的存在拓展出了蓝牙丰富的应用场景,例如A2DP、HFP、HID等。PAN Profile便提供了蓝牙设备接入以太网络的能力。

PAN(Personal Area Networking)Profile即个人局域网协议。它描述了两台或多台支持蓝牙的设备如何组成一个自组网络,以及如何使用相同的机制通过网络接入点访问远程网络。PAN Profile中主要包含的角色是网络接入点(Network Access Point)、组自组网络(Group Ad-hoc Network)和个人局域网用户(Personal Area Network User)。网络接入点可以是传统的局域网数据接入点,而组自组织网络则代表一组只相互连接的设备,个人局域网用户代表通过PAN协议上网的用户。本文将基于泰凌 BTBLE Dual Mode SDK以个人局域网用户(PANU)的角度讲述PAN在经典蓝牙协议栈中的层级结构、SDP服务发现、BNEP数据交互、PAN Profile连接以及通过HTTP访问网页并获取网页数据的流程。

BNEP(Bluetooth Network Encapsulation Protocol)即蓝牙网络封装协议规范。它描述了PAN 使用的协议,定义了蓝牙网络封装的数据包格式,用于在蓝牙媒体上传输常用网络协议。蓝牙网络封装支持与 IEEE 802.3/以太网封装相同的网络协议。支持的网络协议数据包包含在蓝牙网络封装数据包中,直接通过蓝牙L2CAP协议传输。简而言之PAN负责处理收/发的网络数据,BNEP负责将网络数据封装上蓝牙协议的包头。

1层级结构

类似A2DP和AVDTP,PAN是建立在BNEP之上的,而BNEP又直接建立在L2CAP上。从NAP发送的网络数据经过PANU端的Baseband再到L2CAP经过BENP解析最终到达PANU。

局域网

BNEP协议栈层级

局域网

PANU和NAP实体之间的协议交互

2SDP服务发现 

为了确保PAN能正常连接,需要在手机上打开蓝牙网络共享功能。Android和iOS操作系统的开启路径分别如下图所示(不同Android机型略有差异):

局域网

Android 蓝牙共享网络开启路径

局域网

iOS蓝牙共享网络开启路径

在SDP服务发现阶段手机会主动查询我们可用的服务并作出响应,下图为PANU角色时手机查询到的服务信息。

分配给PAN Profile的Record Handle为0x0010001a,service class ID表明当前角色是PANU,BNEP对应的PSM为0x000F,当前BNEP协议版本为v1.0,支持的以太网络类型有IPv4(0x0800)和ARP(0x0806)。在Profile描述列表中表明PAN当前版本为v1.0,服务名称为Personal Ad-hoc User Service,对该服务的描述为泰凌。

局域网

PANU 服务查询表

3BNEP数据交互

BNEP建立在L2CAP之上,因此需要根据BNEP的PSM在L2CAP上创建对应的通道。根据BNEP Specification规定,BNEP对应的PSM为0x000F(SDP就是根据PSM来识别是哪一个Profile),BNEP的MTU SIZE最小值为1691。在L2CACP_CONFIGURATION阶段如果MTU SIZE小于1691则会导致通道创建失败。

局域网

创建L2CAP通道

BNEP主要有五种类型的数据包,分别是BNEP_GENERAL_ETHERNET、BNEP_CONTROL、BNEP_COMPRESSED_ETHERNET、BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY、BNEP_COMPRESSED_ETHERNET_DEST_ONLY。BNEP_CONTROL提供了两台蓝牙设备PANU与NAP之间交换控制信息的能力,其中包括发起BNEP连接请求/响应、设置网络类型过滤器、设置MAC/网卡地址过滤器和响应未知控制命令的能力。除BNEP_CONTROL之外的其他四种数据包都用于两台蓝牙设备之间传输网络数据。

BNEP_GENERAL_ETHERNET:该类型数据包的包头中会携带自身蓝牙MAC地址/IP网卡地址以及对端蓝牙MAC地址/IP网卡地址,这种包适合在多连接情况下进行数据交互。

BNEP_COMPRESSED_ETHERNET:该类型数据包省略了对端和自身的蓝牙MAC地址/IP网卡地址,这种包适合在一对一连接情况下PANU与PANU之间数据交互。

BNEP_COMPRESSED_ETHERNET_DEST_ONLY:该类型数据包的包头中仅携带对端的网络包类型和对端的蓝牙MAC地址/IP网卡地址,省略了自身的蓝牙MAC地址/IP网卡地址,这种包适合在一对多连接情况下进行数据交互。

BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY:该类型数据包的包头中仅携带自身的蓝牙MAC地址/IP网卡地址,省略了对端的蓝牙MAC地址/IP网卡地址,这种包适合在一对多连接情况下进行数据交互。

任意一端发起BNEP连接时需要发送BNEP_SETUP_CONNECTION_REQUEST_MSG,对端蓝牙设备在接收到该CONTROL包时需要回复BNEP_SETUP_CONNECTION_RESPONSE_MSG,若Response Message字段的值为0x0000( Operation Successful)则表示BNEP连接成功。

局域网

BNEP的连接与网络数据包交互

BNEP成功连接后随即会收到来自手机的网络包,主要的网络协议包有IPv4、IPv6、ARP。至此PAN Profile建立成功,接下来需要结合TCP/IP协议栈(lwIP、uIP)去解析/封装网络数据。

4uIP协议栈与网络帧收发逻辑

uIP协议栈(Micro IP)是一个相较于lwIP更加轻量级的嵌入式TCP/IP协议栈,特别适用于低内存、低带宽的嵌入式设备。我们将uIP协议栈与BTBLE Dual Mode SDK做了适配,通过软件的方式使用两组环形队列模拟了uIP协议中所需要的网卡驱动设备。

局域网

uIP协议栈封包格式

uip_buf用于保存接收和发送网络数据包。接收的网络数据和发送的网络数据都应该放入该缓冲区。

在接收到手机的网络数据时会把BNEP格式的网络帧数据包按照uIP协议栈的包格式组包好后拷贝到模拟网卡RX FIFO(sTlkTapDevRxFifo)环形队列中。main_loop将接收到的网络帧数据包从模拟网卡RX FIFO环形队列中取出并拷贝到uip_buffer中。

在发送网络数据时将uip_buffer中的网络帧数据包拷贝到模拟网卡TX FIFO(sTlkTapDevTxFifo)环形队列中。main_loop将需要发送的网络帧数据包从模拟网卡TX FIFO环形队列中取出并将包格式从uIP协议栈的包格式包转换成BNEP格式的网络帧数据包,然后调用BNEP发送函数将网络包数据发送给对端蓝牙设备。

当BNEP连接完成后会先进行DHCP_DISCOVER、DHCP_OFFER、DHCP_REQUEST、DHCP_ACK四阶段交互,完成手机分配IP地址给PANU。

局域网

DHCP IP地址分配

ARP阶段完成网卡地址和IP地址的转换与绑定,设备可以直接通过IP地址向对端发送数据。

局域网

ARP网络地址转换

接下来以访问https://zongxiaodong.cn/image_test/images为例,下载该网站中名为1.png的图片。在DNS解析阶段会将zongxiaodong.cn转换为对应的IP地址60.205.46.170。

局域网

uIP DNS域名解析

紧接着将1.png下载到本地。uIP web client用例主要是实现接入互联网的功能,并通过HTTP协议访问指定的网站。其功能主要包括建立网络连接,构建HTTP请求,发送HTTP请求,接受HTTP响应,解析HTTP响应。如图示,等待网站响应后1.png的图片数据就通过网络下载到PANU本地了。

局域网

HTTP访问网站并下载图片数据

5结束语

泰凌 BTBLE Dual Mode SDK集成了PAN网络服务功能,这使得采用泰凌TLSR951x/952x蓝牙芯片的模块和产品能够通过标准协议,轻松连接至支持NAP蓝牙网络热点的智能手机等主设备。这种连接提供了网络访问和数据下载服务,而且整个过程无需在手机上安装任何APP,极大地简化了设备间的互联互通和数据共享过程。

泰凌TLSR951x是一款高性能的蓝牙双模SoC,它巧妙地将经典蓝牙与低功耗蓝牙技术集成在单一芯片之中。这款芯片搭载了一个32位RISC-V MCU,具备强大的内核功能和一系列先进的外设模块,为高端耳戴式和可穿戴设备的创新设计和开发提供了坚实的基础。其多级电源管理设计使得TLSR951x在实现超低功耗运行的同时,也满足了对功耗极为敏感的应用需求,而高集成度则进一步帮助客户优化了系统总成本。

TLSR952x则是泰凌微电子推出的一款集成了先进音频子系统的SoC,它包含了FastDSP单元、带加速器的音频编解码器和电源管理单元,特别适合于ANC(主动降噪)和ENC(环境降噪)等高端音频应用。TLSR952x全面支持蓝牙5.3标准,包括基本速率(BR)、增强数据速率(EDR)、低功耗(LE)、蓝牙低功耗 Mesh以及2.4 GHz专有标准,将无线音频设备所需的所有特性和功能集于一身,为客户提供了一个全面而高效的音频解决方案。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分