基于 BLE 5.1 协议 Core Spec。
BLE 数据收发,从 RF 发送/接收,到 Baseband 基带进行数据处理,数据并不是直接 raw data 出去到 空中的,分为几个部分:
对于 LE Uncoded PHYs
数据发送端(TX)经过可选的加密(取决连接状态启动加密与否),根据 PDU,启动加密引擎(硬件or软件,具体看实现)计算 CRC,数据白化后,通过 RF 发送到空口
接收的对端(RX),同样经过一些列的反流程,继续数据的处理,直到 Baseband 基带正常获取到数据。
白化的过程,是为了防止空口数据出现连续的 0 或者 1的情况,比如 0000000b or 1111111b,
对于 LE Coded PHYs
数据除了进过 Uncoded PHY 的处理以外,还要进行数据的 Coding,包含 FEC 的 encoding 和 对应的 decodeing,和 Pattern mapper 和 demapper。
硬件平台使用了phy6212 方案, 他的SDK 中带了一个Centrall例子,我刚开始调发现连接后
数据
发送
不出去,后来屏蔽了绑定部分,因为绑定部分注册验证,所以
BLE
从机也需要验证,当然这种验证比较麻烦,所以我就直接屏蔽了它。后面就正常了。
下面是代码主控代码路径
PHY62XX_SDK_2.1.0\example\
ble
_central\simple
Ble
Central
屏蔽绑定部分,这部分在蓝牙启动开始事件处修改
if ( events & START_DEVICE_EVT )
详解蓝牙BluetoothGattCallback用法之
BLE
数据
接收
这篇继续讲解
数据
接收
,想要
接收
到
数据
必须先要使能通知@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {//发现服务,在蓝牙连接的时候会调用
List<BluetoothGattService> list =
1.启动蓝牙适配器与搜索蓝牙# 查看蓝牙适配器$ hciconfighci0: Type: Primary Bus: USBBD Address: 20:32:33:3C:2B:27 ACL MTU: 1021:6 SCO MTU: 255:12UP RUNNINGRX bytes:4404 acl:19 sco:0 events:310 errors:0TX bytes:29537 a...
里面包含了bt的各种应用场景,可以作为bt设备,以及
ble
主设备和从设备功能 ,而我们项目需要将linux系统作为一个
ble
从设备,所以需要使用peripheral这个文件夹。
attach.c attach.h efivar...
HCI层为接口层,向上为主机提供软件应用程序接口(API),对外为外部硬件控制接口,可以通过串口、SPI、USB来实现设备控制
Link Layer
L层为RF控制器,控制设备处于准备(standby)、广播、监听/扫描(scan)、初始化、连接,这五种状态中一种。五种状态切换描述为:未连接时,设备广
1.每次收到一个字节
数据
后开始计数,计数器清零开始计数。
2.若计数器计时时间达到10ms(即10m未收到
数据
,判断为一帧
数据
接收
结束)。
3.一帧
数据
接收
结束后,开始将一帧
数据
送到
BLE
协议栈,协议帧在再将
数据
送到Android端。
实验上述
流程
时,波特率115200,将串口
数据
端
发送
数据
帧的时间间隔定为20ms。发现20ms的串口
数据
帧间隔不会造成
BLE
串口
数据
接收
,但会造成的Android端
数据
丢失,不断改变串口
数据
帧发
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.Bluetoot...
如今的社会已经从IT时代过渡到了DT时代,
数据
的重要性不言而喻。将
数据
安全快速的传输给对方是一件非常重要的事情,如今诞生了很多不同的传输技术,每一种传输技术都是为了和对方进行
数据
交互。
BLE
技术也是这样,它的最终目的就是为了在两个设备间进行
数据
交互。我们从
BLE
的本质出发,搞清楚它是如何实现
数据
交互的,也就真正搞清楚了
BLE
的工作原理。
下面从3个方面,逐步讲解
BLE
的
数据
收发
过程
。
本文结合nordic的代码和蓝牙核心规范5.2来进行介绍。本文认为你对
BLE
协议栈的各个层已经有了一个大概认识,对
BLE
协议