【全志T113-S3_100ask】12-1 Linux蓝牙通信实战(BLE简介)

背景

xr829器件描述:
802.11b/g/n,带宽HT20和HT40,蓝牙BR/EDR BLE4.2,SDIO 2.0,
电源3.0~5.5V,封装QFN40 5mm x 5mm
在这里插入图片描述
@更多规格参考:https://bbs.16rd.com/thread-537948-1-1.html

在100ask的buildroot集成了xr829的wifi和蓝牙驱动,经测试正常。
本章将从0入门学习BLE蓝牙实战。在开始之前先认识一下BLE。

(一)经典蓝牙与BLE蓝牙

1、区别

  • 蓝牙无线通讯技术是一种短距离的通讯技术,可以让固定设备和移动设备之间进行数据交换。
  • 我们一般将蓝牙3.0之前的BR/EDR蓝牙称之为传统蓝牙,而将蓝牙4.0规下的BLE蓝牙称之为低功耗蓝牙
    在这里插入图片描述

低功耗蓝牙也是建立在传统蓝牙的基础上发展起来的,其区别于传统蓝牙的最大区别就是成本和功耗的降低,应用于实时性要求比较高。

(二)BLE简介

1、介绍

BLE(Bluetooh Low Energy)蓝牙BLE技术是一种短距离、低成本、可互操作性的无线技术,它利用许多的智能手段最大限度地降低其功耗。

BLE技术的工作模式非常适用于微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常小(通常也就几个字节),而且发送的次数也很少(例如每秒几次到每分钟一次,甚至更少)。

2、BLE协议栈的结构和配置

1)协议有两个部分组成:Controller和Host

2)Profiles和应用总是基于GAP和GATT之上

3)在单芯片方案中,Controller和Host,profiles,和应用层都在同一片芯片中

4)在网络控制器模式中,Host和Controller是在一起运行的,但是应用和profiles在另外一个器件上,比如PC或者其他微控制器,可以通过UART,USB进行操作

5)在双芯片模式中,Controller运行在一个控制器,而应用层,profiles和Host是运行在另外一个控制器上

@本小节转自 蓝牙和BLE蓝牙分别是什么

(三)BLE蓝牙优势

1、BLE蓝牙模块功耗更低、供电时间长

因为低功耗蓝牙技术已经发展到日常平均功耗可以做到10mA以下了,如此低功耗蓝牙应用在智能产品中,用体积很小的电池供电就能坚持工作一两年甚至更久,相对其它无线技术和经典蓝牙的功耗,这正是智能产品愿意且中意的通信技术。
在这里插入图片描述
上图为示例,不同蓝牙参数不一样

2、低功耗蓝牙模块连接速度快

低功耗蓝牙技术采用非常快速的连接方式,连接时间间隔可变,这个间隔根据具体应用可以设置为几毫秒到几秒不等,几乎瞬间就能与智能手机相连,极大缩短等待的时间。

3、低功耗蓝牙模块使用免执照频段

因为低功耗蓝牙技术是一种免费的电磁频段,低功耗蓝牙运行的2.4GHz的频段,正是完全免费的一个电磁频段,其它例如WiFi、电磁炉等都是使用的2.4GHz的频段,就是因为这个频段不用向无线电管理部门交专门的授权费用。

4、低功耗蓝牙模块操作简单,更适合智能产品

一款内嵌低功耗蓝牙模块的智能产品能直接连到手机上,相对于市面上其它通讯手段,例如433MHz、ZigBee来说,虽然这些通讯技术也很成熟、传输距离也不错,但是它们并没有在智能手机上有所体现,而蓝牙功能基本是智能手机的标配之一了,匹配操作起来根本无需其它终端设备,由此来说智能产品选择蓝牙技术的原因就是终端市场的认可。

@本节转自 低功耗蓝牙(BLE)的三大优势以及它和经典蓝牙的区别

以下为重点内容!

(四)BLEGATT规范中关于UUID与属性的详细解析

1、⾓⾊

除了GAP定义了⾓⾊之外,BLE还定义了另外2种⾓⾊:GATT服务器和GATT客户端

它们完全独⽴于GAP的⾓⾊。提供数据的设备称为提供数据的设备称为GATT服务器,访问GATT服务器⽽获得数据的设备称为GATT客户端
以LED Button应⽤为例,外围设备(带有LED和按键)作为服务器,集中器作为客户端。
注意:⼀个设备可以同时作为服务器和客户端。

2、GATT层

GATT层是传输真正数据所在的层。
⼀个GATT服务器通过⼀个称为属性表属性表的表格组织数据,这些数据就是⽤于真正发送的数
据。

2.1 属性

  • ⼀个属性包含句柄、句柄、UUID(类型)、值,句柄是属性在GATT表中的索引,在⼀个设备中每⼀个属性的句柄都是唯⼀的。
  • UUID包含属性表中数据类型的信息,它是理解属性表中的值的每⼀个字节的意义的关键信息。
  • 在⼀个GATT表中可能有许多属性,这些属性能可能有相同的UUID。

2.2 特性

⼀个特性⾄少包含2个属性:⼀个属性⽤于声明,⼀个属性⽤于存放特性的值。

所有通过GATT服务传输的数据必须映射成⼀系列的特性,可以把特性中的这些数据看成是服务传输的数据必须映射成⼀系列的特性
⼀个个捆绑起来的数据,每个特性就是⼀个⾃我包容⽽独⽴的数据点。例如,如果⼏块数据总是⼀起变化,那么我们可以把它们集中在⼀个特性⾥。
以LED Button应⽤为例,外围设备(带有LED和按键)作为服务器,集中器作为客户端。
在LED Button服务中,LED和按键之间没有任何联系,⽽且它们可以各⾃独⽴地改变,因此,可以让它们成为独⽴的特性,所以我们⽤⼀个特性表⽰当前按键的状态,⽤另⼀个特性⽤来所以我们⽤⼀个特性表⽰当前按键的状态,⽤另⼀个特性⽤来表⽰当前LED的状态。

2.3描述符

  • 任何在特性中的属性不是定义为属性值就是为描述符。描述符是⼀个额外的属性以提供更描述符是⼀个额外的属性以提供更多特性的信息,它提供⼀个⼈类可识别的特性描述的实例。
  • 然⽽,有⼀个特别的描述符值得特别地提起:客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),这个描述符是给任何⽀持通知或指⽰功能的特性额外增加
    的。
  • 在CCCD中写⼊“1”使能通知功能,写⼊“2”使能指⽰功能,写⼊“0”同时禁⽌通知和指
    ⽰功能。

2.4服务

⼀个服务包含⼀个或多个特性,这些特性是逻辑上相关的集合体。
GATT服务⼀般包含⼏块具有相关的功能,⽐如特定传感器的读取和设置,⼈机接⼝的输⼊输出。组织具有相关的特性到服务中组织具有相关的特性到服务中既实⽤⼜有效,因为它使得逻辑上和⽤户数据上的边界变得
更加清晰,同时它也有助于不同应⽤程序间代码的重⽤。GATT基于蓝⽛技术联盟(SIG)官⽅⽽
设计,SIG建议根据它们的规范设计⾃⼰的profile。
对于LED Button应⽤例程,因为不关⼼它们的重⽤,所以把LED特性和按键特性放到了⼀个
服务中。

2.5 profile(数据配置⽂件)

⼀个profile⽂件可以包含⼀个或者多个服务,⼀个⽂件可以包含⼀个或者多个服务profile⽂件包含需要的服务的信息或者为对等设备如何交互的配置⽂件的选项信息。设备的GAP和GATT的⾓⾊都可能在数据的交换过程中改变,因此,这个⽂件应该包含⼴播的种类、所使⽤的连接间隔、所需的安全等级等信息。
需要注意的是:⼀个profile中的属性表不能包含另⼀个属性表。

2.6 标准的定制服务和特性

蓝⽛技术联盟(SIG)已经定义⼀些profile、服务、特性和根据协议栈的GATT层定义的属性。
但是,协议栈中只实现了⼀部分应⽤的BLE服务,那就意味着,只要协议栈⽀持那就意味着,只要协议栈⽀持GATT,就可能为⼀个应⽤建⽴⼀个它需要的profile和服务。
既然在⼀个应⽤中可以⽀持profile和服务,那么就可以在这个应⽤中建⽴⼀个定制的服务。

2.7 UUID

“GATT层”中定义的所有属性都有⼀个UUID值,UUID是全球唯⼀的128位的号码,它⽤来识别
不同的特性。

2.7.1 蓝⽛技术联盟 UUID

蓝⽛核⼼规范制定了两种不同的UUID,⼀种是基本的UUID,⼀种是代替基本UUID的16位
UUID。
所有的蓝⽛技术联盟定义UUID共⽤了⼀个基本的UUID:
0x0000xxxx-0000-1000-8000-00805F9B34FB

为了进⼀步简化基本UUID,每⼀个蓝⽛技术联盟定义的属性有⼀个唯⼀的,每⼀个蓝⽛技术联盟定义的属性有16位UUID,以代替上⾯的基本UUID的‘x’部分。例如,⼼率测量特性使⽤⼼率测量特性使⽤0X2A37作为它的16位UUID,因此它完整的128位UUID为:
0x00002A37-0000-1000-8000-00805F9B34FB

虽然蓝⽛技术联盟使⽤相同的基本UUID,但是16位的UUID⾜够唯⼀地识别蓝⽛技术联盟所定
义的各种属性。
蓝⽛技术联盟所⽤的基本UUID不能⽤于任何定制的属性、服务和特性。对于定制的属性,必对于定制的属性,必须使⽤另外完整的128位UUID。

2.7.2 供应商特定的UUID

SoftDevice 根据蓝⽛技术联盟定义UUID类似的⽅式定义UUID:先增加⼀个特定的基本UUID,再定义⼀个16位的UUID(类似于⼀个别名),再加载在基本UUID之上。这种采⽤为所有的定制属性定义⼀个共⽤的基本UUID的⽅式使得应⽤变为更加简单,⾄少在同⼀服务中更是如此。

使⽤软件nRFgo Studio⾮常容易产⽣⼀个新的基本UUID:
例如,在LED BUTTON⽰例中,采⽤0x0000xxxx-1212-EFDE-1523-785FEABCD123作为基
本UUID。

蓝⽛核⼼规范没有任何规则或是建议如何对加⼊基本UUID的16位UUID进⾏分配,因此你可以
按照你的意图来任意分配。
例如,在LED BUTTON⽰例中,0x1523作为服务的UUID,0x1524作为LED特性的
UUID,0x1525作为按键状态特性的UUID。

2.8 空中操作和性质

⼤部分的空中操作事件都是采⽤句柄句柄来进⾏的,因为句柄能够唯⼀识别各个属性句柄能够唯⼀识别各个属性。如何使⽤特性依据它的性质,特性的性质包括:
1)写
2)没有回应的写
3)读
4)通知
5)指⽰

2.8.1 写和没有回应的写

写和没有回应的写允许GATT客户端写⼊⼀个值到GATT服务器的⼀个特性中。它们之间不同的地⽅在于没有回应的写事件没有任何应⽤层上的确认或回应。

2.8.2 读

读性质表明⼀个GATT客户端可以读取在GATT服务器中特性的值。

2.8.3 通知和指⽰

通知和指⽰性质允许GATT服务器在其某个特性改变的时候对GATT客户端进⾏提醒,通知和指通知和指
⽰之间不同之处在于指⽰有应⽤层上的确认,⽽通知没有。

@以上内容摘自 百度文库

摘 要:基于对Linux蓝牙协议栈BlueZ 源代码的分析,给出BlueZ的组织结构和特点。分析蓝牙USB 传输驱动机制和数据处理过程, 给出实现蓝牙设备驱动的重要数据结构和流程,并总结Linux 下开发蓝牙USB 设备驱动的一般方法和关键技术。 关键词:Linux 系统;蓝牙协议栈;设备驱动 USB Device Driver for Linux Bluetooth Stack LIANG Jun-xue, YU Bin (Institute of Electronic Technology, PLA Information Engineering University, Zhengzhou 450004) 【Abstract】This paper depicts the structure and characteristics of BlueZ based on analyzing the source code of Linux bluetooth stack BlueZ. It analyzes the implementation of bluetooth USB transport driver scheme and data processing procedure in detail, and gives the key data structure and implementation of bluetooth device driver. It summarizes the approach of developing Linux bluetooth USB device driver and the key technology. 【Key words】Linux system; bluetooth stack; device driver 计 算 机 工 程 Computer Engineering 第 34 卷 第 9 期 Vol.34 No.9 2008 年 5 月 May 2008 ·开发研究与设计技术· 文章编号:1000—3428(2008)09—0273—03 文献标识码:A 中图分类号:TP391 1 概述 蓝牙技术是开放式通信规范,而 Linux 是开放源码的操 作系统。廉价设备与免费软件的结合,促进了蓝牙技术和 Linux 的发展与融合。 Linux最早的蓝牙协议栈是由Axis Communication Inc在 1999 年发布的 OpenBT 协议栈。 随后, IBM 发布了 BlueDrekar 协议栈,但没有公开其源码。Qualcomm Incorporated 在 2001 年发布的 BlueZ 协议栈被接纳为 2.4.6 内核的一部分。此外, Rappore Technology 及 Nokia 的 Affix Bluetooth Stack 都是 Linux 系统下的蓝牙协议栈,应用在不同的设备和领域中。 BlueZ 是 Linux 的官方蓝牙协议栈,也是目前应用最广 泛的协议栈,几乎支持所有已通过认证的蓝牙设备。对于基 于主机的蓝牙应用,目前常见的硬件接口有 UART, USB 和 PC 卡等,USB 作为 PC 的标准外设接口,具有连接方便、兼 容性好和支持高速设备等特点,已广泛应用于蓝牙设备。 目前对 Linux 下 USB 设备驱动的研究已较为广泛而深 入[1-4] ,但对 Linux 下的蓝牙设备驱动还没有专门的研究。本 文在分析 USB 设备驱动和蓝牙协议栈的基础上,总结了 Linux 下开发蓝牙 USB 驱动程序的一般方法,并深入剖析了 其关键技术。 2 Linux 蓝牙协议栈 BlueZ 简介 BlueZ 目前已成为一个开放性的源码工程。它可以很好 地在 Linux 支持的各种体系的硬件平台下运行,包括各种单 处理器平台、多处理器平台及超线程系统。 BlueZ 由多个独立的模块组成,内核空间主要包括设备 驱动层、蓝牙核心及 HCI 层、L2CAP 与 SCO 音频层、 RFCOMM, BNEP, CMTP 与 HIDP 层、通用蓝牙 SDP 库和后 台服务及面向所有层的标准套接字接口;在用户空间提供了 蓝牙配置、测试及协议分析等工具。其组织结构如图 1 所示, BlueZ 没有实现专门的 SDP 层,而是将其实现为运行在后台 的蓝牙服务库例程(图 1 没有描述该后台服务)。 RFOMM 层支 持标准的套接口,并提供了串行仿真 TTY 接口,这使串行端 口应用程序和协议可以不加更改地运行在蓝牙设备上,例如 通过点对点协议 PPP 可实现基于 TCP/IP 协议簇的所有网络 应用。BNEP 层实现了蓝牙的以太网仿真,TCP/IP 可以直接 运行于其上。 USB设备驱动 (hci_usb.o) L2CAP层(l2cap.o) RFCOMM层 (rfcomm.o) BNEP层 (bnep.o) CMTP层 (cmtp.o) 串口设备驱动 (hci_uart.o) 虚拟串口设备驱动 (hci_vhci.o) 音频 socket RFCOMM socket BNEP socket CMTP socket L2CAP socket HCI socket 内核 空间 用户 空间 串口设备 CAPI设备 输入设备 网络设备 HDIP socket 音频设备 AF_BLUETOOTH socket 音频层(sco.o) PPP TCP/IP AF_INET socket BNEP层 (bnep.o) 其他设备驱动 (bluecard_cs.o等) BlueZ工具和实用程序 HDIP层 (hdip.o) BlueZ核心 及HCI层(bluez.o/bluetooth.o) 图 1 BlueZ 组织结构 3 蓝牙 USB 设备驱动 设备驱动程序在 Linux 内核中起着重要作用,它使某个 硬件能响应一个定义良好的内部编程接口。这些接口隐藏了 设备的工作细节,用户通过一组独立于特定驱动程序的标准 调用来操作设备。而将这些调用映射到作用于实际硬件设备 的特有操作上,则是驱动程序的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

第四维度4

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

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

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

打赏作者

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

抵扣说明:

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

余额充值