Linux Without Wires The Basics of Bluetooth
蓝牙技术用于短距离(1米至100米)的通信。 它是最广泛的无线技术,根据功率和通信范围分为多个类别
蓝牙是基于分组的协议,并具有主从结构。 它工作在2400MHz和2483.5MHz频率范围之间,并使用跳频扩频。 蓝牙将数据分成数据包并在79个指定的频道之一上发送。 每个通道具有1MHz的带宽。 蓝牙4.0版本有40个通道,每个通道使用2MHz带宽。
蓝牙是基于分组的协议,并具有主从结构。 它工作在2400MHz和2483.5MHz频率范围之间,并使用跳频扩频。 蓝牙将数据分成数据包并在79个指定的频道之一上发送。 每个通道具有1MHz的带宽。 蓝牙4.0版本有40个通道,每个通道使用2MHz带宽。
![](https://i-blog.csdnimg.cn/blog_migrate/b70e444821ca420da3e0bd301e4e6a26.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/971da8a7da0d749e5b7f2f991c539456.jpeg)
蓝牙堆栈
蓝牙堆栈是用于实现蓝牙主机协议栈的软件。 蓝牙堆栈实现可以有两种类型:
第一种是通常用于台式计算机的通用实现,并且灵活,因为可以通过驱动程序添加额外的蓝牙配置文件。
第二个是嵌入式系统的实现,它是针对资源有限的设备,如外围设备。
蓝牙,Bluedroid,Widcomm,Bluecode +,BlueLet,BlueMagic等市场上有各种类型的蓝牙协议栈(见图2)。
蓝牙堆栈是用于实现蓝牙主机协议栈的软件。 蓝牙堆栈实现可以有两种类型:
第一种是通常用于台式计算机的通用实现,并且灵活,因为可以通过驱动程序添加额外的蓝牙配置文件。
第二个是嵌入式系统的实现,它是针对资源有限的设备,如外围设备。
蓝牙,Bluedroid,Widcomm,Bluecode +,BlueLet,BlueMagic等市场上有各种类型的蓝牙协议栈(见图2)。
![](https://i-blog.csdnimg.cn/blog_migrate/27c63f2087ba0179e16587b23019e78c.jpeg)
BlueZ
BlueZ是一个通用蓝牙堆栈,用于实现Linux的蓝牙主机协议栈。它是开源软件和官方的Linux蓝牙协议栈。您可以从开发部分的http://www.bluez.org/下载这个软件。
BlueZ将蓝牙协议层映射到内核模块,内核线程,用户空间守护进程,配置工具,实用程序和库(见图3)。 BlueZ的主要组件是:
bluetooth.ko,其中包含BlueZ的核心基础设施。它 传播蓝牙 sockets家族 AF_BLUETOOTH。所有BlueZ模块都利用其服务。
蓝牙HCI数据包通过UART或USB传输。相应的BlueZ HCI实现是hci_uart.ko和hci_usb.ko。
负责分割,重组和协议复用的蓝牙L2CAP层由l2cap.ko实现。
在bnep.ko的帮助下,TCP / IP应用程序可以通过蓝牙运行。这模拟L2CAP层上的以太网端口。名为kbnepd的内核线程负责BNEP连接。
rfcomm.ko负责运行终端等串口应用程序。这模拟了L2CAP层上的串行端口。名为krfcommd的内核线程负责RFCOMM连接。
hidp.ko实现HID(人机界面设备)层。用户模式守护进程隐藏允许BlueZ处理输入设备,如蓝牙鼠标。
sco.ko实现面向同步连接(SCO)层来处理音频。 SCO连接不指定连接到远程主机的通道;只有主机地址被指定。
BlueZ是一个通用蓝牙堆栈,用于实现Linux的蓝牙主机协议栈。它是开源软件和官方的Linux蓝牙协议栈。您可以从开发部分的http://www.bluez.org/下载这个软件。
BlueZ将蓝牙协议层映射到内核模块,内核线程,用户空间守护进程,配置工具,实用程序和库(见图3)。 BlueZ的主要组件是:
bluetooth.ko,其中包含BlueZ的核心基础设施。它 传播蓝牙 sockets家族 AF_BLUETOOTH。所有BlueZ模块都利用其服务。
蓝牙HCI数据包通过UART或USB传输。相应的BlueZ HCI实现是hci_uart.ko和hci_usb.ko。
负责分割,重组和协议复用的蓝牙L2CAP层由l2cap.ko实现。
在bnep.ko的帮助下,TCP / IP应用程序可以通过蓝牙运行。这模拟L2CAP层上的以太网端口。名为kbnepd的内核线程负责BNEP连接。
rfcomm.ko负责运行终端等串口应用程序。这模拟了L2CAP层上的串行端口。名为krfcommd的内核线程负责RFCOMM连接。
hidp.ko实现HID(人机界面设备)层。用户模式守护进程隐藏允许BlueZ处理输入设备,如蓝牙鼠标。
sco.ko实现面向同步连接(SCO)层来处理音频。 SCO连接不指定连接到远程主机的通道;只有主机地址被指定。
蓝牙协议栈与OSI模型
将蓝牙协议栈与开放系统互连(OSI)模型进行比较的原因是为了更好地理解前者。假定了OSI模型的知识。
无线电,基带和链路管理器层是在蓝牙芯片组上实现的蓝牙架构的硬件部分。这些层大致映射到OSI模型中的物理层,数据链路层和网络层。主机控制接口(HCI)映射到传输层,并在L2CAP层和蓝牙芯片组之间传输数据。逻辑链路控制和适配协议(L2CAP)映射到会话层。使用射频通信(RFCOMM)的串行端口仿真,使用蓝牙网络封装协议(BNEP)的以太网仿真和服务发现协议(SDP)是功能丰富的表示层的一部分。位于堆栈顶部的各种应用程序环境称为配置文件。由于无线电,基带和链路管理器通常是蓝牙硬件的一部分,操作系统支持从HCI层开始(见图4)。
将蓝牙协议栈与开放系统互连(OSI)模型进行比较的原因是为了更好地理解前者。假定了OSI模型的知识。
无线电,基带和链路管理器层是在蓝牙芯片组上实现的蓝牙架构的硬件部分。这些层大致映射到OSI模型中的物理层,数据链路层和网络层。主机控制接口(HCI)映射到传输层,并在L2CAP层和蓝牙芯片组之间传输数据。逻辑链路控制和适配协议(L2CAP)映射到会话层。使用射频通信(RFCOMM)的串行端口仿真,使用蓝牙网络封装协议(BNEP)的以太网仿真和服务发现协议(SDP)是功能丰富的表示层的一部分。位于堆栈顶部的各种应用程序环境称为配置文件。由于无线电,基带和链路管理器通常是蓝牙硬件的一部分,操作系统支持从HCI层开始(见图4)。
![](https://i-blog.csdnimg.cn/blog_migrate/08f6f1628a286541b64669c9a99ee26a.jpeg)
仔细看看蓝牙协议栈
蓝牙协议栈分为两部分主机和控制器,并由主控制器接口(HCI)层接口(见图5)。
蓝牙主机
主机由堆栈的软件部分组成。因此,它在操作系统级别上实现。它包括核心蓝牙协议的实现:蓝牙堆栈(或主机协议堆栈)和蓝牙架构的高级层(如API和配置文件)。它具有各种层次和协议,如L2CAP,RFCOMM,SDP等,下面将进行解释。
蓝牙协议栈分为两部分主机和控制器,并由主控制器接口(HCI)层接口(见图5)。
![](https://i-blog.csdnimg.cn/blog_migrate/df2200d6dc4afc80c39302875c70ac1e.jpeg)
蓝牙主机
主机由堆栈的软件部分组成。因此,它在操作系统级别上实现。它包括核心蓝牙协议的实现:蓝牙堆栈(或主机协议堆栈)和蓝牙架构的高级层(如API和配置文件)。它具有各种层次和协议,如L2CAP,RFCOMM,SDP等,下面将进行解释。
L2CAP(逻辑链路控制和适配协议)L2CAP具有以下特征:
在不同的高层协议之间复用数据的能力;因此,诸如RFCOM,SDP等的各种协议可以对其进行操作
分割和重组
服务质量
它支持一个组抽象,实现将一个组映射到微微网上
RFCOMM(射频通信):RFCOMM位于L2CAP层之上。这是一个串口仿真协议。它通过蓝牙基带仿真RS-232控制和数据信号。
它提供与TCP大致相同的服务和可靠性保证。从网络程序员的角度来看,端口号的选择是TCP和RFCOMM最大的区别。尽管TCP在一台机器上支持多达65,535个开放端口,但RFCOMM仅允许有30个。这对于如何选择服务器应用程序的端口号有重大影响。
SDP(服务发现协议):该协议是所有蓝牙应用程序所必需的,并且是蓝牙协议栈的重要组成部分。借助该协议,设备可以发现附近其他设备支持的服务以及与之连接所需的参数。每个服务都由一个通用唯一标识符(UUID)来标识。
在不同的高层协议之间复用数据的能力;因此,诸如RFCOM,SDP等的各种协议可以对其进行操作
分割和重组
服务质量
它支持一个组抽象,实现将一个组映射到微微网上
RFCOMM(射频通信):RFCOMM位于L2CAP层之上。这是一个串口仿真协议。它通过蓝牙基带仿真RS-232控制和数据信号。
它提供与TCP大致相同的服务和可靠性保证。从网络程序员的角度来看,端口号的选择是TCP和RFCOMM最大的区别。尽管TCP在一台机器上支持多达65,535个开放端口,但RFCOMM仅允许有30个。这对于如何选择服务器应用程序的端口号有重大影响。
SDP(服务发现协议):该协议是所有蓝牙应用程序所必需的,并且是蓝牙协议栈的重要组成部分。借助该协议,设备可以发现附近其他设备支持的服务以及与之连接所需的参数。每个服务都由一个通用唯一标识符(UUID)来标识。