蓝牙5.0协议解读viaBluetoothCorev5.0(使用smartRFpacket。。。

蓝⽛5.0协议解读viaBluetoothCorev5.0(使⽤
第三方环境检测机构管理
smartRFpacket。。。
⽬录
简介
Bluetooth Core version 5.0已经发布了很久⼀段时间了,对于进⾏蓝⽛设备的相关开发蓝⽛协议核⼼规范是⼀份不错的攻略指导书,2822页覆盖其相关的协议、规范、数据包解读等等。接下来我们借助smartRF packet sniffer蓝⽛通信抓包软件以及Bluetooth Core v5.0进⾏相关的数据解读。
Start:
⼀、常见的⼴播包
散血莲上图是⼀个最为常见的⼴播包,解析开始:
Time:抓取的数据包的间隔的时间;
Channel:通信频道。
①在⼴播期间,设备的通信频道是37、38、39三个频道。
②设备与Host连接成功后使⽤的频道是0~36频道。
③通信期间的跳频的经由数据信道选择算法确定的,在接下来的数据包解析中会有相关的叙述。
Access Address:访问地址,按照协议⽂档所述该访问地址是默认的,The Access Address for all other advertising channel packets shall be 10001110100010011011111011010110b (0x8E89BED6)。
Adv PDU Type:⼴播包数据类型。常见的⼴播包类型如下:
· ADV_IND
· ADV_DIRECT_IND
· ADV_NONCONN_IND
· ADV_SCAN_IND
· ADV_EXT_IND
· AUX_ADV_IND
· AUX_SYNC_IND
· AUX_CHAIN_IND
PS:在此插⼊介绍⼀下PDU的概念 ,PDU是什么呢?
协议数据单元PDU(Protocol Data Unit)是指对等层次之间的传递的数据包。
Adv PDU Header:该Header包括四个部分:Type、Txadd、Rxadd、PDU-Length。
①Type:此处的指的是⼴播包的数据类型,主要有⼀下⼏种。
⼴播类型
②Txadd和Rxadd这两个参数的位是由the advertiser's address是否是公共的还是随机的来决定该参数是“1”或者
是“0”,public(Txadd ==0) or random (Rxadd == 1)。
③PDU-Length:数据包的长度。所以上述的数据包的Adv Header中表⽰的内容是:⼴播包类型是0,即ADV_IND,Txadd和Rxadd地址都是公共的⾮随机,该数据包的长度为33。
ADV_IND类型的⼴播包的组成架构如上图,6 octets的⼴播地址 + 31 octets以内的⼴播数据,所以⼀个⼴播包最⼤为37个字节。
AdvA:⼴播地址。
AdvData:数据包的格式为:Length + Type +Data,由这三项组成⼀个⼩包。
按上⾯的描述⼀个Bluetooth devide能⼴播31个octets的数据内容,然⽽并不是最多只能⼴播31 octets,
看下⾯这幅数据包的图像:
该Bluetooth device在⼴播的时候,总共有三个不同Type的⼴播包,分别是:ADV_IND、ADV_SCAN_REQ、ADV_SCAN_RSP。其中ADV_IDN⼴播包的介绍上⾯以及叙述了,剩下的ADV_SCAN_REQ、ADV_SCAN_RSP是scanning PDUs。
ADV_SCAN_REQ:该数据的字段由ScanA和AdvA字段组成。 ScanA字段应包含TxAdd指⽰的扫描仪的公共或随机设备地址。 AdvA字段是此PDU寻址到的设备的地址。AdvA字段应包含⼴播的公共或随机设备地址,如RxAdd所⽰。这些PDU不包含任何主机数据。
surfer8.0
ADV_SCAN_RSP:该数据字段由AdvA和ScanRspData字段组成。 AdvA字段应包含TxAdd指⽰的⼴告客户的公共或随机设备地址。ScanRspData字段可以包含来⾃⼴播的设备的任何数据。
综上所述,在⼀次完整的⼴播中,Bluetooth devive可以最多⼴播31 octets + 31 octets的数据内容,即最多进⾏62字节的⼴播。
⼆、⼴播包的结束,解析连接successfully的数据包
ADV_CONNECT_REQ 数据包,主要为LLDATA数据段,其他部分和上述的⼴播数据包雷同。
①AA:AccessAddr,链路层连接的访问地址。该地址是后续数据通信时的访问地址,是⼀个32bit的值,每次访问它都会需要⼀个新的访问地址时,链路层应⽣成⼀个满⾜下列要求的新随机值:
·不得是该设备上任何现有链路层连接的访问地址。
·它不应是任何已启⽤的定期⼴告的访问地址。
·它不得超过六个连续的零或⼀。内浮顶
·不得是⼴告频道数据包的访问地址。
·序列不得与⼴告频道数据包的访问地址仅相差⼀位。
·它不能使所有四个⼋位位组相等。
·过渡不得超过24个。
·它的最⾼有效六位应⾄少有两个转换。
援引蓝⽛Core v5.0中的描述On an implementation that also supports the LE Coded PHY ,该AA还需要满⾜以下的条件:
·它的最低有效8位中⾄少应有3个。
·最低有效16位中的跳变不得超过11个。
②CRCInit:该参数⽤于数据通道PDU的CRC校验的配置,其中该参数的⼤⼩为24 bit,移位寄存器预先设置为链路层连接设置的CRC初始化值即该参数CRCInit的值。linear feedback shift register (LFSR)使⽤线性反馈移位寄存器来⽣成CRC校验。
③WinSize:该字段应设置为指⽰sendWindowSize值,其⽅式如下:sendWindowSize = WinSize * 1.25 ms。⽤于确定传输窗⼝开放的时间。
④WinOffset:该字段设置为指⽰transmitWindowOffset值:transmitWindowOffset= WinOffset * 1.25 ms。
Therefore the start of the first packet will be no earlier than
transmitWindowDelay+transmitWindowOffset
and no later than
transmitWindowDelay+transmitWindowOffset + transmitWindowSize
⑤Interval:该参数⽤于设置connlnterval的值,其相关公式为:connInterval = Interval * 1.25 ms,范围是7.5ms⾄
4.0s,connInterval参数由发起⽅的链路层在CONNECT_IND PDU中从主机指定的范围设置。
⑥Latency:该参数⽤于设置connSlaveLatency的值,其设置的⽅式如下:connSlaveLatency = Latency,假如Latency设置为x,则从机累计x次未应答,连接就会断开。
⑦Timeout:该参数⽤于设置 connSupervisionTimeout 的值, 其设置⽅式如下: connSupervisionTimeout = Timeout * 10 ms。
连接可能由于各种原因⽽中断,例如设备超出范围,遇到严重的⼲扰或电源故障情况。由于这可能会在没有任何事先警告的情况下发⽣,很重要的⼀点就是主机和从机都必须监视连接状态,为了能够检测到链路丢失,主机和从机都应使⽤链路层连接监视计时
it信息技术
器TLLconnSupervision。接收到有效数据包后,计时器应复位。如果在建⽴连接之前链路层连接监督计时器达到6 * connInterval,则应将连接视为丢失。这样可以快速终⽌⽆法建⽴的连接。
连接监督超时(connSupervisionTimeout)是⼀个参数,它定义在两个连接被视为丢失之前,两个接收到的数据包PDU之间的最长时间。 connSupervisionTimeout应为100毫秒⾄32.0 s范围内的10毫秒的倍数,并且应⼤于(1 + connSlaveLatency)* connInterval * 2。如果在建⽴连接和计时器之后的任何时候处于连接状态达到connSupervisionTimeout值,则应认为连接已丢失。如果认为连接丢失,则链路层不得再发送任何其他数据包。 链路层退出连接状态,并应过渡到待机状态。 应通知主机失去连接。
连接事件的时间由两个参数确定:连接间隔(connInterval)和从属延迟(connSlaveLatency)。connSlaveLatency的值应为0到((connSupervisionTimeout /(connInterval * 2))-1)范围内的整
数。 connSlaveLatency参数也应⼩于500。当connSlaveLatency设置为0时,从属设备应在每个锚点侦听。 如果从属服务器在应⽤了从属服务器延迟之后没有收到来⾃主机的数据包,则它应该在每个锚点上侦听,并且直到从主机接收到数据包之后才应⽤从属服务器延迟。
⑧ChM:该参数包含了指⽰已使⽤和未使⽤的数据信道的信道映射。下图显⽰了从PHY通道到通道索引和通道类型的映射。下表
中“●”表⽰指定通道类型使⽤了PHY通道和索引。上述抓包数据中该参数的值为“1FFFFFFFFF”,
即“0001111111111111111111111111111111111111”。
⑨Hop:该参数应⽤于设置指⽰数据频道选择算法中使⽤的hopIncrement。它的随机值应在5到16之间。
频道选择算法Channel Selection Algorithm #1
该算法仅⽀持连接事件的通道选择,其包括两个阶段:计算未映射的信道索引,然后将该索引映射到已使⽤信道集中的数据信道索引。unmappedChannel和lastUnmappedChannel是两个连续连接事件的未映射通道索引。 unmappedChannel是当前连接事件的未映射通道索引。 lastUnmappedChannel是上⼀个连接事件的未映射通道索引。 对于连接的第⼀个连接事件,lastUnmappedChannel应为0。
在连接事件开始时,应使⽤以下基本算法来计算unmappedChannel:
精密合金unmappedChannel =(lastUnmappedChannel + hopIncrement)mod 37
当连接事件关闭时,lastUnmappedChannel必须设置为unmappedChannel的值。使⽤以下算法将unmappedChannel重新映射到频道图中已使⽤的频道之⼀:
remappingIndex = unmappedChannel mod numUsedChannels
⑩SCA:该参数应⽤于设置指⽰⽤于确定最坏情况的MasterSCA的睡眠时钟精度,SCA字段的值应按照下中的定义进⾏设置,
三、数据包解析(DATA CHANNEL PDU)
①LL Data PDU Data header字段:该字段的数据封装格式如下图所⽰

本文发布于:2024-09-22 04:38:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/648542.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:连接   数据包   地址   数据   链路层   字段
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议