蓝牙是一种短距离(通常在10米到100米之间)的无线标准,使用ISM频段(2.4到2.485 GHz)的UHF无线电波。

蓝牙接口由两个不同的栈组成,控制器和主机。

控制器栈在高通QCA6564无线芯片中实现。控制器实现链路层协议,并负责使用逻辑传输在设备之间传输蓝牙数据包。控制器使用主机控制器接口(HCI)协议与主机通信,在高通QCA6564上,这是通过UART接口传输的。

主机栈是Linux Bluez堆栈,该堆栈依次在Linux内核和用户空间之间划分。

Linux内核实现硬件驱动和底层控制、数据和安全协议,包括:

  • 逻辑链路控制与适配协议(L2CAP):它将数据包传递到主机控制器接口(HCI),如果需要,执行分段和重组,组播和QoS管理。

  • 射频通信(RFCOMM)在L2CAP上,它是一组简单的传输协议,提供模拟RS-232串行端口和简单可靠的数据流,类似于TCP,基于ETSI标准ts07.10。

  • 服务发现协议在L2CAP上工作,它允许设备发现彼此支持的服务,以及使用什么参数来连接它们。每个服务由一个128位的通用唯一标识符(UUID)标识,官方服务(蓝牙配置文件)分配一个16位的短格式UUID。

Linux内核将配置选项暴露在/ sys /类/蓝牙

蓝牙经典配置文件是通过上面列出的协议实现的。

用户空间使用情况

在用户空间中,Digi Embedded Yocto包括bluetoothdobexd(用于OBEX配置文件)守护进程,它公开用于配置和管理的D-Bus接口,应用程序可以使用该接口集成蓝牙功能,以及用于测试、开发和跟踪的其他一些工具,其中包括bluetoothctlobexctl命令行代理。

Digi Embedded Yocto包含一个蓝牙初始化脚本,该脚本使用hciattach工具调出蓝牙接口。

目录下的所有配置文件/etc/bluetooth/文件夹中。

Bluetoothctl命令行实用程序

Digi Embedded Yocto包括bluetoothctl命令行应用程序,您可以使用它来测试蓝牙功能。运行应用程序,进入命令行:

#bluetoothctl(蓝牙)#

识别您的设备

列出您的蓝牙设备与:

(蓝牙)#list Controller 00:04:F3:15:34:DA platform_82928[默认值]

使您的设备可被发现和配对

让你的设备被发现:

(蓝牙)#discoverable on change discoverable on succeeded [CHG] Controller 00:04:F3:15:34:DA discoverable: yes

允许其他设备与您的设备配对:

(蓝牙)#pair on更改pair on成功

扫描和检测设备

命令蓝牙设备扫描附近的其他蓝牙设备:

(蓝牙)#scan on Discovery started [CHG] Controller 00:04:F3:15:34:DA Discovery: yes

列出检测到的设备:

(蓝牙)#[NEW] Device 00:16:A4:06:B2:A0 log-linux-hp-agonzal

获取设备信息

查询指定设备的信息信息命令,后面跟着MAC地址:

(蓝牙)#信息00:16:A4:06: B2: A0设备00:16:A4:06: B2: A0名称:log-linux-hp-agonzal别名:log-linux-hp-agonzal类:0 x1c0104图标:计算机配对:没有信任:没有阻塞:没有连接:没有LegacyPairing: UUID:通用访问配置文件(00001800 - 0000 - 1000 - 8000 - 00001800 - f9b34fb) UUID:通用属性剖面(00001801 - 0000 - 1000 - 8000 - 00001801 - f9b34fb) UUID: A / V遥控器(0000110 e - 0000 - 1000 - 8000 - 0000110 - f9b34fb) UUID: A / V远程控制目标(0000110 c - 0000 - 1000 - 8000 - 0000110 - f9b34fb) UUID:音频源(0000110a-0000-1000-8000-00805f9b34fb) UUID:音频接收器(0000110b-0000-1000-8000-00805f9b34fb) UUID:耳机AG (00001112-0000-1000-8000-00805f9b34fb) UUID:消息通知Se..(00001133-0000-1000-8000-00805f9b34fb) UUID:消息访问服务器(00001132-0000-1000-8000-00805f9b34fb) UUID: IrMC Sync (00001104-0000-1000-8000-00805f9b34fb) UUID: OBEX文件传输(00001106-0000-1000-8000-00805f9b34fb) UUID: OBEX对象推送(00001106-0000-1000-8000-00805f9b34fb) UUID:供应商特定(00005005-0000-1000-8000- 000805f9b34fb) Modalias: usb:v1D6Bp0246d0525

一对

识别出远程设备后,您可以请求与其配对:

(蓝牙)#代理注册代理(蓝牙)#Default -agent默认代理请求成功(蓝牙)#pair 00:16:A4:06:B2:A0 [CHG] Device 00:16:A4:06:B2:A0 Connected: yes请求确认[agent] Confirm passkey 284380 (yes/no): yes

双方都需要确认。经两端确认后,座席报告:

[CHG] Device 00:16:A4:06:B2:A0 Paired: yes配对成功

信任设备

您还可以将设备添加到受信任列表中,以便自动进行配对。

(蓝牙)#trust 00:16:A4:06:B2:A0 [CHG] Device 00:16:A4:06:B2:A0 Trusted: yes change 00:16:A4:06:B2:A0 trust succeeded

退出命令行

退出bluetoothctl命令行:

(蓝牙)#辞职

Ping远端设备

Digi Embedded Yocto包括l2ping命令行应用程序发送L2CAP回显请求。

通过ping远端蓝牙MAC地址测试L2CAP层是否正常工作:

#l2ping 00:16:A4:06:B2:A0 Ping: 00:16:A4:06:B2:A0 from 00:04:5C:02:49:03(数据大小为44)…44个字节从00:16:A4:06:B2:A0 id 1 time 96.75ms

RFCOMM文件传输

Digi Embedded Yocto还包括个随机对照试验应用程序,您可以使用它来测试RFCOMM层。在运行此测试之前,需要对设备进行配对。

在接收目标上,发出:

#rctest rctest[1332]: Waiting for connection on channel 10…

然后,在发送器上输入:

#rctest -s <远端MAC>

接收端开始接收报文。

监控和调试工具

Digi Embedded Yocto包括以下命令行应用程序,可用于监控和调试蓝牙连接:

  • btmon:提供对蓝牙子系统监视器基础设施的访问,以读取HCI跟踪

  • hcidump:读取来自蓝牙设备的原始HCI数据,并以人类可读的形式打印到屏幕命令,事件和数据

  • sdptool:用于对蓝牙设备进行SDP查询

OBEX文件传输

Digi Embedded Yocto包括obex-client-toolobex-server-tool命令行应用程序在Bluez5中测试OBEX FTP传输。您可以使用以下指令通过OBEX FTP从客户端向主机发送文件:

  • 主机(obex-server-tool)

    #-b -c 13 -r /home/root/

    - b是蓝牙传输,- c频道号是和吗- rFTP根目录。

  • 客户端(client-server-tool)

    #obex-client-tool -b -s  -c 13 -d 

发出这些指令后,将启动一个新的提示符,您可以在其中执行FTP操作。例如:

#把< FILE_PATH >