在initial阶段我们看到了大量的hci command和hci event的交互,controller在init结束后完成了初始化,状态也变成了HCI_INIT_DONE。

接下来就要进入一个叫做GAP的profile,GAP这个profile和其他profile的明显区别是,其他profile都是基于l2cap的,而gap不是。

我们先看一下gap的定义:

GAP,Generic Access Profile,该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接

GAP定义了蓝牙设备如何发现和建立与其他设备的安全/不安全连接
它处理一些一般模式的业务(如询问、命名和搜索)和一些安全性问题(如担保)
同时还处理一些有关连接的业务(如链路建立、信道和连接建立)

GAP规定的是一些一般性的运行任务;因此,它具有强制性,并作为所有其它蓝牙应用规范的基础

Gap之所以会叫做profile,因为他其实也是一种应用。

举个实例,我们手机上的蓝牙,都是需要进入蓝牙设置菜单,打开可配对,然后 进入可以被其他蓝牙设备发现的状态的。这个时候,其实就是调用了gap的接口。

我们这次的抓包,也就是从initial完成后,这一条命令开始正式进入gap阶段。

基本上一个屏幕已经放不下了,因为GAP层涉及到的东西包括发现、连接、鉴权、加密等内容,展开讲还是非常多的。

作为controller来讲,这个时候和initial的第一阶段相比,最大的不同,是开始和外界交互了。

我们可以看一下空中包的情况。

如图所示,空中出现了大量的LMP包,所谓LMP包,其实就是红线标识的ACL-C包。这些LMP包的内容其实都是controller的行为,上层是不清楚的,上层在这一阶段的参与,主要是向controller发送命令,让controller进入某种状态,可配对、可连接、读取远程设备信息、加密…等等。

而这个阶段之后,其他profile开始工作的时候,host的参与感就更强了,可以看到红框下面的那些包,都是l2cap层以上的包,这些包都是从host层通过hci acl data接口下发给controller,由controller通过 ACL –U包这种格式发给远端的。

说到ACL-C\ACL-U, 这个阶段,我们有必要讲一下蓝牙数据包的格式了。

看一下下图,我记得有次面试的时候,有个面试官专门问了我蓝牙数据包的格式,这个虽然说协议规范中都有,但是搞蓝牙的人,如果背不出来,也是要被鄙视的。

首先是access code,其中包含了PA,preamble,基本上无线通信不可或缺的东西,含包括了SYNC WORD,SYNC WORD中间就隐含了蓝牙地址在里面,我们知道现在无线环境复杂,空中包那么多,我们怎么知道哪些包是我们需要的呢,就是根据蓝牙地址,很多垃圾信息,在access code就可以过滤掉了。

下图是access code的格式:

然后是Packet header,packet header主要包括Lt_addr, 这个地址用来区分slave设备的,然后包的格式,包括DM1、2DH3、2EV3等各种格式的,不同格式的编码效率、抗干扰性都不相同,基带会根据环境自动选取合适的格式去发送数据包

然后流控,ARQ(问答机制),序列号等内容,最后是一个HEC校验码

在packet header后面有一个guard同步,因为如果是edr的话,前后的调制方式是不一样的,需要重新同步一下。

然后是payload header,我们这里只讨论acl包,(sco包不讨论)上文提到了包格式就在这里面的LLID包含了,其实LLID也无外乎两种包格式,一种是LMP-C,一种是LMP-U,只不过这里的LMP-U涉及到分包的内容,我们也知道l2cap层支持分包,主要的实现就是在LLID中去标识是start包还是continous包。注意这个payload header和header都有一个流控位,很容易搞混,具体的内容我们下文讲。

再后面就是payload body了,这个就完完全全是我们上层协议发下去的东西了。

controller在接收数据包的时候,首先是在预定的接收slot上,按照预定的调频序列打开RF,假如收到access code的话,判断蓝牙地址,如果不是发给我们的,直接过滤,接着接收packet header,其中有HEC校验,如果校验不通过,又直接过滤,然后调整RF,接收payload,payload最后是有crc校验的,如果crc不通过的话,又会被过滤掉,所以最后controller上传给host的数据包是经过了千山万水辛苦达到的,是可靠的。

蓝牙开发那些事儿(3)——看看空中包相关推荐

  1. 蓝牙开发那些事儿(10)——初识BLE

    其实LE和BR/EDR完全是两种不同的东西,物理层的channel数减少了一半,AFH调频算法有了新的改进, 应用场景也不同,LE主要是应用于物联网,所以从设计上来讲,有以下考虑: 功耗低,数据量少, ...

  2. 【蓝牙开发】Android BLE中广播包发射功率(TX power level)

    2022/01/02 输出! https://blog.csdn.net/love131452098/article/details/118486691 https://support.huawei. ...

  3. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  4. 使用Ellisys抓取蓝牙空中包

    Ellisys 工具 本地使用的Ellisys vanguard 版本.对应的软件下载地址Ellisys vanguard download 是需要填写公司信息,软件本身是免费的.注意如果别人有现成的 ...

  5. 低功耗蓝牙开发入门概念科普

    一.概述 1.缘起 低功耗蓝牙起源于Bluetooth4.0版本,至今已发展到5.3 4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型,后面版本主要退出新特 ...

  6. ESP32 蓝牙开发

    1. 低功耗蓝牙(BLE)协议栈 低功耗蓝牙协议是蓝牙通信协议的一种,BLE协议栈就是实现低功耗蓝牙协议的代码 1.1 层次协议 蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth ...

  7. 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.蓝牙综合介绍 3.精华文章汇总 4.结语 1.前言 大家好,我是董哥 ...

  8. [转]Android蓝牙开发浅谈

    转自:http://www.eoeandroid.com/thread-18993-7-1.html 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少    ...

  9. Android蓝牙开发

    一.配置权限 AndroidManifest.xml里加入权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_A ...

最新文章

  1. 计算机学院 储昭坤,我校在“展航杯”安徽省大学生信息安全作品赛荣获佳绩...
  2. UNIGUI下载文件
  3. windows做软件界面
  4. python ocr识别身份证_Python+opencv+pytesseract实现身份证号码识别
  5. CMMI体系建设的目的和意义
  6. 现国内基金定投最好的入门书《指数基金投资指南》
  7. android 谷歌上传appid,Android之获取AppId
  8. “被授权”泛滥 个人信息保护怎么管?
  9. 怎样把QQ群降级(1000人降到200或500人,500人降到200)
  10. Cell Ranger count (gene expression) 输出文件解读
  11. 数据结构——数组以及n维数组
  12. 第46讲 Android Camera2 API AWB自动白平衡
  13. 【多模态】多模态摘要简述
  14. 关于Netty中的Recycler对象池
  15. uni.getLocation(Object)获取经纬度和当前中文地址
  16. 巧用友盟UShare、ULink玩转裂变营销
  17. scrum立会报告+燃尽图(第三周第五次)
  18. 网站流量统计与网站访问分析
  19. vue 获取id元素_.vue组件中获取DOM元素问题
  20. 最新卡巴杀毒软件,可以免费升级哦,卡巴斯基激活码(2007年4月23号更新)

热门文章

  1. 越狠越有饭吃,越不狠越没饭吃
  2. 恶意访问、黑产猖獗,如何做好业务安全“守门人”?丨创新场景50
  3. 设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
  4. Android增强现实(三)-3D模型展示器
  5. Java实现家谱家族管理系统,图形化家谱家族树,单机应用程序
  6. 大数据基础(林子雨版)
  7. 华为服务器安装系统流程图,华为a安装手册.docx
  8. NLP-准确率、精确率、召回率和F1值
  9. 常见数据库id号编码
  10. CSS3知识点笔记————基础(五星)