BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发生什么?

一:android bt框架

借助ID为iini的群友的android相依框架图
如上图所示,android的框架大概可分为三个层次,最上为application层,其次为bt stack层与具体的硬件层(软件上可以忽略这块)。
application只管调用相关的数据接口进行业务的逻辑,所以整个蓝牙的框架中,最重要,最枯燥的当属于bt stack层。

1.1、host

1.1.1、gatt层

GATT(general attribute layer)用来规范attribute中的数据内容,

1.1.2、GAP

GAP(general) access profile) 主要完成设备的连接请求,连接,以及发起的过程。

1.1.2、att层

ATT(attribuye layer)主要用来解析l2cap层发送而来的数据。

1.1.3、SMP

SMP(security manage profile),主要负责蓝牙的安全性问题。

1.1.4、l2cap层

L2CAP可以比喻成整个蓝牙的数据实际发送区,它不关心数据的内容

1.2、controler

controller层我们主要关心hci层,
hci(host communication interface) 主要负责数据的硬件发送,现在bluedroid主要支持uart,usb这两种接口。

二、实战比喻

一般协议数据的发送各位为:

我们的bluedroid也是采用这种方式。

2.1、广播方式

加入我们需要蓝牙手环已经连接匹配的手机,此时手环需要发送温度传感器的值(0x52)
难道只是减到的bt_write(0x52)就可以直接写入裸流数据到手环的LL层吗? 当然是nonono的了。

2.1.1、蓝牙的通路选择(CID)?

蓝牙一共有56个cid,在复杂的运用环境下,也许就那么几个可用,所以我们需要指定一个可用的cid进行数据发送,这里运用了蓝牙的调频技术,具体大家自由google吧。

2.1.2、手环的数据发送给谁?

这里引入了access address的概念,指明接受者的身份,对于广播方式而言,ID为0x8E89BED6表明这是一个广播方式的蓝牙数据。

2.1.3、手机如何确认这是你发的数据?

这里需要加上一个本身的ID表明你的身份。

2.1.4、如何确认数据传输的有效性?

引入了header来标识我们发送的数据的信息,同事在尾部加上crc校验表明数据传输的有效性、
所以最后发送到手机的裸流数据为:
AA D6BE898E 60 0E 3B75AB2A02E1 02010504FF5900 53 8EC7B2

数据描述 数据
hex数据 AA D6BE898E 60 0E 3B75AB2A02E1 02010504FF5900 53 8EC7B2
headerinformation AA :前导码 8EC7B2:数据crc校验值
目标ID D6BE898E
LL header 0x60
LL length 0E
本身ID 3B75AB2A02E1
数据信息类型(声明广播包) 02010504FF5900
实际发送的数据 53
---------- --------------------------

2.2、连接方式

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  3. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  4. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  5. android 测试 --使用sqlite3查看手机数据库系统
  6. Android静态安全检查(十三):剪切板使用检测
  7. Android批量插入数据到SQLite数据库的方法
  8. Android(安卓)5.0 BLE 周边(BluetoothLeAdvertiser)
  9. Android开发中的一些经验总结

随机推荐

  1. Android通过AudioFocus机制对音频焦点进
  2. Android:Bitmap->Drawble->Byte[]
  3. 关于android studio出现Gradle sync fail
  4. Maven For Android插件安装
  5. android 打开移动数据流程
  6. Android:giraffeplayer2 ConnectExceptio
  7. 设置环境变量
  8. android中实现截屏的三种思路
  9. android常见错误-Installation error: IN
  10. 2011.06.21——— android GridView的拖