BLE蓝牙设备开发

(ps. 根据网上的知识进行的学习总结)

1、蓝牙模块概述

1.1 蓝牙模块

蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。

蓝牙分为三种:Bluetooth Smart Ready、Bluetooth Smart(Smart是低功耗蓝牙的标识)以及标准 Bluetooth。基本上来说,Bluetooth Smart Ready适用于任何双模蓝牙4.0的电子产品;Bluetooth Smart是应用在心率监视器或计步器等使用扭扣式电池并传输单一的装置;Bluetooth Smart Ready的相容性最高,可与Bluetooth Smart及标准蓝牙相通,标准蓝牙则无法与Bluetooth Smart相通。

蓝牙的系统构成如图1.1所示,其中线射频单元(Radio)负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线;基带或链路控制单元(Link Controller)进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程;链路管理单元(Link Manager)负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作;图中的紫色部分为蓝牙软件协议。
图1.1 蓝牙系统构成
图1.1 蓝牙系统构成

BLE是Bluetooth Low Energy的缩写,又叫蓝牙4.0,区别于蓝牙3.0和之前的技术,主要用于实现移动智能终端与周边配件之间的持续连接,是功耗极低的短距离无线通信技术,并且有效传输距离被提升到了100米以上,同时只需要一颗纽扣电池就可以工作数年之久。BLE设备分单模和双模两种,双模简称BR,单模简称BLE或者LE,双模兼容传统蓝牙,可以和传统蓝牙通信,也可以和BLE通信,常用在手机上,单模只能和BR和单模的设备通信,不能和传统蓝牙通信,由于功耗低,待机长,所以常用在手环的智能设备上。

Beacon是基于BLE技术实现的物理设备,能够使用BLE技术向周围发送自己“特有的ID”,接收到该ID的应用软件会根据接收到的ID和信号源产生互动。不同功率Beacon设备的信号范围在10m~100m不等,当智能平板或其他设备进入信号范围后,能够与Beacon设备进行交互通信。

1.2 蓝牙广播包

蓝牙模块发送数据、被其他蓝牙设备发现都依赖于广播包,接下来对BLE报文进行介绍。

BLE报文的结构如图1.2所示,由图中的几个域构成,对于多字节的域,在传输时遵循字节序和比特序:(1)字节序:大多数多字节域是从低字节开始传输的;(2)比特序:各个字节传输时,每个字节都是从低位开始。
图1.2 BLE报文结构
在这里插入图片描述

图1.2 BLE报文结构

(1)前导:8bit的交替序列,为01010101或10101010,接收机可以根据前导的无线信号强度来配置自动增益控制,确定“0”、“1”比特所使用的频率。

(2)接入地址:
接入地址包括广播接入地址和数据接入地址。广播接入地址固定为0x8E89BED6;数据接入地址是一个随机值,不同的连接有不同的值。数据接入地址有以下几个原则: 数据接入地址不能超过6个连续的0或1;数据接入地址的值不能与广播接入地址相同;数据接入地址的4个字节的值必须互补相同;数据接入地址不能有超24次的比特翻转;数据接入地址的最后6个比特需要至少两次的比特翻转。符合上面条件的有效随机数据接入地址大概有231个。

(3)PDU(协议数据单元)
PDU的报头包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。

广播报文类型共有7种:ADV_IND:通用广播指示;ADV_DIRECT_IND:定向连接指示;ADV_NONCONN_IND:不可连接指示;ADV_SCAN_IND:可扫描指示;SCAN_REQ:主动扫描请求;SCAN_RSP:主动扫描响应;CONNECT_REQ:连接请求。

发送地址类型和接收地址类型指示了设备使用公共地址(Public Address)还是随机地址(Random Address)。公共地址和随机地址的长度为6个字节,BLE设备至少要拥有这两种地址类型中的一种,也可以同时拥有两种地址类型。
PDU长度包括6bit净荷长度和2bit保留位。对于广播报文,长度域包含6个比特,有效值的范围是“6 ~ 37”;对于数据报文,长度域包含5个比特,有效值的范围是“0 ~ 31”。广播报文除了最多31个字节的数据之外,还要包含6个字节的广播设备地址,报文长度最多为37个字节,因此有效值的范围是“6 ~ 37”。

PDU的数据字段结构如图1.3所示,由有效数据部分和无效数据部分组成。
图1.3 广播和扫描响应的数据格式
图1.3 广播和扫描响应的数据格式

数据报文的有效数据部分包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成。AD Type的类型定义在SDK的hci_stru.h中,如下图所示:
图1.4 AD Type类型定义
图1.4 AD Type类型定义

BLE采用的是24位CRC校验。CRC对报头、长度和数据进行计算。24位CRC的生成多项式如下:
校验

2、BLE协议栈分层

2.1 协议栈分层介绍

BLE协议栈中的重点则是与具体蓝牙应用相关的GAP和GATT层。
如图3.1为协议栈的分层示意图,其中Physical Layer为物理层,“通信介质”的定义是由物理层负责;Link Layer:负责在这些物理介质上收发数据,与此同时,控制物理介质收发相关的参数,可在两个设备之间建立用于点对点通信的Logical Channel;HCI用于定义Host和Controller之间的通信协议。

在Host层中,L2CAP负责将Logical Channel分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用;
ATT能够将温度、电量等数据以“Attribute”的形式抽象出来,提供方法供远端设备读取、修改这些属性的值;
GAP定义了蓝牙设备如何发现和建立与其他设备的安全或不安全的连接,其中具体包括:设备发现,创建连接,终止连接,安全结构的初始化和设备连接参数配置等;
GATT是一个在蓝牙连接之上的发送和接收数据的通用规范。
图3.1 BLE协议栈分层示意图
图2.1 BLE协议栈分层示意图

2.2 GATT层

GATT层可以说是一个profile framework,包含多种服务,其中profile的结构如图所示,其内部定义了蓝牙设备需要提供的服务,每个Service包含一个或者多个Characteristic(特征),Characteristic则是GATT profile中最基本的数据单位,由一个Properties、一个Value、一个或者多个Descriptor组成。Properties定义了characteristic的Value如何被使用,以及Descriptor如何被访问,Characteristic Value是特征的实际值,Characteristic Descriptor则保存了一些和Characteristic Value相关的信息。
在这里插入图片描述

3 蓝牙协议栈开发

实际上BLE蓝牙设备的开发也就是对BLE协议栈的开发。
我们需要在GAP层定义蓝牙设备发出的广播包信息、广播频率、超时时间、发射功率、蓝牙MAC地址、设备SN码等信息,在GATT层配置服务的UUID、不同服务的数据收发profile规范配置。
下面这张图就是对某一个蓝牙设备定义的不同蓝牙服务,可以进行数据的上行和下行,采用128位UUID。
在这里插入图片描述

4 参考学习网站

蓝牙网

Beacon浅析

[蓝牙] 1、蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)

简文介绍蓝牙Beacon和蓝牙网关的区别及工作原理

蓝牙beacon入门教程

蓝牙3-GATT

蓝牙信标beacon是怎么实现商场室内定位及优惠推送

浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

Android BLE学习笔记

The 16-bit UUID Numbers

低功耗蓝牙BLE之广播

BLE(5)—— 广播态数据包组成(Advertising Packets PDUs)

蓝牙4.0BLE抓包(二) – 广播包解析

独立按键消抖与松手检测

一文读懂蓝牙低功耗BLE的应用市场

深入浅出低功耗蓝牙(BLE)协议栈

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C BLE蓝牙开发是指使用C语言进行蓝牙低功耗(Bluetooth Low Energy,简称BLE设备开发的过程。BLE蓝牙技术被广泛应用于各种智能设备,包括智能手表、智能手机、健康监测设备等。使用C语言进行BLE蓝牙开发具有以下几个重要的方面。 首先,在C BLE蓝牙开发中,开发者需要了解蓝牙通信协议和BLE协议栈。蓝牙协议规定了通信的标准和数据格式,而BLE协议栈是处理BLE通信的软件层次。C语言可以提供底层的控制和操作,实现与BLE协议栈的交互。 其次,C BLE蓝牙开发需要使用特定的蓝牙开发工具和SDK(软件开发工具包)。开发者可以使用C语言编写代码,通过SDK提供的接口实现与蓝牙设备的连接、数据传输和控制等功能。这些工具和SDK通常由蓝牙芯片厂商提供,开发者可以根据具体的硬件平台选择适合的工具和SDK。 此外,C语言具有高效性和跨平台的特点,在蓝牙开发中也有广泛的应用。通过使用C语言编写的代码,开发者可以利用底层硬件的资源和功能,提高系统的性能和响应速度。同时,C语言也可以在不同的操作系统和开发环境下进行编译和运行,使得BLE蓝牙开发具有更好的灵活性和可移植性。 综上所述,C BLE蓝牙开发是一种使用C语言进行蓝牙低功耗设备开发的方法。它需要对蓝牙通信协议和BLE协议栈有一定的了解,同时使用特定的蓝牙开发工具和SDK进行开发。C语言的高效性和跨平台特性使得BLE蓝牙开发更加灵活和可移植。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淮杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值