目前市场上设备中运行的蓝牙协议有三个版本 —— 分别是版本 1.1、1.2 AFH 和 2.0+EDR。这没给开发人员带来任何问题,因为新版本的协议与以前的版本兼容。表 1 显示了目前可用的蓝牙版本的一些相似性与区别。
表 1. 蓝牙协议版本 版本 原始数据速率 通信范围(英尺) 说明
Bluetooth 1.1 1 Mbps 30-300 市场上部署得最广泛的蓝牙版本。
Bluetooth 1.2 AFH 1 Mbps 30-300 包含高级频率跳跃技术,可以与 WiFi 网络更好地并存。
Bluetooth 2.0+EDR 3 Mbps 30-300 包含增强数据速率技术,可以用更高的速度传输数据。
现在,让我们回顾一下控制蓝牙设备的固件/软件:栈。
蓝牙协议栈
蓝牙栈的目的是什么呢?栈是控制蓝牙设备的软件(和固件)。图 1 显示了协议栈的细节。
图 1. 蓝牙协议栈
栈的最底层是 HCI,即主机控制器接口(Host Controller Interface)。这一层顾名思义就是主机(计算机)和控制器(蓝牙设备)之间的接口。可以看到,其他所有的层都要经过 HCI。
HCI 上面的一层是 L2CAP,即逻辑链接控制器适配协议(Logical Link Controller Adaptation Protocol)。这一层充当其他所有层的数据多路复用器。
接下来一层是 BNEP,即蓝牙网络封装协议(Bluetooth Network Encapsulation Protocol)。使用 BNEP,可以在蓝牙上运行其他网络协议,例如 IP、TCP 和 UDP。
RFCOMM 称作虚拟串口协议(virtual serial port protocol),因为它允许蓝牙设备模拟串口的功能。
OBEX 协议层是在 RFCOMM 层上面实现的,如果想把数据以对象(例如文件)的形式传输,那么 OBEX 很有用。
SDP 是服务发现协议(Service Discovery Protocol)层,用于在远程蓝牙设备上寻找服务。
最后两层是 AVCTP 和 AVDTP,用于蓝牙上音频和视频的控制 和 发布。AVCTP 和 AVDTP 是蓝牙协议中增加的相对较新的层;如果想控制媒体播放器的功能或者想以立体声播放音频流,则要使用它们。
发送文件:RFCOMM 还是 OBEX?
我们先来看看栈中用来发送数据的两个简单协议 RFCOMM 和 OBEX,并比较使用它们传送文件的优势和不足。
可以采用 RFCOMM 或 OBEX 在蓝牙设备之间发送和接收文件。但是,如果想发送和接收流数据,则 RFCOMM 是更好的选择,就像使用传统的串口一样。在现实世界中,如果想使用传统的串口应用程序,并让它能使用蓝牙,就应当使用 RFCOMM。如果要在蓝牙设备之间发送简单的文本字符串(例如在聊天应用程序中),那么使用 OBEX 可能没有太大优势。在这种情况下,应当使用 RFCOMM 或 L2CAP。
另一方面,如果想发送对象数据(例如文件),则 OBEX 最合适。使用 OBEX 不仅可以发送数据,而且还能发送关于负载的上下文或元数据。例如,在使用 OBEX 发送文件时,还能够发送关于文件的其他有用信息,例如文件名称、文件类型、文件尺寸或者其他任何对文件进行描述的内容。
那么,既然已经决定了使用蓝牙时通过 OBEX 发送对象数据文件,那么我们来看看使用 Java 语言对蓝牙设备进行控制的官方库。
(转载USB数码 http://www.usbuse.com)
表 1. 蓝牙协议版本 版本 原始数据速率 通信范围(英尺) 说明
Bluetooth 1.1 1 Mbps 30-300 市场上部署得最广泛的蓝牙版本。
Bluetooth 1.2 AFH 1 Mbps 30-300 包含高级频率跳跃技术,可以与 WiFi 网络更好地并存。
Bluetooth 2.0+EDR 3 Mbps 30-300 包含增强数据速率技术,可以用更高的速度传输数据。
现在,让我们回顾一下控制蓝牙设备的固件/软件:栈。
蓝牙协议栈
蓝牙栈的目的是什么呢?栈是控制蓝牙设备的软件(和固件)。图 1 显示了协议栈的细节。
图 1. 蓝牙协议栈
栈的最底层是 HCI,即主机控制器接口(Host Controller Interface)。这一层顾名思义就是主机(计算机)和控制器(蓝牙设备)之间的接口。可以看到,其他所有的层都要经过 HCI。
HCI 上面的一层是 L2CAP,即逻辑链接控制器适配协议(Logical Link Controller Adaptation Protocol)。这一层充当其他所有层的数据多路复用器。
接下来一层是 BNEP,即蓝牙网络封装协议(Bluetooth Network Encapsulation Protocol)。使用 BNEP,可以在蓝牙上运行其他网络协议,例如 IP、TCP 和 UDP。
RFCOMM 称作虚拟串口协议(virtual serial port protocol),因为它允许蓝牙设备模拟串口的功能。
OBEX 协议层是在 RFCOMM 层上面实现的,如果想把数据以对象(例如文件)的形式传输,那么 OBEX 很有用。
SDP 是服务发现协议(Service Discovery Protocol)层,用于在远程蓝牙设备上寻找服务。
最后两层是 AVCTP 和 AVDTP,用于蓝牙上音频和视频的控制 和 发布。AVCTP 和 AVDTP 是蓝牙协议中增加的相对较新的层;如果想控制媒体播放器的功能或者想以立体声播放音频流,则要使用它们。
发送文件:RFCOMM 还是 OBEX?
我们先来看看栈中用来发送数据的两个简单协议 RFCOMM 和 OBEX,并比较使用它们传送文件的优势和不足。
可以采用 RFCOMM 或 OBEX 在蓝牙设备之间发送和接收文件。但是,如果想发送和接收流数据,则 RFCOMM 是更好的选择,就像使用传统的串口一样。在现实世界中,如果想使用传统的串口应用程序,并让它能使用蓝牙,就应当使用 RFCOMM。如果要在蓝牙设备之间发送简单的文本字符串(例如在聊天应用程序中),那么使用 OBEX 可能没有太大优势。在这种情况下,应当使用 RFCOMM 或 L2CAP。
另一方面,如果想发送对象数据(例如文件),则 OBEX 最合适。使用 OBEX 不仅可以发送数据,而且还能发送关于负载的上下文或元数据。例如,在使用 OBEX 发送文件时,还能够发送关于文件的其他有用信息,例如文件名称、文件类型、文件尺寸或者其他任何对文件进行描述的内容。
那么,既然已经决定了使用蓝牙时通过 OBEX 发送对象数据文件,那么我们来看看使用 Java 语言对蓝牙设备进行控制的官方库。
(转载USB数码 http://www.usbuse.com)