搜索
bottom↓
回复: 15

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

[复制链接]

出0入0汤圆

发表于 2014-5-9 19:14:34 | 显示全部楼层 |阅读模式
本帖只求记录,不求回复,记录咱学习的一点一滴。
链路层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或1
2、  不能与广播信道访问地址相同
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_IND
ADV_NONCONN_IND用于不可连接非定向广播事件,具有以下格式:

数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),AdvData中可包含广播者的数据。
2.3.1.4 ADV_SCAN_IND= ADV_DISCOVER_IND
ADV_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_RSP
SCAN_RSP具有以下格式:

数据头中的TxAdd指示了广播者的地址域AdvA是公共地址(TxAdd =0)还是随机地址(TxAdd = 1)。
2.3.3 初始化 PDUs
以下的广播信道PDU类型称为初始华PDUs
CONNECT_REQ 连接请求
连接请求PDU由初始化状态的设备发出,被广播状态的设备接收。
2.3.3.1 CONNECT_REQ
CONNECT_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位的数据头,一个可变长度的负载,还可能包括一个消息完整性校验域。



数据头格式如下

其中有效域定义如下:

非加密连接及数据信道PDU0字节负载长度的加密连接中不包括MIC,数据信道PDU负载不为0的加密连接必须使用MIC.
负载格式由LLID决定,如果LLID = 01b10b,数据信道PDU负载域是一个LL DATA PDU,如果LLID = 11b,数据信道PDU负载域是一个LL CONTROL PDULLID = 00b预留。
数据头的长度字节决定了负载和MIC长度,范围为0-31,如果存在MIC,负载长度最大为27.
2.4.1 LL DATA PDU
LL DATA PDU是数据信道PDU中用于发送L2CAP数据,此时LLID需要被设置为01b10b
如果 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.

CtrDataLL CONTROL PDU的类型决定。
如果接收到的LL CONTROL PDU是不被使用或不支持的,设备将返回LL_UNKNOW_RST PDU。如果接收到的LL CONTROL PDUOpcode是无效的,如设置为预留值,或者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具有以下数据格式:

ChMChM描述了使用和没有使用的数据信道(Usedand Unused data channels),每一个数据信道由一个位表示,数据信道0bit0表示,对应位为0表示信道没有被使用,如果为1表示信道已经被占用,位373839预留使用,由该域查找数据信道索引时,应该注意排除广播信道。
Instant:决定连接时间(connInstant),1-32767
2.4.2.3LL_TERMINATE_IND
PDU具有以下数据格式:



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


Rand:由主机提供的随机数,并使用EDIV(see [Vol. 3] 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_PDUOpcode
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:错误代码,参考[Vol 2] Part D

终于帖完了!以上仅是个人对标准的理解,看文档同时请配合标准一起看,免得被我误导了。
最后,带上个人整理的数据格式定义。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-5-9 19:56:20 | 显示全部楼层
不错,mark

出0入0汤圆

发表于 2014-5-9 20:40:16 | 显示全部楼层
芯片有个手册没有?

出0入0汤圆

发表于 2014-5-9 21:43:59 | 显示全部楼层
mark........

出0入0汤圆

发表于 2014-5-9 22:20:04 来自手机 | 显示全部楼层
楼主,请问有什么资料推荐没,也想学学

出0入4汤圆

发表于 2014-5-9 22:46:29 | 显示全部楼层
坚持把这个系列写下去额

出0入0汤圆

 楼主| 发表于 2014-5-9 22:51:01 | 显示全部楼层
wanqin_008 发表于 2014-5-9 20:40
芯片有个手册没有?

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

出0入0汤圆

 楼主| 发表于 2014-5-9 22:53:20 | 显示全部楼层
wxfje 发表于 2014-5-9 22:20
楼主,请问有什么资料推荐没,也想学学

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

出0入0汤圆

发表于 2014-5-9 23:04:11 | 显示全部楼层
rf_smart 发表于 2014-5-9 22:53
会有的,后面就放出SDK,里面有详细资料。。再等几天,吸引点人气。

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-5-9 23:54:17 | 显示全部楼层
mark、后学习

出0入0汤圆

发表于 2014-5-9 23:55:04 | 显示全部楼层
mark后学习

出0入0汤圆

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

多谢多谢,向你学习

出0入0汤圆

发表于 2014-5-24 16:43:31 | 显示全部楼层
和 BLE 标准协议栈的绝大部分一致!

出0入0汤圆

发表于 2014-6-11 23:52:11 | 显示全部楼层
BLE2 ,mark                             

出0入0汤圆

发表于 2014-6-12 09:25:53 | 显示全部楼层
刘明在此.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 11:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表