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

Posted TonyHo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了imx6ul蓝牙语音识别项目之5:BLE基础与imx6ul上的BLE外设的使用相关的知识,希望对你有一定的参考价值。

前面我们准备好了下面这些软件:
  • BlueZ 5.49及其运行需要的组建
  • 百度语音识别及其运行需要的依赖库
  • Controller的驱动
并编译好了测试代码。 那么接下来,我们就需要和语音遥控器连接了,但是在此之前需要对BLE有所了解。
BLE VS Wifi VS ZigBee
BLE属于Personal network, 工作距离近, 一般在10m内。


BLE协议架构
Core Specifica tion 与 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中。

以上是关于imx6ul蓝牙语音识别项目之5:BLE基础与imx6ul上的BLE外设的使用的主要内容,如果未能解决你的问题,请参考以下文章

imx6ul蓝牙语音识别项目之6:语音格式说明以及整合与实际效果演示

imx6ul蓝牙语音识别项目之6:语音格式说明以及整合与实际效果演示

imx6ul蓝牙语音识别项目之4:构建ARM Linux语音识别环境

imx6ul蓝牙语音识别项目之4:构建ARM Linux语音识别环境

imx6ul蓝牙语音识别项目之3:用户态蓝牙配置

imx6ul蓝牙语音识别项目之3:用户态蓝牙配置