rf_smart 发表于 2014-5-9 19:14:34

【昆天科BLE】协议篇1——链路层PARTB_2

本帖只求记录,不求回复,记录咱学习的一点一滴。
链路层PARTB-2 空中接口数据包
2.1数据包格式
链路层只有一种数据包格式,可用于广播信道及数据信道

最短包长为10个字节,最长为47个字节。2.1.1引导码引导码长8位,在接收中用于频率同步,数据速率同步和AGC调整。 在广播通道,引导码为10101010在数据通道,如果访问地址(AccessAddress)最低位为1,引导码为01010101,否则为10101010 2.1.2访问地址访问地址长32位所有的广播信道包访问地址为10001110100010011011111011010110b(0x8E89BED6) 数据信道访问地址必须与其它任何已连接信道访问地址不一样,初始化者在初始化状态产生数据信道访问地址,并保证满足以下要求:1、不能有连续超过6个以上的连接0或12、不能与广播信道访问地址相同3、不能与广播信道访问地址只有1位之差4、数据信道访问地址不能四个字节都相同 5、不能有24位以上的变化6、高6位必须有超过2位以上的变化 2.1.3 PDU在广播与数据信道上有其对应的数据格式 2.1.4 CRC 仅包括PDU的CRC          2.2预留以备用 2.3    广播信道PDU广播信道PDU包括一个16位的数据头及可变长度的负载。


数据头定义如下:

PDU Type决定了PDU的类型
TxAdd:0,表示发送方地址为公共地址;1,表示发送方地址为随机地址RxAdd:0,表示接收方地址为公共地址;1,表示接收方为随机地址Length:负载数据的字节长度,6-37. 2.3.1广播PDU类型ADV_IND 可连接非定向广播事件ADV_DIRECT_IND 可连接定向广播事件ADV_NONCONN_INDI不可连接非定向广播事件ADV_SCAN_IND可扫描非定向广播事件 2.3.1.1 ADV_IND(无目的地广播)ADV_IND用于可连接非定向广播事件中,具有以下格式,
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd = 0)还是随机地址(TxAdd= 1),AdvData中可包含广播者的数据。 2.3.1.2 ADV_DIREC_IND(指定地址广播)ADV_DIREC_IND用于可连接定向广播事件中,具有以下格式:
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),RxAdd决定了在InitA中的地址是公共地址(RxAdd = 0)还是随机地址(RxAdd = 1)。 2.3.1.3ADV_NONCONN_INDADV_NONCONN_IND用于不可连接非定向广播事件,具有以下格式:

数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),AdvData中可包含广播者的数据。 2.3.1.4 ADV_SCAN_IND= ADV_DISCOVER_INDADV_SCAN_INDE用于可扫描非定向广播事件,具有以下格式:


数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),AdvData中可包含广播者的数据。 2.3.2扫描 PDUs下面的广播信道PDU类型称为扫描PDUs,它们用于以下两种状态1、SCAN_REQ:扫描请求,由扫描状态的设备发出,被广播状态的设备接收2、SCAN_RSP:扫描应答,由广播状态设备发出,被扫描状态设备接收 2.3.2.1 SCAN_REQ SCAN_REQ具有以下格式
数据头中的TxAdd指示了扫描者的地址域ScanA是公共地址(TxAdd =0)还是随机地址(TxAdd = 1);RxAdd指示了广播者的地址域AdvA是公共地址(RxAdd = 0)还是随机地址(RxAdd = 1)。 2.3.2.2 SCAN_RSPSCAN_RSP具有以下格式:
数据头中的TxAdd指示了广播者的地址域AdvA是公共地址(TxAdd =0)还是随机地址(TxAdd = 1)。 2.3.3 初始化 PDUs以下的广播信道PDU类型称为初始华PDUsCONNECT_REQ 连接请求连接请求PDU由初始化状态的设备发出,被广播状态的设备接收。 2.3.3.1 CONNECT_REQCONNECT_REQ具有以下格式:
数据头中的TxAdd指示了初始化者的地址域InitA是公共地址(TxAdd = 0)还是随机地址(TxAdd = 1)。
RxAdd指示了广播者的地址域AdvA是公共地址(RxAdd =0)还是随机地址(RxAdd = 1),以上LLData域有如下格式:

LLData由10 个域组成:AA:包括了连接者访问地址(Access Address) CRCInit:连接者使用的CRC运算初始值,是一个随机值 WinSize:决定传输窗口大小(transmitWindowSize),transmitWindowSize = WinSize * 1.25 ms. WinOffset:决定传输窗口偏置值(transmitWindowOffsetvalue),transmitWindowOffset= WinOffset* 1.25 ms. Interval:决定连接间隔(connInterval),connInterval = Interval* 1.25 ms. Latency:决定连接从机等待时间(connSlaveLatencyvalue), connSlaveLatency =Latency. Timeout:决定连接从机超时值(connSupervisionTimeoutvalue),connSupervisionTimeout= Timeout * 10 ms. ChM:ChM描述了使用和没有使用的数据信道(Usedand Unused data channels),每一个数据信道由一个位表示,数据信道0由bit0表示,对应位为0表示信道没有被使用,如果为1表示信道已经被占用,位37,38,39预留使用,由该域查找数据信道索引时,应该注意排除广播信道。 Hop:决定了下一跳增加的数据信道(hopIncrement),该值为一个随机值,范围为5-16。 SCA:决定了主机睡眠系统时钟最大误差(masterSCA)



2.4数据信道 PDU数据信道的PDU包括了一个16位的数据头,一个可变长度的负载,还可能包括一个消息完整性校验域。


数据头格式如下:
其中有效域定义如下:
非加密连接及数据信道PDU中0字节负载长度的加密连接中不包括MIC,数据信道PDU负载不为0的加密连接必须使用MIC. 负载格式由LLID决定,如果LLID = 01b或10b,数据信道PDU负载域是一个LL DATA PDU,如果LLID = 11b,数据信道PDU负载域是一个LL CONTROL PDU,LLID = 00b预留。 数据头的长度字节决定了负载和MIC长度,范围为0-31,如果存在MIC,负载长度最大为27.2.4.1 LL DATA PDULL DATA PDU是数据信道PDU中用于发送L2CAP数据,此时LLID需要被设置为01b或10b。 如果 LLID = 01b,并且数据头的负载长度域为0,则这是一个空PDU。主机的连接可能发送一个空PDU给从机,以允许从机回复任意一个数据信道PDU,包括空PDU. 如果 LLID = 10b,则数据头的负载长度域不能设置为0 2.4.2 LL CONTROL PDU LL CONTROL PDU在数据信道PDU中用于控制链路层的连接。 LL CONTROL PDU具有以下数据格式:
所有LL CONTROL PDU的数据头中的长度域不能为0,所有LL CONTROL PDU都是固定长度,长度由Opcode决定。Opcode决定了不同类型的的LL CONTROL PDU.
CtrData由LL CONTROL PDU的类型决定。 如果接收到的LL CONTROL PDU是不被使用或不支持的,设备将返回LL_UNKNOW_RST PDU。如果接收到的LL CONTROL PDU的Opcode是无效的,如设置为预留值,或者CtrData域是无效值,设备将返回LL_UNKNOW_RST PDU。 2.4.2.1 LL_CONNECTION_UPDATE_REQ该PDU具有以下格式:
WinSize:决定了传输时间窗口时间(transmitWindowSize),transmitWindowSize= WinSize * 1.25 ms. WinOffset:决定了传输时间窗口偏置值(transmitWindowOffsetvalue),transmitWindowOffset = WinOffset * 1.25 ms. Latency:决定连接从机等待时间(connSlaveLatencyvalue),connSlaveLatency = Latency. Timeout:决定连接从机超时值(connSupervisionTimeoutvalue),connSupervisionTimeout= Timeout * 10 ms. Instant:决定连接时间(connInstant),1-32767 2.4.2.2LL_CHANNEL_MAP_REQ该PDU具有以下数据格式:
ChM:ChM描述了使用和没有使用的数据信道(Usedand Unused data channels),每一个数据信道由一个位表示,数据信道0由bit0表示,对应位为0表示信道没有被使用,如果为1表示信道已经被占用,位37,38,39预留使用,由该域查找数据信道索引时,应该注意排除广播信道。 Instant:决定连接时间(connInstant),1-32767 2.4.2.3LL_TERMINATE_IND该PDU具有以下数据格式:



错误代码参考第二卷第四部分 2.4.2.4LL_ENC_REQ该PDU具有以下数据格式:


Rand:由主机提供的随机数,并使用EDIV(see Part H, Section 2.4.4). EDIV:加密域 SKDm:包括了主机会议密钥认证。 IVm:包括了主机初始化向量 2.4.2.5 LL_ENC_RSP该PDU具有以下数据格式:
SKDs:从机会话密钥认证IVs:从机初始化向量 2.4.2.6LL_START_ENC_REQ无数据域2.4.2.7LL_START_ENC_RSP无数据域2.4.2.8LL_UNKNOW_RSP该PDU具有以下数据格式:
UnknownType:其值为接收到的LL_CONTROL_PDU的Opcode值 2.4.2.9LL_FEATRUE_REQ该PDU具有以下数据格式:
FeatureSet:描述了主机所支持的特性集合。 2.4.2.10LL_FEATURE_RSP该PDU具有以下数据格式:
FeatureSet:描述了从机所支持的特性设置 2.4.2.11 LL_PAUSE_ENC_REQ该PDU无数据域 2.4.2.12 LL_PAUSE_ENC_RSP该PDU无数据域 2.4.2.13 LL_VERSION_IND该PDU具有以下数据格式:
VersNr:描述了蓝牙控制器标准的版本CompId:描述了蓝牙控制器制造厂商认证SubVersNr:描述了蓝牙控制器的唯一序列号或蓝牙控制器版本号 2.4.2.14 LL_REJECT_IND该PDU具有以下数据格式:
Error Code:错误代码,参考 Part D
终于帖完了!以上仅是个人对标准的理解,看文档同时请配合标准一起看,免得被我误导了。
最后,带上个人整理的数据格式定义。



cuiliang1984 发表于 2014-5-9 19:56:20

不错,mark

wanqin_008 发表于 2014-5-9 20:40:16

芯片有个手册没有?

机器人天空 发表于 2014-5-9 21:43:59

mark........

wxfje 发表于 2014-5-9 22:20:04

楼主,请问有什么资料推荐没,也想学学

acmilannast 发表于 2014-5-9 22:46:29

坚持把这个系列写下去额

rf_smart 发表于 2014-5-9 22:51:01

wanqin_008 发表于 2014-5-9 20:40
芯片有个手册没有?

芯片手册不单独开放,SDK有API库。

rf_smart 发表于 2014-5-9 22:53:20

wxfje 发表于 2014-5-9 22:20
楼主,请问有什么资料推荐没,也想学学

会有的,后面就放出SDK,里面有详细资料。。再等几天,吸引点人气。

wxfje 发表于 2014-5-9 23:04:11

rf_smart 发表于 2014-5-9 22:53
会有的,后面就放出SDK,里面有详细资料。。再等几天,吸引点人气。

这样呀,那一定支持,那到时有没有BLE协议之类的,在网上好像没找到关于协议的文档

rf_smart 发表于 2014-5-9 23:08:27

wxfje 发表于 2014-5-9 23:04
这样呀,那一定支持,那到时有没有BLE协议之类的,在网上好像没找到关于协议的文档 ...

BLE协议就没有了,主要是芯片的外设驱动API及软件编程说明。协议就靠标准了,我的协议篇都是翻译标准的,准备把LL层翻译PARTB翻译完。
后面看看GAP和GATT。GAP和GATT是用户写应用程序最相关的,个人觉得看看LL层,可以理解更深一些。我也是初学,不要以我的为准。{:lol:}

淋湿的鸡毛 发表于 2014-5-9 23:54:17

mark、后学习

淋湿的鸡毛 发表于 2014-5-9 23:55:04

mark后学习

wxfje 发表于 2014-5-10 08:31:26

rf_smart 发表于 2014-5-9 23:08
BLE协议就没有了,主要是芯片的外设驱动API及软件编程说明。协议就靠标准了,我的协议篇都是翻译标准的, ...

多谢多谢,向你学习

jonyes 发表于 2014-5-24 16:43:31

和 BLE 标准协议栈的绝大部分一致!

shin555 发表于 2014-6-11 23:52:11

BLE2 ,mark                           

zhuyi 发表于 2014-6-12 09:25:53

刘明在此.
页: [1]
查看完整版本: 【昆天科BLE】协议篇1——链路层PARTB_2