BLE基础知识(三)

简介: 经过前面两篇《BLE基础知识(一)》《BLE基础知识(二)》之后,我们对BLE有了基本的了解。我们平时用到比较多的GATT了。接着上篇来继续看看!!

前言

经过前面两篇《BLE基础知识(一)》《BLE基础知识(二)》之后,我们对BLE有了基本的了解。我们平时用到比较多的GATT了。接着上篇来继续看看!!


UUID

UUID就是通用唯一标识符。上一篇我们提到的Service (服务),Characteristic (特征),Descriptor (描述符) 等都有自己的UUID。因为一个设备肯定会有很多个服务,一个服务中也会包含多个特征,一个特征也可以包含多个描述符。那怎么来区分它们呢? 所以就需要UUID来进行标识区分了。


蓝牙对UUID 格式定义都有三种: 16bit UUID、32bit UUID、128bit UUID


16bit 和 32bit 的 UUID 与 128bit 的值之间转换关系:

128_bit_UUID=16_bit_UUID*2^96+Bluetooth_Base_UUID128_bit_UUID=32_bit_UUID*2^96+Bluetooth_Base_UUID

其中 Bluetooth_Base_UUID 定义为 00000000-0000-1000-8000-00805F9B34FB

上面的计算公式太复杂,我们用下面的方式记比较简单。


若 16 bit UUID为xxxx,那么 128 bit UUID 为 0000xxxx-0000-1000-8000-00805F9B34FB

若 32 bit UUID为xxxxxxxx,那么 128 bit UUID 为 xxxxxxxx-0000-1000-8000-00805F9B34FB


蓝牙联盟已经将某些UUID分配给一些公司或服务使用了。可以参考下面官方链接。

https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf

当然了,即使被分配了,我们也可以使用,只是如果做成市场产品就要小心,可能会跟别人的冲突,出现不兼容等情况。


空口数据包

空口数据包就是在空中传输的数据包。它是最完整的数据包,一般只有抓包分析问题才会需要了解这些知识。

空口数据包有两种格式:

  • LE Uncoded PHY (1M和2M)
  • LE Coded PHY
    一种有编码,一种没有编码的。

我们先只看看未编码的格式:

20210622194900860.png

无论是广播数据包还是普通数据包,它们的空口数据包格式是一样的。区别在于Access-Address和PDU的内容不同。


1. Preamble

前导码用来同步接收端和发送端的,1M PHY使用1个字节, 2M PHY使用2个字节。前导码是0和1交替的固定顺序,前导码的第一个bit要和接入地址的最低位(小端)一样,所以前导码第一个bit是由接入地址决定的。

image.png

2. Access-Address

4个字节,用来标示接收者ID或者空中包身份。它和设备地址(48bit)是不一样的,不要混淆。

根据接入地址的不同,可以区分两种Packet类型:广播包和数据包:

广播包接入地址固定为0x8E89BED6

数据包接入地址为一个32bit的随机值,由Initiator生成。


3. PDU

2~258个字节,真正的数据内容。


4. CRC

3个字节的CRC校验





相关文章
|
XML 物联网 API
Android Ble蓝牙App(五)数据操作
Android Ble蓝牙App(五)数据操作
2150 0
|
物联网
低功耗蓝牙(BLE)设备常用的4种角色
对于主从设备的其它说法,大家需要了解一下。对于Central和Peripheral有多种说法,上面我们说的是主从,还有客户端/服务端,中心设备/外围设备,我们这里简单介绍一下,客户端(Client)对应上面的Central,接收数据;服务端(Server)对应上面的额Peripheral,提供数据,这个需要和网站的服务器/客户端区别一下;中心设备(Central)和外围设备(Peripheral),其实上面叫中心设备和外围设备。上面主设备(Master)和从设备(Slave)应该对应主/从。这个根据个人习惯,主/从用的比较多,如果在蓝牙中提到这些知道就行了。
1865 0
|
并行计算 PyTorch 算法框架/工具
yolov5训练太慢的解决方案
这篇文章讨论了YOLOv5训练速度慢的问题,并提供了解决方案,主要是由于没有安装CUDA和支持GPU的PyTorch版本,导致只有CPU在工作。文章建议安装CUDA和正确配置支持GPU的PyTorch以加速训练过程。
1361 1
yolov5训练太慢的解决方案
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
9481 5
一文带你认识蓝牙 GATT 协议
|
算法 网络协议 物联网
|
API Android开发 容器
36. 【Android教程】侧滑菜单:DrawerLayout
36. 【Android教程】侧滑菜单:DrawerLayout
602 1
|
安全 物联网
BLE基础知识(一)
前面通过《蓝牙基础知识(一)》和《蓝牙基础知识(二)》两篇,我们了解了一些蓝牙的基本概念。之前说过蓝牙分为BR/EDR和BLE,接下来,我们先来看看BLE的内容。
|
物联网 Android开发
【Android App】发送BLE广播及通过主从BLE实现聊天应用讲解及实战(附源码和演示 超详细)
【Android App】发送BLE广播及通过主从BLE实现聊天应用讲解及实战(附源码和演示 超详细)
3433 1
|
存储 机器学习/深度学习 人工智能
云计算巨头之争:AWS、Azure和Google Cloud的综合对比与选择指南
本文详细比较了三大云计算平台AWS、Azure和Google Cloud在性能、可靠性、服务覆盖范围、定价策略以及生态系统等方面的优势和劣势。通过对这些关键因素的分析,读者将能够更好地理解各个平台的特点,并为自己的业务选择最合适的云计算平台。
1657 0
|
传感器 Ubuntu 物联网
ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)
在我们前面 ESP32-C3 的教程中,从基本的外设,到wifi,到最后使用MQTT连接云平台完成了一个 简单的项目,我们已经掌握了ESP32-C3 的大部分功能了。 但是作为一款蓝牙芯片,蓝牙的使用是必不可少的,今天我们就开始对 ESP32-C3 蓝牙的使用进行学习测试。 蓝牙部分已经不敢叫教学了,为了搞清楚ESP-IDF的那些示例程序到底是关于什么内容, 因为自己也是边学习边测试花了大量时间补充蓝牙的基本知识,希望小伙伴指出不足之处! ...更新说明,ESP32-C3只支持BLE
4761 2
ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)