imx6ul蓝牙语音识别项目之5:BLE基础与imx6ul上的BLE外设的使用

前面我们准备好了下面这些软件:

  • BlueZ 5.49及其运行需要的组建
  • 百度语音识别及其运行需要的依赖库
  • Controller的驱动

并编译好了测试代码。 那么接下来,我们就需要和语音遥控器连接了,但是在此之前需要对BLE有所了解。
BLE VS Wifi VS ZigBee
BLE属于Personal network, 工作距离近, 一般在10m内。

BLE协议架构
Core Specification 与 application Specification
协议架构主要是指从蓝牙协议层次结构。对应的文档位于SIG Core Spce中, 大家可以到SIG下载。
https://www.bluetooth.com/specifications/bluetooth-core-specification :

对于应用层的GATT Profile, 这个位于application Specification中:
https://www.bluetooth.com/specifications/gatt

Layers
下面这个图片是BLE stack的Layers:

PHY层
在最底层的是PHY, 这个layer属于射频硬件相关, 在2.4G频段分成了40个channel:

频点分别是‘f=2402+k*2 MHz, k=0, … ,39’,带宽为2MHz”的40个RF Channel。
其中有三个ADV channel,剩下的37个为数据channel。

之外,还有:

RF发射相关的特性(Transmitter Characteristics),包括发射功率(Transmission power、调制方式(Modulation),高斯频移键控(Gaussian Frequency Shift Keying ,GFSK)、Spurious Emissions、Radio Frequency Tolerance等等。RF接收相关的特性(Receiver Characteristics),包括接收灵敏度等。  其中RSSI与此相关。

Link Layer

有了PHY层后就有了物理的连接通道,接下来就需要有层来收发数据了,以及控制RF功能,物理层的复用,重传。

Link Layer中的数据的传送有两种: ADV 与 Connection。

对于多对一,且数据量小的,使用ADV, 对于要求时严格,且数据量大的用Connection。

因为涉及到两种方式, 因此这里又有多种状态:

• Standby State
• Advertising State
• Scanning State
• Initiating State
• Connection State

具体这些位于:

HCI

接下来是HCI层, 我们的BlueZ userspace的是位于HCI之上。

L2CAP

这一层主要完成Protocol/channel multiplexing, 可以简单的认为就是将物理多个通道,划分为多个逻辑通道。为不同的层specify不同的通道。这个叫做Channel ID,即CID:

ATT layer

前面的L2CAP相当于联通并指定了对应的通道, 如同有两个网线连接了, 并且create了socket用于谁, 接下来就需要端口号了。  这个端口号可以类似与ATT。

ATT根据数据的提供与获取分为了server与client。 同时还有对属性与数据的权限管理支持。例如某些数据只能读不能写。

GATT Layer

GATT可以理解为对ATT进行了特定的规定,从而为Application的Profile制定一个framework。

下面是一个Profile的层次结构:


从Profile到service, 然后是Charactristic, Char又由value/Proprity/Descriptor组成。

我们一般都是在这个层次进行编程处理。

遥控器上面的Service

我们连接后可以看到所有被找到的primary service:


可以看到共有七个Priamry service, 其中有个HID, 有一个GAP,Battary。
而语音部分是位于Vendor Primary Service中。

Leave a Reply

Your email address will not be published. Required fields are marked *