文章目录
- 2 空口数据包
- 2.1 LE Uncoded PHYs包格式
- 2.2 LE Coded PHY 包格式
- 2.3 广播物理通道PDU
- 2.4 数据物理通道 PDU
- LL Data PDU
- 2.4.2 LL Control PDU
- 2.4.2.1 LL_CONNECTION_UPDATE_IND
- 2.4.2.2 LL_CHANNEL_MAP_IND
- 2.4.2.3 LL_TERMINATE_IND
- 2.4.2.4 LL_ENC_REQ
- 2.4.2.5 LL_ENC_RSP
- 2.4.2.6 LL_START_ENC_REQ
- 2.4.2.7 LL_START_ENC_RSP
- 2.4.2.8 LL_UNKNOWN_RSP
- 2.4.2.9 LL_FEATURE_REQ
- 2.4.2.10 LL_FEATURE_RSP
- 2.4.2.11 LL_PAUSE_ENC_REQ
- 2.4.2.12 LL_PAUSE_ENC_RSP
- 2.4.2.13 LL_VERSION_IND
- 2.4.2.14 LL_REJECT_IND
- 2.4.2.15 LL_SLAVE_FEATURE_REQ
- LL_CONNECTION_PARAM_REQ
- 2.4.2.17 LL_CONNECTION_PARAM_RSP
- 2.4.2.18 LL_REJECT_EXT_IND
- 2.4.2.19 LL_PING_REQ
- 2.4.2.19 LL_PING_RSP
- 2.4.2.20 LL_LENGTH_REQ 和 LL_LENGTH_RSP
- 2.4.2.22 LL_PHY_REQ 和 LL_PHY_RSP
- 2.4.2.23 LL_PHY_UPDATE_IND
- 2.4.2.24 LL_MIN_USED_CHANNELS_IND
- 2.4.2.25 LL_CTE_REQ
- 2.4.2.26 LL_CTE_RSP
- 2.4.2.27 LL_PERIODIC_SYNC_IND
- 2.4.2.28 LL_CLOCK_ACCURACY_REQ 和 LL_CLOCK_ACCURACY_RSP
- 2.4.2.29 LL_CIS_REQ
- 2.4.2.30 LL_CIS_RSP
- 2.4.2.31 LL_CIS_IND
- 2.4.2.32 LL_CIS_TERMINATE_IND
- 2.4.2.33 LL_POWER_CONTROL_REQ
- 2.4.2.34 LL_POWER_CONTROL_RSP
- 2.4.2.35 LL_POWER_CHANGE_IND
- 2.5 固定频率扩展(CTE)及IQ采样
- 2.6 同步物理通道PDU
2 空口数据包
LE设备需要用下面章节定义的数据包,这里有2种基础格式:一种是LE Uncoded PHYs,如章节2.1所描述的,另一种是LE Coded PHY,如章节2.2所描述的。
2.1 LE Uncoded PHYs包格式
下面的包格式定义了 LE Uncoded PHYs(LE 1M和LE 2M)并应用<・)))于所有的物理通道上。
包格式如图2.1所示,每个数据包都包括4个强制字段和1个可选字段,强制字段包括 前导,接入地址,PDU以及CRC,可选项为CTE(固定频率扩展)。
使用LE 1M PHY的时候,接收和发射的时候前导字节为1个字节,使用LE 2M PHY的时候,接收和发射的时候前导字节为2个字节,访问地址为4个字节,PDU范围为2-258字节,CRC为3个字节。
发送的时候,首先发送前导字节,然后按顺序发送访问地址,PDU,CRC和CTE(如果有的话),整个包通过同样的符号率进行发送(1 Msym/s或 2 Msym/s的调制方式).
不包括CTE的包发送时消耗时间为44–2128us。
当CTE被添加进来时,CTE持续时间为16到160us,如图2.1所示。
2.1.1 前导字节
所有的链路层数据包都有一个前导,它在接收器中被用来执行频率同步,符号定时估计,和自动增益
控制(AGC)的功能,前导是一个固定的0和1交替的序列,对于LE 1M PHY,前导字节是8位,LE 2M PHY 是,前导字节是16位,前导字节的第一位需要和访问地址的第一字节一致,如图2.2所示:
2.1.2 访问地址
AUX_SYNC_IND PDU,以及任何与之相连的AUX_CHAIN_IND PDU,应使用包含在AUX_ADV_IND PDU中用来描述定期广播传输的SyncInfo字段中设置的访问地址(AA)值(见章节 2.3.4.6)。
访问地址对于任意的广播信道 来说是固定的,都是0x8E89BED6.
在任意两个设备的链路层连接中,每一个同步广播数据流(BIS)以及定期广播传输都有不同的访问地址。
链路层在发起态对于它发送的每一个发起态的PDU(见章节2.3.3.1)会生成一个新的访问地址,链路层在广播态的时候在每次使能一个定期广播的时候创建新的访问地址。访问地址在涉及到定期广播传输的 PDU的Syncinfo字段中发送。
主设备端的链路层在连接状态对于每一个它创建的同步连接串流(CIS)创建新的访问地址。访问地址在用于创建CIS的链路层控制PDU中发送。
访问地址为32位数值,每一次需要新的访问地址时(除了同步广播串流(BIS)),链路层生成一个新的随机值。
访问地址的生成需遵循以下规则:
- 它不应该是已经存在的任意ACL连接或设备的CIS的访问地址。
- 它不能是任意已经使能的定期广播传输的访问地址
- 它不能是设备上存在的任意BIS的访问地址
- 它不能是设备上存在的任何BIG控制逻辑链路的访问地址
- 如果它是一个新的CIS的访问地址,那么它至少要有1位于当前设备上的应用的访问地址不同
- 它不能有超过6个连续的0或者1
- 它不能是广播包的访问地址(广播包访问地址是固定的)
- 它不能和广播信道的访问地址只有1位的不同。
- 它不能是4个相同的字节
- 它的0,1转换次数不应该超过24次
- 在最多6位的数据中,它至少要有2次0,1转换
链路层在同步广播态对于每一个BIG都会创建一个新的种子访问地址(SAA),BIS的访问地址,是从SAA中衍生而来,SAA是一个满足下面要求的随机值:
对于由同一设备传输的任意一对BIGs,SAA15-0的值至少有2位不同。
对于每一个BIS或者BIG的BIG控制链路来说,访问地址都来源于BIG的SAA.
对于每一个BIS逻辑传输,访问地址应该等于SAA与一个衍生于散列(D)的逻辑传输衍生字(DW)进行按位异或操作,如下所示:
例如,如果n=1,则D=77=0b01001101并且DW = 0xFD060000
随机数生成器的种子应来自于的物理来源并且至少有20bits的信息量。
如果随机数在SAA的情况下,BIS和BIG控制逻辑链路的派生访问地址不满足上述
要求,则应生成新的随机数应直到满足要求。
关于支持LE Coded PHY的实现(见2.2节),接入地址还应满足以下要求:
- 在LSB的8位应该有至少3个1
- 在LSB的前16位有不超过11次0,1的转换
2.1.3 PDU
PDU在前导和访问地址之后,无论数据包是通过首要或次要广播通道还是定期物理通道,PDU都应该是按照章节2.3所定义的广播物理通道PDU。当数据包在数据物理通道上传输,PDU应该是按照章节2.4所定义的数据物理通道PDU。当数据包在同步物理通道上进行传输,PDU应该时章节2.6所定义的同步物理通道PDUs的一种。
2.1.4 CRC
PDU后面跟着的是24位的CRC,他是通过PDU进行计算,CRC计算的多项式在章节3.1.1中定义。
2.1.5 CTE
CRC后面是可选的固定频率扩展选项,包含一系列未白化的连续调制的1。固定频率扩展不包括在CRC和MIC的计算中,固定频率扩展不应该出现在同步物理通道上面,在章节2.5中会更详细的介绍固定频率扩展。
2.2 LE Coded PHY 包格式
下面是LE Coded PHY的包格式定义并且应用于所有的物理通道,包格式如图2.3所示:
每一个包都包括 Preamble,FEC block 1 和 FEC block 2.
Preamble没有被编码。
FEC block 1包括3个字段:访问地址,编码指示(CI)和项1,这些使用章节3.3.1中定义的S=8的编码方式。
编码指示CI决定FEC block 2采用何种编码方式。
FEC block 2包括3个字段:PDU,CRC和TERM2,根据CI值的不同,使用3.3节中定义的S=2或S=8编码方案。
整个包使用1 Msym/s 的调制方式进行发送。
表2.1 描述了数据包字段的大小和持续时间
数据包花费 462 到17040 us进行发送。
注意:在 LE Coded PHY 没用CTE(固定频率扩展)
2.2.1 前导
前导是一个包含10个重复的符号组 “00111100”的长度为80的符号。
2.2.2 访问地址
访问地址的描述在章节2.1.2
2.2.3 编码指示
CI包含表2.2中定义的2个bits:
2.2.4 PDU
当数据包在首要或次要广播物理通道或者定期物理通道传输时,PDU应为章节2.3中所定义的广播物理通道PDU。
当数据包在数据物理通道传输时,PDU应为章节2.4所定义的数据物理通道PDU。
当数据包在同步物理通道传输时,PDU应为章节2.6所定义的同步物理通道PUDs。
2.2.5 CRC
CRC长度为24bits,值为整个PDU的计算值,CRC多项式在章节3.1.1中定义
2.2.6 TERM1和TERM2
在每一个FEC block的最后都有一个叫做TERM1 或 TERM2的终止符,每个终止符长度为3bits,符合章节3.3.1中定义的终止序列。
2.3 广播物理通道PDU
注意:尽管使用这个名称,广播物理通道PDU也在定期物理通道上使用。
广播物理通道PDU包括一个16bit的header和一个可变长度的payload,格式如图2.4所示。广播物理通道PDU的16-bit的hnieader字段格式如图2.5所示。
包含在广播物理通道的header中的 PDU Type字段指示了定义在表2.3中的PDU type,这也显示了包可能出现在哪个通道和哪个物理层。
每一个PDU只允许出现在表2.3中黑点选中的PHYs和物理通道中。
包含在广播物理通道PDU的header中的ChSel、TxAdd和RxAdd字段分别为每个广播物理通道PDU定义的特定的PDU类型的信息。如果ChSel,TxAdd或RxAdd字段没有在给定的PDU中定义使用,那么它们应该被视为保留以供将来使用。
广播物理通道PDU的header中的length字段指示payload的字节长度,允许的长度值为1到255字节。
广播物理通道PDUs中的payload字段针对于于定义在2.3.1到2.3.4节的PDU type,标记为留作将来使用的PDU type不应发送,并应在收到时忽略掉。
在广播物理通道的PDUs中,来自Host的广播数据和扫描回应数据在某些PDU types中可以被包含在payload中,数据的格式如 Vol 3 Part C Section 11所示。
一些广播物理通道PDUs包含一个指向一个包含另一个广播物理通道PDU的AuxPtr字段(见章节2.3.4.5),在这种情况下,第二个数据包和PDU是原始PDU的 auxiliary packet和auxiliary PDU ,而原始PDU又是第二个PDU的superior packet和superior PDU。
注意:一个PDU只允许有一个auxiliary PDU,但是可以有多个superior PDU。
给定一个包,它的从属集 由它的auxiliary packet(如果有的话)和该auxiliary packet的从属集组成。没有AuxPtr字段的数据包有一个空从属集。
2.3.1 广播PDUs
下面的广播物理通道PDU类型成为广播PDUs:
- ADV_IND
- ADV_DIRECT_IND
- ADV_NONCONN_IND
- ADV_SCAN_IND
- ADV_EXT_IND
- AUX_ADV_IND
- AUX_SYNC_IND
- AUX_CHAIN_IND
这些PDUs被处在广播状态的链路层进行发送,处于扫描态或者发起态的链路层进行接收。其中,ADV_IND,ADV_DIRECT_IND,ADV_NONCONN_IND和ADV_SCAN_IND PDUs被称为传统广播PDUs,ADV_EXT_IND,AUX_ADV_IND,AUX_SYNC_IND和AUX_CHAIN_IND PDUs被称为扩展广播PDUs。使用传统广播PDUs的广播事件被称为传统广播事件。
2.3.1.1 ADV_IND
ADV_IND PDU的载荷如图2.6所示。该PDU应用于可扫描可连接的非定向广播事件,位于广播物理通道PDU header中的TxAdd指示在AdvA字段该中的广播者的地址是 公共的(TxAdd =0)还是随机的(TxAdd=1),如果广播者支持LE信道选择算法#2特性,则广播物理信道PDU报头中的ChSel字段应设置为1(见章节4.5.8.3)。
载荷中包括AdvA和AdvData字段,AdvA字段包括TxAdd中指示的广播者的公共或者随机设备地址,如果AdvData字段非空,则它里面为来自广播者host的广播数据。
2.3.1.2 ADV_DIRECT_IND
ADV_DIRECT_IND PDU的载荷如图2.7所示。该PDU应用于可扫描可连接的定向广播事件,位于广播物理通道PDU header中的TxAdd指示在AdvA字段该中的广播者的地址是 公共的(TxAdd =0)还是随机的(TxAdd=1),广播物理通道PDU的header中的RxAdd字段表示在TargetA字段中的目标地址是公共的(TxAdd =0)还是随机的(TxAdd=1),如果广播者支持LE信道选择算法#2特性,则广播物理信道PDU报头中的ChSel字段应设置为1(见章节4.5.8.3)。
载荷包括AdvA和TargetA字段,AdvA字段包括TxAdd中指示的广播者的公共或者随机设备地址,TargetA字段表示这个PDU被发送到的设备的地址,TargetA字段应包括RxAdd指示的目标设备的公共或随机设备地址。
2.3.1.3 ADV_NONCONN_IND
ADV_NONCONN_IND PDU的载荷如图2.8所示。该PDU应用于不可扫描不可连接的非定向广播事件,位于广播物理通道PDU header中的TxAdd指示在AdvA字段该中的广播者的地址是 公共的(TxAdd =0)还是随机的(TxAdd=1)。
载荷中包括AdvA和AdvData字段,AdvA字段包括TxAdd中指示的广播者的公共或者随机设备地址,如果AdvData字段非空,则它里面为来自广播者host的广播数据。
2.3.1.4 ADV_SCAN_IND
ADV_SCAN_IND PDU的载荷如图2.9所示。该PDU应用于可扫描的非定向广播事件,位于广播物理通道PDU header中的TxAdd指示在AdvA字段该中的广播者的地址是 公共的(TxAdd =0)还是随机的(TxAdd=1)。
载荷中包括AdvA和AdvData字段,AdvA字段包括TxAdd中指示的广播者的公共或者随机设备地址,如果AdvData字段非空,则它里面为来自广播者host的广播数据。
2.3.1.5 ADV_EXT_IND
ADV_EXT_IND PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。该PDU可以应用于AdvMode字段的值所指示的所有的广播事件(除了可连接可扫描非定向广播事件)。使用ADV_EXT_IND PDU的广播事件是定向的,当且仅当有TargetA字段或有AuxPtr字段并指向一个有TargetA字段的PDU。
ADV_EXT_IND PDU中允许的通用扩展广播载荷格式字段如表2.4所示。
对于没有ADAD或AdvData的不可连接不可扫描定向广播事件或者不可连接不可扫描的非定向广播事件类型,控制器可以选择是否使用辅助包,见章节4.4.2.6和4.4.2.9。
在章节2.3中描述的所有通用扩展广播载荷字段中:
- M 该字段为强制性的
- O 该字段为可选的
- X 该字段保留备用
- C1 该字段在LE 1M PHY是可选的,在LE Coded PHY为备用的
- C2 如果ADV_EXT_IND PDU中的对应字段不存在,则此字段是强制的,否则留作备用
- C3 如果该PDU的上级PDU中存在相应的字段,则该字段是强制的,否则保留以备将来使用。
- C4 如果ADV_EXT_IND PDU中没有对应的字段,则此字段是可选的,否则将保留它以供将来使用。
- C5 如果该PDU的上级PDU中存在相应的字段,则该字段为可选字段,否则保留供以后使用。
为将来使用保留的字段在数据包发送时不存在,在接收时将被忽略。
任何辅助包应是与ADV_EXT_IND具有相同AdvMode的AUX_ADV_IND包。
2.3.1.6 AUX_ADV_IND
AUX_ADV_IND PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。该PDU可以应用于AdvMode字段的值所指示的所有的广播事件(除了可连接可扫描非定向广播事件)。
AdvMode字段指示了AUX_ADV_IND包将被用于哪种类型的广播事件。
AUX_ADV_IND PDU中允许的通用扩展广播载荷格式字段如表2.5所示。
用于AUX_ADV_IND的PHY应在superior PDU的AuxPtr字段中指定。在AUX_ADV_IND PDU中的任何AuxPtr字段中指定的PHY应该与PDU被发送到的物理层相同.
PDU的ADI字段应该与它的 superior PDU的ADI字段具有相同的值。
注意:ADI字段可以用来检测通道冲突。
任意的auxiliary PDU都是AUX_CHAIN_IND PDU。
当SyncInfo字段存在时,应指向一个 AUX_SYNC_IND PDU。
2.3.1.7 AUX_SYNC_IND
AUX_SYNC_IND PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。该PDU应用于定期广播。
AdvMode字段需要设置为 0b00。
AUX_SYNC_IND PDU中允许的通用扩展广播载荷格式字段如表2.6所示。
用于AUX_SYNC_IND PDU的PHY在章节4.4.2.12中指定。
任意的auxiliary PDU都是AUX_CHAIN_IND PDU。
2.3.1.8 AUX_CHAIN_IND
AUX_CHAIN_IND PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。该PDU用来承载附加的广播数据,它的superior PDU为 AUX_ADV_IND, AUX_SYNC_IND,AUX_SCAN_RSP或者另一个AUX_CHAIN_IND PDU。
AdvMode字段需要设置为 0b00。
AUX_CHAIN_IND PDU中允许的通用扩展广播载荷格式字段如表2.7所示。
用于AUX_CHAIN_IND 的PHY应该与它的 superior PDU的PHY具有相同的值
当PDU的ADI字段存在时,它应该与它的 superior PDU的ADI字段具有相同的值。
注意:ADI字段可以用来检测通道冲突。
任意的auxiliary PDU都是AUX_CHAIN_IND PDU。
2.3.2 扫描PDUs
下面的广播物理通道PDU类型被称为扫描PDUs。
- SCAN_REQ
- SCAN_RSP
- AUX_SCAN_REQ
- AUX_SCAN_RSP
SCAN_REQ和AUX_SCAN_REQ PDUs被称为扫描请求PDUs,SCAN_RSP和AUX_SCAN_RSP PDUs被称为扫描响应PDUs。
当他们用来应答一个可扫描的广播时,使用的PHY应该和它们应答的PDU使用的PHY相同。
2.3.2.1 SCAN_REQ和AUX_SCAN_REQ
SCAN_REQ和AUX_SCAN_REQ PDUs的载荷如图2.10所示。
位于广播物理通道PDU的header的TxADD指示了扫描者在ScanA字段的地址是public(TxAdd=0)还是random(TxAdd=1)。位于广播物理通道PDU的header的RxAdd字段指示了广播者在AdvA字段的地址是public(TxAdd=0)还是random(TxAdd=1)。
载荷包括ScanA和AdvAa字段,ScanA字段包括扫描者的设备地址,AdvA字段包含了该PDU被送到的设备的设备地址,AdvA字段应该包括广播者的设备地址。
注意:这些PDUs不包括任何Host数据。
2.3.2.2 SCAN_RSP
SCAN_RSP PDU的载荷格式如图2.11所示。
位于广播物理通道PDU的header的TxADD指示了广播者在AdvA字段的地址是public(TxAdd=0)还是random(TxAdd=1)。Length字段只是了载荷的字节长度(AdvA和ScanRspData)。
载荷包含了AdvA和ScanRspData字段,AdvA字段包含了广播者的设备地址,ScanRspData字段可能包含来自广播的Host的任意数据。
2.3.2.3 AUX_SCAN_RSP
AUX_SCAN_RSP PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。
AdvMode字段需要设置为 0b00。
AUX_SCAN_RSP PDU中允许的通用扩展广播载荷格式字段如表2.8所示。
当PDU的ADI字段存在时,它应该与它应答的AUX_ADV_IND PDU的ADI字段具有相同的值。
注意:ADI字段可以用来检测通道冲突。
任意的auxiliary PDU都是AUX_CHAIN_IND PDU。
2.3.3 发起链接PDUs
下面的广播物理通道PDUs类型被称为发起链接PDUs:
- CONNNECT_IND
- AUX_CONNECT_REQ
- AUX_CONNECT_RSP
CONNECT_IND和AUX_CONNECT_REQ PDUs被处于发起态的链路层发送并被处于广播态的链路层接收,AUX_CONNECT_RSP PDU被处于广播态的链路层发送并被处于发起态的链路层接收。
这些PDUs应用的PHY应该和这些PDU应答的PDU所使用的PHY相同。
2.3.3.1 CONNECT_IND和AUX_CONNECT_REQ
CONNECT_IND和AUX_CONNECT_REQ PDUs的载荷如图2.12所示, 位于广播物理通道PDU的header的TxADD指示了发起者在InitA字段的设备地址是public(TxAdd=0)还是random(TxAdd=1)。位于广播物理通道PDU的header的RxAdd字段指示了广播者在AdvA字段的地址是public(TxAdd=0)还是random(TxAdd=1)。
如果发起者和广播者都支持LE Channel Selection Algorithm #2特性(见章节4.5.8.3),那么CONNECT_IND PDU的header中的ChSel字段需要被设置为1。如果发起者支持LE Channel Selection Algorithm #2特性但是广播者不支持,则发起者可以设置ChSel字段为0或者1,如果发起者不支持LE Channel Selection Algorithm #2特性,那么CONNECT_IND PDU的header的ChSel字段要被设置为0,AUX_CONNECT_REQ PDU的header的ChSel字段保留用于将来使用。
LLData字段的格式如图2.13所示。
载荷中包含InitA,AdvA和LLData字段,InitA字段包括发起者public或random设备地址,AdvA字段包括广播者的public或random设备地址。
LLData包括10个字段:
-
AA字段包含由链路层按照2.1.2节规定的规则确定的ACL连接的接入地址。
-
CRCInit字段包含ACL链接的CRC校验初始值,按照章节3.1.1定义。它是由链路层创建的一个随机值,随机数发生器的种子的来源应该是物理性的并且至少为20位。
-
WinSize字段用来指示 transmitWindowSize值,按照第4.5.3节中定义的方式:transmitWindowSize =WinSize * 1.25 ms
-
WinOffset字段用来指示 transmitWindowOffset值,按照第4.5.3节中定义的方式:transmitWindowOffset=WinOffset* 1.25 ms
-
Interval字段用来指示章节4.5.1中定义的 connInterval,connInterval = Interval * 1.25 ms。
-
Latency 字段用来指示 connSlaveLatency值,按照第4.5.3节中定义的方式:connSlaveLatency=Latency 。
-
Timeout字段用来指示 connSupervisionTimeout值,按照第4.5.3节中定义的方式:connSupervisionTimeout=Timeout*10ms 。
-
ChM字段包括已使用和未使用的数据通道表,每个通道都用一个位表示,其位置根据1.4.1节中定义的数据通道索引。LSB表示数据通道索引0,第36的位表示数据通道索引36。位的值为0表示这个通道还未被使用,位的值为1表示该通道已经被使用,第37,38,39位的值留作将来用途。
注意:当从RF频道映射到数据频道索引时,要注意在广播频道索引38处有一个缺口。 -
Hop字段用来指示章节4.5.8.2中所定义的数据通道选择算法用到的hopIncrement,它的值为一个5到16的随机值。
-
SCA字段用来指示章节4.2.2中定义的主睡眠时钟精度的最坏情况的masterSCA,SCA字段的值应该被设置为表2.9所示:
2.3.3.2 AUX_CONNECT_RSP
AUX_CONNECT_RSP PDU使用章节2.3.4中所描述的通用扩展广播载荷格式。
AdvMode字段需要设置为 0b00。
AUX_CONNECT_RSP PDU中允许的通用扩展广播载荷格式字段如表2.10所示。
2.3.4 通用广播包扩展格式
下面的扩展广播物理通道PDUs共享同样的广播物理通道PDU载荷格式,也就是手册中提到的通用扩展广播载荷格式。
- ADV_EXT_IND
- AUX_ADV_IND
- AUX_SCAN_IND
- AUX_SYNC_IND
- AUX_CHAIN_IND
- AUX_CONNECT_RSP
通用扩展广播载荷格式如图2.14所示:
Extended Header Length为一个0到63的值,表示可变长度的Extended Header字段的长度。
AdvMode字段指示广播的模式,AdvMode字段的值设置如表2.11所示:
如果存在AdvData,则它包含了来自广播者Host的广播数据,AdvData的最大值取决于Extended Header的值,AdvData的大小可以通过减去Extended Header的长度然后加上从广播物理通道PDU Header中指定的长度增加一个字节来计算。
Extended Header字段是一个可变长度的头,只有在 Extended Header Length为非0值的时候存在,格式如图2.15所示:
Extended Header Flags位定义如表2.12所示:
如果flag位设置为1,则有相应的Extended Header字段,否则没有对应的Extended Header字段,出现的Extended Header字段
的顺序始终与扩展头标志中的标志的顺序相同(如AdvA字段为第一个,如果存在的话,然后是TargetA等)。
Extended Header flag和对应的Extended Header字段是强制的可选的或留作未来使用的取决于extended header应用的广播物理通道PDU。
2.3.4.1 AdvA字段
如果该字段存在,它的格式为图2.16所示的六字节:
AdvA字段包含了广播者的设备地址,位于广播物理通道PDU的header的TxADD指示了设备地址是public(TxAdd=0)还是random(TxAdd=1)。
2.3.4.2 TargetA字段
如果该字段存在,它的格式为图2.17所示的六字节:
TargetA字段包含了扫描或发起者要发往的设备地址,位于广播物理通道PDU的header的RxADD指示了设备地址是public(TxAdd=0)还是random(TxAdd=1)。
2.3.4.3 CTEInfo字段
CTEInfo字段的出现表明该数据包包含一个固定频率扩展信号。CTEInfo字段在2.5.2节中定义。
2.3.4.4 AdvDataInfo字段
该字段存在时,AdvDataInfo(ADI)字段为如图2.18所示的2字节的数据格式。
SID由广播者设置,用来区分该设备发送的不同广播集。
DID由广播者设置,用来指示扫描者是否可以认为AdvData中的数据内容是在较早的数据包中发送的AdvData的副本。
2.3.4.5 AuxPtr字段
该字段存在时,AuxPtr字段为3个字节,格式如图2.19所示:
AuxPtr字段的出现表明部分或全部广播数据位于后续的辅助包中。AuxPtr字段的内容描述了这个包。
Channel Index字段包含了用于发送 auxiliary包的常用通道索引(见章节1.4.1)。
Offset Units字段表示Aux Offset字段用大都二units,字段的值定义如表2.13所示:
Aux Offset 偏移字段包含从包含AuxPtr字段的数据包开始到辅助数据包的近似开始的时间,Aux Offset字段的值以Offset Unit字段指示的时间单位为单位,偏移量为Aux Offset的值乘以时间单位。Aux Offset至少为包的长度加上 T_MAFS的长度(见章节4.1.2)。如果Aux Offset低于245700us,那么Offset Units字段需要被设置为0, 辅助数据包不应早于AuxOffset启动,并且不应晚于Aux Offset加上一个Offset Unit启动, 这允许LL绕过Aux Offset到Offset Unit。
Aux PHY字段指示了用于发送辅助包的PHY,Aux PHY字段的值设置定义如表2.14所示。
CA字段包含了从带有该字段的包到辅助包之间的广播的时钟精度,CA字段的值设置见表2.15
Aux Offset为0的AuxPtr字段是允许的,代表着没有辅助包要发送但是最近的PDU的主机广播数据还没有结束(见章节2.3.4.9),它应该被视为未收到AUX_CHAIN_IND PDU,其余字段应该包括有效值。
2.3.4.6 SyncInfo字段
当该字段存在,SyncInfo字段为18字节长度,格式如图2.21所示:
SyncInfo字段的存在表明存在定期的广播序列(使用AUX_SYNC_IND PDUs)。 SyncInfo字段的内容描述了这一定期的广播序列。
Offset Units 字段指示了Sync Packet Offset字段用到的时间单位。
Offset Units字段的定义如表2.16所示:
SyncInfo字段在advertising PDU或LL_PERIODIC_SYNC_IND DPU中都可能出现。(参考章节2.4.2.27)
Sync Packet Offset字段包含从参考点到此 SyncInfo字段描述的AUX_SYNC_IND数据包开始的时间。 如果 SyncInfo出现在advertising PDU中,参考点包含它的数据包的开始。 如果它出现在LL_PERIODIC_SYNC_IND PDU中,则由该PDU指定参考点。Sync Packet Offset字段的值以Offset Units字段指示的时间为单位;实际偏移是通过将该值乘以单位来确定的,如果Offset Adjust字段设置为1,则增加2.4576秒。 如果Sync Packet Offsets小于245,700µs,则Offset Units字段应设置为0。 如果Offset Units字段设置为0,或者SyncInfo字段出现在advertising PDU中,则Offset Adjust字段应设置为0。如图2.22所示,参考点不应迟于Sync Packet Offset,也不应早于Sync Packet Offset加上AUX_SYNC_IND开始前的一个偏移单元。
Sync Packet Offset
字段为0时,表示到下一个AUX_SYNC_IND
包的时间大于它能表示的值。
Interval
字段使用1.25ms
的单位来描述从一个广播序列的包的开始时间到下一个包的开始时间,它的值要大于等于6(7.5ms)。
ChM
字段包含在定期物理信道上使用
和未使用
的PHY信道的信道映射。每个通道都用一个位来表示,这个位按照1.4.1章节
中定义的通道索引来定位。LSB表示通道索引0,位置36的位表示通道索引36. 位值为0表示该通道未使用。位值为1表示该通道被使用。
AA
,CRCInit
和SCA
字段和在CONNECT_IND PDU
里面的字段具有相同的意义。(见章节2.3.3.1
)
Event Counter
字段包含适用于SyncInfo字段描述的AUX_SYNC_IND包的paEventCounter
的值(参见章节4.4.2.1
)。
2.3.4.7 TxPower字段
字段存在时,它的格式是一字节的如下图所示的内容:
Tx Power Level字段与核心规范的补充部分的Part A部分 1.5章节
中定义的广播数据 Tx Power类型定义的值一致。
如果主机指定控制器在一个广播中包含TxPower字段,那么如果扩展广播事件包含一个TxPower字段,那么它应该包含在AUX_ADV_IND PDU
中,否则在所有的ADV_EXT_IND PDU
中。任何AUX_CHAIN_IND pdu
不应该包含TxPower字段。如果主机指示控制器在一个定期广播中包含TxPower字段,那么它应该包含在AUX_SYNC_IND pdu
中,但不包含在任何AUX_CHAIN_IND pdu
中。
2.3.4.8 ACAD字段
扩展头的其余部分形成了附加的控制器广播数据(ACAD)字段。这个字段的长度是扩展的报头长度减去扩展的报头标志(1字节)的大小和当前标志所表示的那些字段的总和。ACAD不能跨多个广播物理通道pdu分散;它应始终适合于单个广播物理通道PDU。
如果存在ACAD字段,则应保存来自广播者的控制器的数据或将要由接收方控制器使用的数据。它的使用格式见Vol 3 Part C section 11
。
ACAD类型的格式和含义在核心规范的补充中Part A section 1
定义,
ACAD类型标识符值在Assigned Numbers
中定义。
2.3.4.9 Host Advertising Data
扩展头之后的PDU部分形成了AdvData
字段,这个字段的长度在章节2.3.4
中描述。
如果该字段存在,则应使用Vol 3 Part C section 11
中描述的格式来保存广播者的host端的数据。如果Host端没有提供任何数据,这个字段可以被忽略,但是为了本部分的其他的用途,它应该被视为Host端已经提供了数据。
控制器可能支持 Host 的广播数据进行分包,Host 广播数据在分包前的总数不应该超过1650字节。当链路层对Host广播数据进行分帧时,分帧的个数和每一帧的大小由控制器决定。控制器应该尽量减少分帧的数量,以保证整个Host发布数据时的可靠性,Host可能会指示控制器是否应该对发布的主机数据进行分帧,但是控制器可能会忽略这个提示。如果在扩展广播或在广播或扫描PDU中发送的扫描响应数据加上扩展头长度、AdvMode和扩展头超过了最大通告物理通道PDU载荷(255字节),则链路层将对主机广播数据进行分帧。
链路层将多个帧放置在不同pdu的AdvData字段中,当主机广播数据被分帧时,第一个片段应该放在AUX_ADV_IND
,AUX_SYNC_IND
或AUX_SCAN_RSP
中,而随后的片段应放置在AUX_CHAIN_IND PDU
中。
每个AUX_CHAIN_IND PDU
是包含前一个片段的PDU的辅助PDU;不包含AdvData的PDU不应该有包含AdvData的辅助PDU。
如果链路层对主机的广播数据进行了分帧,但随后无法传输所有的帧,那么它能够传输的最后一个帧应该包含一个Aux偏移量为0的AuxPtr字段,以便扫描器知道数据被截断了。
2.4 数据物理通道 PDU
数据通道PDU由16或24位的头
,可变长度的payload
并且可能包含一个数据完整性校验(MIC)字段
。
数据通道PDU的格式如下图2.24所示:
数据通道PDU的Header
字段如图2.25所示:
这16或24位的Header
字段包含了6到7个字段,如表2.17所示:
MIC字段不能包含在未加密的ACL连接中,也不能包含在有效载荷长度为零的数据通道PDU的加密ACL连接中。
MIC字段应包含有效载荷长度非零的数据通道PDU的加密的ACL连接中,计算方式按照:Vol 6 Part E Section 1
中的定义进行计算。
payload的格式取决于Header 的LLID
字段,如果LLID 字段为 0b01或0b10,则数据通道PDU的payload由Section 2.4.1
中定义的LL Data PDU
组成,如果LLID字段为0b11,则数据通道PDU的payload由Section 2.4.2
中定义的LL Control PDU
组成。
Header的NESN
位在Section 4.5.9
中定义。
Header的SN
位在Section 4.5.9
中定义。
Header的MD
位在Section 4.5.6
中定义。
Header的CTEInfo Present (CP)
字段表示数据通道PDU的Header是否有CTEInfo字段,从而数据通道包是否有CTE扩展。如果CP字段为0,则数据通道PDU头中没有CTEInfo字段,数据通道包中也没有CTE扩展。如果CP字段为1,则数据通道PDU头中包含CTEInfo字段,且数据通道报文中包含一个CTE扩展。
Header的Length字段表示有效Payload和MIC(如果有的话)的长度。length字段的长度范围是0 ~ 255个字节。有效载荷的长度应小于或等于251个字节,MIC的长度是4个字节。
如果CP字段为1,那么CTEInfo字段在Header中存在。CTEInfo字段在Section 2.5.2
中定义,CTEInfo字段可以在任意的数据通道PDU的Header中,当然,链路层不应该发送带有CTEInfo字段的数据通道PDU,除非它已经检测到对端设备支持接收恒定频率扩展(RCTE)特性。
注意:发送包含CTEInfo字段的PDU的控制器不一定能接收到,反之亦然。
在当前版本的规范中,请求远程设备发送包含CTEInfo字段的数据包的唯一方法是通过Constant Tone扩展请求过程。
LL Data PDU
所有的LL Data PDU为用于发送L2CAP数据的数据通道PDU,Header中的LLID字段应该被设置为0b01
或者0b10
。
当LL Data PDU的Header的LLID字段被设置为0b01,并且长度字段被设置为0时,被认为是空PDU,master的链路层可以发送一个空的PDU给到slave设备以允许slave设备响应任意一个数据通道PDU,包括空PDU。
当LL Data PDU的Header的LLID字段被设置为0b10时,长度字段不能被设置为0。
注意:如果链路层接收到长度Data_Total_Length
为0且Packet_Boundary_Flag
设置为0b00(例如 start帧) 的HCI ACL Data Packet时,链路层不能简单地在空中传输这个片段,相反,必须将它与以下一个或多个连续片段组合,形成一个LLID设置为0b10且长度非0的PDU。
2.4.2 LL Control PDU
所有的LL Control PDU都是用于控制链路层链接的数据通道PDU。
LL Control PDU的payload如图2.26所示:
LL Control PDU的长度字段不能设置为0。
Payload包括Opcode
和CtrData
。
Opcode
字段表示不同的LL Control PDU
类型,在表2.18中定义:
LL Control PDU 的CtrData字段取决于Opcode字段,在后面的补充章节中定义。对于一个给定的Opcode,CtrData的字段的长度时固定的。
当CtrData字段中的字段描述给出了一个有效值的范围或对一个值的其他限制时(例如,字段X小于字段Y),所有其他的值应保留以供将来使用。这个范围可以直接在LL Control PDU的相关部分中规定,也可以间接地在该部分所引用的部分中规定(例如Section 2.4.2.1
中WinSize
字段是由Section 4.5.3
中transmitWindowSize
值的取值范围推导而来的)。
如果没有限制一个字段的范围,那么这个字段的所有值都是合法的。
除显式声明外,LL Control PDU的CtrData字段中的所有保存有整型数的字段
将被认为是无符号数据。
如果接收到不支持的或者保留做未来用的 LL Control PDU,链路层应该回复一个 LL_UNKNOW_RSP PDU
, LL_UNKNOW_RSP PDU的UnkonwnType字段的值应该等于接收到的PDU的Opcode。
如果接收到长度错误或者CtrData无效的LL Control PDU,链路层可以用数据的特定实现的解释继续相关的链路层过程(例如,如果PDU太长,它可以忽略掉多余的数据,如果字段超出范围,它可以用最接近的一个允许的值)。如果不继续这个过程,那么应该响应一个LL_UNKNOW_RSP PDU
,或者如果相关的过程允许的话,则响应LL_REJECT_IND
或LL_REJECT_EXT_IND PDU
, LL_UNKNOW_RSP PDU
的UnkonwnType
字段的值或者LL_REJECT_EXT_IND PDU
的RejectOpcode
字段的值应该等于接收到的PDU的Opcode。
2.4.2.1 LL_CONNECTION_UPDATE_IND
CtrData字段的格式如图2.27所示:
LL_CONNECTION_UPDATE_IND
的 CtrData
包括下面6个字段:
WinSize
字段用于表示transmitWindowSize的值
,如Section 4.5.3
中的定义:transmitWindowSize = WinSize * 1.25
ms。WinOffset
字段用于表示transmitWindowOffset
的值,如Section 4.5.3
中的定义:transmitWindowOffset = WinOffset * 1.25
ms。Interval
字段用于表示连接间隔(connInterval)的值,如Section 4.5.1
中的定义:connInterval= Interval* 1.25
ms。Latency
字段用于表示从机连接延迟(connSlaveLatency)的值,如Section 4.5.1
中的定义:connSlaveLatency= Latency
。Timeout
字段用于表示连接超时(connSupervisionTimeout)的值,如Section 4.5.2
中的定义:connSupervisionTimeout= Timeout* 1.25
ms。Instant
字段用于表示Section 5.1.1
中描述的instant。
2.4.2.2 LL_CHANNEL_MAP_IND
CtrData字段的格式如图2.28所示:
LL_CHANNEL_MAP_IND
的 CtrData
包括下面2个字段:
ChM
字段包含了Used
和Unused
的数据通道的通道表,每个通道都用1位来进行表示,每个数据通道的通道索引在Section 1.4.1
中定义。这个字段的格式和CONNECT_IND PDU
的ChM
字段完全一致(见Section 2.3.3.1
)。Instant
字段用于表示Section 5.1.1
中描述的instant。
2.4.2.3 LL_TERMINATE_IND
CtrData字段的格式如图2.29所示:
LL_TERMINATE_IND
的 CtrData
包括下面1个字段:
ErrorCode
字段用于告知对端设备为什么链路被断开。(详情见Vol 1 Part F,Controller Error Codes
)
2.4.2.4 LL_ENC_REQ
CtrData字段的格式如图2.30所示:
LL_ENC_REQ
的 CtrData
包括下面4个字段:
Rand
字段包含了Host提供的用于EDIV(见Vol 3 Part H,Section 2.4.4
)的一个随机数。EDIV
字段包含了加密用的diversifier
。SKDm
字段 包含session key diversifier
的master部分。IVm
字段包含了初始化向量的master部分。
2.4.2.5 LL_ENC_RSP
CtrData字段的格式如图2.31所示:
LL_ENC_RSP的
CtrData`包括下面2个字段:
SKDs
字段包含了session key diversifier
的slave部分。IVs
字段包含了初始化向量的slave部分。
2.4.2.6 LL_START_ENC_REQ
LL_START_ENC_REQ PDU
没有CtrData字段。
2.4.2.7 LL_START_ENC_RSP
LL_START_ENC_RSP PDU
没有CtrData字段。
2.4.2.8 LL_UNKNOWN_RSP
CtrData字段的格式如图2.32所示:
LL_UNKNOWN_RSP
的 CtrData
包括下面1个字段:
UnknownType
字段为接收到的LL Control PDU
的Opcode字段值。
2.4.2.9 LL_FEATURE_REQ
CtrData字段的格式如图2.33所示:
LL_FEATURE_REQ
的 CtrData
包括下面1个字段:
FeatureSet
字段包含了在Section 4.6
中提到的master的链路层支持的特性的集合。
2.4.2.10 LL_FEATURE_RSP
CtrData字段的格式如图2.34所示:
LL_FEATURE_REQ
的 CtrData
包括下面1个字段:
FeatureSet[0]
包含了master和slave的链路层都支持的特性。FeatureSet[1-7]
包含了发送这个PDU的链路层支持的特性。
特性列表见Section 4.6
2.4.2.11 LL_PAUSE_ENC_REQ
LL_PAUSE_ENC_REQ PDU
没有CtrData字段。
2.4.2.12 LL_PAUSE_ENC_RSP
LL_PAUSE_ENC_RSP PDU
没有CtrData字段。
2.4.2.13 LL_VERSION_IND
CtrData字段的格式如图2.35所示:
LL_VERSION_IND
的 CtrData
包括下面3个字段:
VersNr
字段包含了蓝牙链路层的规范版本。Compld
字段包含了蓝牙控制器的制造商的公司标识符。SubVersNr
字段包含了为蓝牙控制器的每一个实现或实现的修改所分配的一个唯一的值。
注意:一个给定的VersNr
并不意味着设备支持这个版本所提到的所有的特性,
需要检查相关特性的位(见Section 4.6
)来看是否支持相关特性。更高的VersNr值并不一定意味着更高的规范版本。
2.4.2.14 LL_REJECT_IND
CtrData字段的格式如图2.36所示:
ErrorCode
需要包含请求被拒绝的原因。参考Vol 1 Part F,Controller Error Codes
。
2.4.2.15 LL_SLAVE_FEATURE_REQ
CtrData字段的格式如图2.37所示:
LL_SLAVE_FEATURE_REQ
的 CtrData
包括下面1个字段:
FeatureSet
需要包含Section 4.6
中描述的从机链路层支持的特性集合。
LL_CONNECTION_PARAM_REQ
CtrData字段的格式如图2.38所示:
LL_CONNECTION_PARAM_REQ
的 CtrData
包括下面12个字段:
Interval_Min
字段用于表示connInterval
的最小值,如Section 4.5.1
中的定义:connInterval = Interval_Min * 1.25
ms。Interval_Max
字段用于表示connInterval
的最大值,如Section 4.5.1
中的定义:connInterval = Interval_Max* 1.25
ms。Latency
字段用于表示connSlaveLatency
的值,如Section 4.5.1
中的定义:connSlaveLatency= Latency
,Latency的单位是连接事件的个数。Timeout
字段用于表示connSupervisionTimeout
的值,如Section 4.5.2
中的定义:connSupervisionTimeout= Timeout* 10
ms。PreferredPeriodicity
字段用于表示connInterval
优先使用PreferredPeriodicity
的倍数作为连接间隔,PreferredPeriodicity
的单位为1.25ms,例如设置PreferredPeriodicity
为100,意味着连接间隔优先使用125ms的倍数,为0时表示没有优先值,它的值应该小于或等于最大的连接间隔。ReferenceConnEventCount
用于表示connEventCounter
的值,所有有效的Offset0
到Offset5
都是基于它来计算的。
注意:ReferenceConnEventCount
的值不依赖于LL_CONNECTION_UPDATE_IND PDU
中的Instant
字段。- Offset0, Offset1, Offset2, Offset3, Offset4, Offset5字段用来表示相对于
ReferenceConnEventCount
的更新过连接参数的LE连接锚点位置的可能值。Offset0
到Offset5
字段以1.25 ms为单位,并按优先顺序递减;也就是说,Offset0
是最优先的值,然后是Offset1
,以此类推。Offset0
到Offset5
应该小于Interval_Max
。值0xFFFF表示无效。有效Offset0到Offset5字段必须包含唯一的值。有效的字段应该总是在无效字段之前。
2.4.2.17 LL_CONNECTION_PARAM_RSP
LL_CONNECTION_PARAM_RSP
的格式和LL_CONNECTION_PARAM_REQ
格式完全一致,见Section 2.4.2.16
。
2.4.2.18 LL_REJECT_EXT_IND
CtrData字段的格式如图2.39所示:
LL_REJECT_EXT_IND
的 CtrData
包括下面2个字段:
RejectOpcode
包含被拒绝的LL Control PDU
的Opcode字段的值。ErrorCode
包含LL Control PDU
被拒绝的原因,原因列表参考Vol 1 Part F,Controller Error Codes
。
只有当对端设备链路层支持Extended Reject Indication
这个链路层特性(Section 4.6
)时,才会发出这个PDU,否则,
应发出LL_REJECT_IND PDU
(Section 2.4.2.14
)。
2.4.2.19 LL_PING_REQ
LL_PING_REQ
没有CtrData字段。
2.4.2.19 LL_PING_RSP
LL_PING_RSP
没有CtrData字段。
2.4.2.20 LL_LENGTH_REQ 和 LL_LENGTH_RSP
LL_LENGTH_REQ 和 LL_LENGTH_RSP
的CtrData字段的格式如图2.40所示:
LL_LENGTH_REQ 和 LL_LENGTH_RSP
的 CtrData
包括下面4个字段:
MaxRxOctets
用来表示发送者的connMaxRxOctets
值,如Section 4.5.10
中所定义。MaxRxOctets
的值不应该少于27个字节。MaxRxTimes
用来表示发送者的connMaxRxTimes
值,如Section 4.5.10
中所定义。MaxRxTimes
的值不应该小于328us。MaxTxOctets
用来表示发送者的connMaxTxOctets
值,如Section 4.5.10
中所定义。MaxTxOctets
的值不应该少于27个字节。MaxTxTimes
用来表示发送者的connMaxTxTimes
值,如Section 4.5.10
中所定义。MaxTxTimes
的值不应该小于328us。
2.4.2.22 LL_PHY_REQ 和 LL_PHY_RSP
LL_PHY_REQ
和 LL_PHY_RSP
的CtrData字段的格式如图2.41所示:
LL_PHY_REQ
和 LL_PHY_RSP
的 CtrData
包括下面2个字段:
TX_PHYS
用于指示发送者优先使用的发射机PHYs。RX_PHYS
用于指示发送者优先先用的接收机PHYs。
每一个字段包括8个bits,每隔字段至少有1位需要被设置为1,这些位用于指示发送者优先使用哪些PHY。
2.4.2.23 LL_PHY_UPDATE_IND
CtrData字段的格式如图2.42所示:
LL_PHY_UPDATE_IND
的 CtrData
包括下面3个字段:
M_TO_S_PHY
用于指示从主机发向从机的数据包要用的PHY,S_TO_M_PHY
用于指示从从机发向主机的数据包用的PHY,每个字段包含8个bits,如果PHY改变,如表2.19中所示,对应的bit需要被设置为1,其他的位设置为0,如果PHY没有发生改变,则对应的字段需要被设置为0。Instant
用于指示Section 5.1.10
中描述的Instant
。
如果M_TO_S_PHY
和S_TO_M_PHY
都设置为0,则不存在Instant
,Instant
保留做将来用。
2.4.2.24 LL_MIN_USED_CHANNELS_IND
CtrData字段的格式如图2.43所示:
LL_MIN_USED_CHANNELS_IND
的 CtrData
包括下面2个字段:
PHYs
字段用于设置从机要求的最低数量的可用通道的PHYs,PHYS字段包括8位,如表2.19所示,至少有一位需要被设置为1.MinUsedChannels
字段用于指示用于特定PHYs的最小通道数量,MinUsedChannels
值的范围为2
到37
。
2.4.2.25 LL_CTE_REQ
CtrData字段的格式如图2.44所示:
LL_CTE_REQ
的 CtrData
包括下面2个字段:
MinCTELenReq
包含对端设备要求的CTE的最小长度,单位为8us,该字段的范围为2
到20
。CTETypeReq
包含表2.20中描述的对端设备申请的CTE类型。
2.4.2.26 LL_CTE_RSP
LL_CTE_RSP
不存在CtrData字段。
2.4.2.27 LL_PERIODIC_SYNC_IND
CtrData字段的格式如图2.45所示:
LL_PERIODIC_SYNC_IND
的 CtrData
包括下面10个字段:
ID
用于设置Host
提供的一个标识符,这个用于高层次的协议用途,它的值没有要求并且该规范中不会用到。SyncInfo
和Section2.3.4.6
中的含义和数据格式是一模一样的,除了同步数据包偏移的参考点是距离connEventCount
字段中的计数器值最近的连接事件的锚点,而Offset为0时没有特殊的含义。connEventCount
用于设置符合currEvent - 2^14 < connEventCount < currEvent + 2^14
链接事件的计数值,currEvent是LL_PERIODIC_SYNC_IND PDU
发送或重发的时候连接事件的计数器值。lastPaEventCounter
应用于用于确定SyncInfo
字段内容的AUX_SYNC_IND PDU
的paEventCounter
,设备只有在收到或发出AUX_SYNC_IND PDU
的时候才会发出这个PDU。lastPaEventCounter
和EventCounter
字段的值应该是相等的,并且相差1,最大不超过65535,或表示间隔不超过5S的间隔。SID
用于设置只想定期广播的广播的SID
子字段。AType
在AdvA
字段使用public地址时为0,使用random地址的时候为1.SCA
用于发送这个PDU的设备的休眠时钟精度,它的值和CONNECT_IND PDU
(Section 2.3.3.1
)使用相同的模式。PHY
用于表示用于定期广播的PHY,使用到的PHY设置为1,其他的没用到的设置为0,具体定义见表2.19。AdvA
用于设置指向定期广播的广播者的地址(注意:对于可解析的地址,这是一个未解决的版本)。syncConnEventCount
设置为用于确定发送此PDU内容的设备的连接事件计数器。 这是发送设备从它将要发送LL_PERIODIC_SYNC_IND PDU
的目标设备接收到一个数据包的链接事件。如果发送设备是包含这两个设备的链路的从设备,则使用接收到的数据包同步其锚点(Section 4.5.7
)。
注意:这意味着必须在此PDU可以传输之前建立连接。
2.4.2.28 LL_CLOCK_ACCURACY_REQ 和 LL_CLOCK_ACCURACY_RSP
CtrData字段的格式如图2.46所示:
SCA
字段用于指示最近的masterSCA
(如果该PDU是master发送)或slaveSCA(如果该PDU是slave发送)
,用于决定最坏情况下的发送设备的休眠时钟精度(见Section 4.2.2
)。这个字段的格式在CONNECT_IND PDU
的SCA
字段定义是一致的(见Section 2.3.3.1
)。
2.4.2.29 LL_CIS_REQ
CtrData字段的格式如图2.47所示:
LL_CIS_REQ
的 CtrData
包括下面字段:
CIG_ID
用于表示Section 4.5.14
中定义的CIG
标识符CIS_ID
用于表示Section 4.5.13.1
中定义的CIS
标识符PHY_M_TO_S
用于表示从master发往slave时用到的PHY,如表2.19中所定义,至少1个bit需要被设置。PHY_S_TO_M
用于表示从slave发往master时用到的PHY,如表2.19中所定义,至少1个bit需要被设置。Max_SDU_M_To_S
用于设置来自maser的Host的SDU的最大大小,以字节为单位,。Framed
在使用unframed
数据PDUs的时候设置为0,在使用framed
数据PDUs的时候设置为1。Max_SDU_S_To_M
用于设置来自slave的host的SDU的最大大小,单位是字节。SDU_Interval_M_To_S
用于设置来自master的host的两个连续的SDUs的时间,单位是us。SDU_Interval_S_To_M
用于设置来自slave的host的两个连续的SDUs的时间,单位是us。Max_PDU_M_To_S
以字节为单位表述从master发向slave的最大payload大小,值的范围为0-251字节,只有在BN_M_To_S
为0的时候,这个字段才被设置为0。Max_PDU_S_To_M
以字节为单位表述从slave发向master的最大payload大小,值的范围为0-251字节,只有在BN_S_To_M
为0的时候,这个字段才被设置为0。NSE
用来表示每一个CIS事件的最大子事件的个数,值的范围为1-31。Sub_Interval
以us为单位表示在一个CIS事件中两个相邻的子事件的时间间隔,如果NSE
字段为1,则这个间隔需要设置为0,否则这个间隔需要大于400us并小于ISO_Interval
。BN_M_To_S
需要设置为在Section 4.5.13.2
中定义的master到slave所用的BN参数值。值的范围为0-15。BN_S_To_M
需要设置为在Section 4.5.13.2
中定义的slave到master所用的BN参数值。值的范围为0-15。FT_M_To_S
需要设置为在Section 4.5.13.2
中定义的master到slave所用的FT参数值。值的范围为0-15。FT_S_To_M
需要设置为在Section 4.5.13.2
中定义的slave到master所用的FT参数值。值的范围为0-15。ISO_Interval
为连续两个CIS锚点之间的时间间隔,单位为1.25 ms。取值范围为4 ~ 3200,也就是5ms到4s。CIS_Offset_Min
以us为单位表示连接事件计数器等于connEventCount
的连接事件的ACL锚点与第一个CIS锚点之间建议的最小时间,它的值应当大于500us。CIS_Offset_Max
以us为单位表示连接事件计数器等于connEventCount
的连接事件的ACL锚点与第一个CIS锚点之间建议的最大时间,它的值应当大于或等于CIS_Offset_Min
并且小于(connInterval – ((NSE – 1) × Sub_Interval + MPTm + T_IFS + MPTs + T_MSS))
,其中MPTm和MPTs在Section 4.5.13.1
中定义。对于第一个CIG中的CIS,它需要小于(connInterval – (CIG_Sync_Delay + T_MSS))
。connEventCount
应设置为满足current2^14 < connEventCount < current+ 2^14 (以65536取模)
的一个连接事件计数器值,其中current是包含该字段的PDU正在被传输或重传连接事件的计数器值,connEventCount的值应该大于LL_CIS_REQ PDU
第一次传输时的事件的current值。
2.4.2.30 LL_CIS_RSP
CtrData字段的格式如图2.48所示:
LL_CIS_RSP
的 CtrData
包括3个字段,与LL_CIS_REQ PDU
中相应字段的含义相同。
2.4.2.31 LL_CIS_IND
CtrData字段的格式如图2.49所示:
LL_CIS_IND的
CtrData`包括下面5个字段:
AA
为CIS的接入地址,链路层根据Section 2.1.2
中定义的规则产生。CIS_Offset
以us为单位表示连接事件计数器等于connEventCount
的连接事件的ACL锚点与第一个CIS锚点之间的时间。CIG_Sync_Delay
为Section 4.5.14.1
中定义的CIG_Sync_Delay
。CIS_Sync_Delay
为Section 4.5.14.1
中定义的CIS_Sync_Delay
。connEventCount
应设置为满足current2^14 < connEventCount < current+ 2^14 (以65536取模)
的一个连接事件计数器值,其中current是包含该字段的PDU正在被传输或重传连接事件的计数器值,connEventCount的值应该大于LL_CIS_REQ PDU
第一次传输时的事件的current值。
2.4.2.32 LL_CIS_TERMINATE_IND
CtrData字段的格式如图2.50所示:
LL_CIS_TERMINATE_IND的
CtrData`包括下面3个字段:
CIG_ID
为包含将要被终止的CIS的CIG的描述符。CIS_ID
为将要被终止的CIS的描述符。ErrorCode
用于提醒对端设备为什么CIS将要被终止。(错误信息列表及描述见[Vol 1] Part F, Controller Error Codes
)
2.4.2.33 LL_POWER_CONTROL_REQ
CtrData字段的格式如图2.51所示:
LL_POWER_CONTROL_REQ的
CtrData`包括下面3个字段:
PHY
表示将要发出的request用到的PHY配置,对应的PHY位(具体描述见表2.21)需要设置为1,其他的位位0。
Delta
用于表示对于接收者请求改变指定的PHY的发射功率等级的大小,以dB为单位。这是一个有符号的整数值,正数表示请求增加发射功率等级,负数表示减小发射功率等级,为0的时候表示不需要任何改变,值为0x7F时,表示增加到最大的发射功率等级。TxPower
为对于特定的PHY的发射端的发射功率等级,以dB为单位的有符号整数,设置为127的时候表示这个值无效,并且它不能被设置为126。
2.4.2.34 LL_POWER_CONTROL_RSP
CtrData字段的格式如图2.52所示:
LL_POWER_CONTROL_RSP的
CtrData`包括下面5个字段:
Min
设置为1时表示发送者在所支持的最低发射功率等级工作。Max
设置为1时表示发送者在所支持的最高发射功率等级工作。
注意:如果min和max都为1,则发送者只有一个固定的发射功率。Delta
为发送者已经为请求的PHY(s)的发射功率等级作出的实际变化,以dB为单位。这个值为有符号的整数值,值为正数时,表示发射功率增加,负数时,表示功率降低,0表示不需要改变。TxPower
为发送者请求的PHY的发射功率等级,单位是dB并且为有符号整数。当设置为127的时候,表示这个值是无效的,当设置为126时,表示发射这没有按照请求的PHY来进行功率等级管理,这种情况下,剩下的所有字段都被忽略掉。APR
(Acceptable Power Reduction)为发送这个PDU的设备可以接受的对端设备设备请求的PHY的最大可降低的发射功率等级。当设置为0xFF时,表示发送者无法确定这个值。
2.4.2.35 LL_POWER_CHANGE_IND
CtrData字段的格式如图2.53所示:
LL_POWER_CHANGE_IND的
CtrData`包括下面5个字段:
PHY
用于表示发射功率的改变发生在哪一个PHYs上面,PHY的对应关系见表2.21,如果其他的字段在上报的PHYs上面有同样的值,那么PHY字段可能存在不止一位为1。Min
设置为1时表示发送者在所支持的最低发射功率等级工作。Max
设置为1时表示发送者在所支持的最高发射功率等级工作。
注意:如果min和max都为1,则发送者只有一个固定的发射功率。Delta
为发送者已经为请求的PHY(s)的发射功率等级作出的实际变化,以dB为单位。这个值为有符号的整数值,值为正数时,表示发射功率增加,负数时,表示功率降低,0表示不需要改变。TxPower
为发送者请求的PHY的发射功率等级,单位是dB并且为有符号整数。当设置为127的时候,表示这个值是无效的,当设置为126时,表示发射这没有按照请求的PHY来进行功率等级管理,这种情况下,剩下的所有字段都被忽略掉。
2.5 固定频率扩展(CTE)及IQ采样
2.5.1 固定频率扩展构造及类型
CTE具有可变的长度,大于等于16us并且小于等于160us,内容为持续的调制信号1的序列并且没有有进行白化。
CTE最开始的4us为guard
周期,接下来的8us为reference
周期,紧接着为一系列依次交换的switch slots
和sample slots
,每一个为1us或者2us长度,由Host定义。2us长的switch和sample slots为强制性支持的选项,1us长的switch和sample slots为可选的支持项。无论如何,如果设备支持1us长的switch 和sample slots,那么它在所有支持CTE的PHYs上面都应该支持这个特性,CTE的结构如图2.54所示:
CTE可以是AoA
和AoD
的其中一种:
注意:这些用到的数据的单位示例见Section 2.4.2.25
2.5.2 CTEInfo 字段
CTEInfo字段为1字节,格式如图2.55:
CTEInfo字段的存在表示这个数据包包含CTE内容。
CTETime字段定义了CTE的长度,单位为8us,CTETime的范围为2-20,其他的值保留做将来使用。
CTEType字段定义了CTE的类型以及switching slots的间隔,具体定义见表2.22,Section 2.5.1
中定义了可能的格式。
2.5.3 发送CTE
当发送包含AoA的CTE的数据包时,发射机不需要切换天线,当发送包含AoD的CTE的数据包时,发射机需要按照Host配置的天线切换模型以及速率进行天线切换(见[Vol 6] Part A, Section 5
)。
支持发送CTE的设备需要至少支持发送16us长的CTE。
2.5.4 IQ采样
当Host要求的时候,接收机在收到包含CTE的有效数据包时进行IQ采样,在收到包含CTE的数据包但是CRC不正确时,也可能进行采样,
本章节的其他部分适用于任何的接收机对数据包进行IQ采样。
当接收到包含AoD的CTE的数据包,接收机不需要进行天线切换。当接收到包含AoA的CTE的数据包,接收机需要按照Host配置的天线切换模型及速率进行天线切换(见[Vol 6] Part A, Section 5
),任何情况下,接收机在reference
周期每1us采样一次,在每个sample slot
中采样一次,因此将会有8个reference
IQ采样值,2us的sample slots情况下有1-37个IQ采样值,1us的sample slots情况下,有2-74个IQ采样值,也就是一共9-82个IQ采样值。Controller上报IQ采样值给到Host,接收机需要采样整个CTE,不管时间长短,除非与其他的活动冲突。
注意:为了获得角度计算的高质量数据,IQ采样在每个IQ采样窗口中需要在同一个采样点采样,这个开始于每个us开始的0.125us以后,到结束前的0.125us(见图2.56)。如果使用2us的sample slots,采样需要在最后一个us中完成(见图2.57)。
支持IQ采样的Controller需要支持测量任意天线接收到的数据包的RSSI并且可以采样任意长度的CTE。
如果控制器没有足够的资源对接收到的所有CTE进行采样,它可以在向Host报告至少一组IQ样本后停止采样,如果Controller停止采样,他需要向Host报告这个情况并在下一个定期广播事件或者连接事件的开始的时候恢复采样。
2.6 同步物理通道PDU
同步物理通道PDU具有16位的帧头,可变大小的payload并且也可以包含一个消息完整性校验字段(MIC)。
同步物理通道PDU格式如图2.58所示:
Header字段和payload字段的内容格式取决于将要用到的同步物理通道PDU类型,当在CIS中使用时,同步物理通道PDU应该为Section 2.6.1
中定义的同步连接PDU,如果在BIS中使用,应该为Section 2.6.2
中定义的同步广播PDU。
MIC
字段需要在所有的在加密后的CIS或BIS上发送的payload长度非0的PDU中包含。MIC的计算方式在Vol6 Part E,Section 1
中定义,MIC字段长度为4字节,并且不能包含在未加密的CIS或BIS 的PDU中或payload长度为0的PDU中。
2.6.1 同步连接PDU
同步连接PDU(CIS PDU
)可以时一个CIS Data PDU
或CIS Null PDU
,CIS Data PDU用于承载同步数据,CIS Null PDU在没有数据需要发送的时候使用。
同步物理通道PDU的同步连接PDU的Header
字段的格式如图2.59所示:
16位的Header
字段中包含的字段如表2.23所示:
- 在CIS Null PDU中的
LLID
字段留作将在使用。 - 下一个期待的序列号(
NESN
)字段的定义参考Section 4.5.9
- 在CIS Data PDU中,序列号(
SN
)的定义参考Section 4.5.9
,在CIS Null PDU中保留做将来使用。 - 同步终止事件(
CIE)字段定义参考
Section 4.5.13.4` - 空PDU指示符(
NPI
)字段在每一个CIS Null PDU中设置。 - 长度字段在CIS Null PDU中需要设置为0。
对于SDUs的分帧的细节,参考Vol 6 Part G,Section 1
2.6.2 同步广播PDU
同步广播PDU(BIS PDU
)可以是BIS Data PDU或者BIG Control PDU,BIS Data PDU用于承载同步数据,BIG Control PDU用于发送BIG的控制信息。
同步物理通道PDU的同步广播PDU的Header
字段格式如图2.60所示:
16位的
Header
字段中包含的字段如表2.24所示:
CSSN
控制子事件序列号字段定义参考Section 4.4.6.7
·CSTF·控制子事件传输标志定义参考Section 4.4.6.7
对于SDUs的分帧的细节,参考Vol 6 Part G,Section 1
2.6.3 BIG Control PDU
BIG Control PDU用于发送BIG里面的控制信息(见Section 4.4.6.7
)。
BIG Control PDU里面的payload字段的格式如图2.61所示:
Opcode字段表示BIG Control PDUs的不同类型,定义见表2.25。
BIG Control PDU的CtrData字段内容根据Opcode字段来决定,在后面的子章节中会进行定义。对于一个给定的Opcode,CtrData字段的长度是固定的。
BIG Control PDU的Length字段(见Section 2.6.2
)不能设置为0,对于给定的Opcode,CtrlData字段的长度是固定的。
CtrData字段中的描述给出了其有效值的范围或对值的其他限制(例如字段X小于字段Y),其他的所有值都留作将来使用,这个范围可能直接或间接的由BIG Control PDU的有关子章节中定义。
除了显式声明外,BIG Control PDU中的CtrData字段中的所有带有整数字段将被认为是无符号数。
如果接收到的BIG Control PDU不支持或者是留作将来使用的,链路层应该忽略掉它。
如果接收到的BIG Control PDU的长度有错误或者CtrData字段是无效的,链路层可以使用数据的特定实现继续BIG Control PDU相关的进程(例如,如果PDU太长,可以忽略掉多余的数据,如果字段超出范围,可以用最接近的允许的值),如果不继续这个进程,则可以忽略掉这个PDU。
2.6.3.1 BIG_CHANNEL_MAP_IND
CtrData字段的格式如图2.62所示:
BIG_CHANNEL_MAP_IND的CtrData包含2个字段:
ChM
字段用于设置通道图来表示用到的和未用到的数据通道,每一个通道根据Section 1.4.1
中的索引定义被视为相应位置上的1个位。这个字段的格式和CONNECT_IND PDU
的ChM字段完全相同(见Section 2.3.3.1
)。Instant
字段用于在通道图生效的时候设置bigEventCounter15-0的值(见Section 4.4.6.3
)。
2.6.3.2 BIG_TERMINATE_IND
CtrData字段的格式如图2.63所示:
BIG_TERMINATE_IND的CtrData包含2个字段:
Reason
字段用于提示同步接收机BIG将要终止的原因。错误信息及列表描述见Vol Part F,Controller Error Codes
。Instant
字段用于在BIG将要被终止的时候设置bigEventCounter15-0的值(见Section 4.4.6.3
)。