1 蓝牙协议概述
  蓝牙技术规范(Specification)包括协议(Protocol)和应用规范(Profile)两个部分。协议定义了各功能元素(如串口仿真协议(RFCOMM)、逻辑链路控制和适配协议(L2CAP)等各自的工作方式,而应用规范则阐述了为了实现一个特定的应用模型(Usage model),各层协议间和运转协同机制。显然,Protocol是一种横向体系结构,而Profile是一种纵向体系结构。较典型的Profile有拨号网络(Dial-up Networking)、耳机(Headset)、局域网访问(LAN Access)和文件传输(File Transfer)等,它们分别对应一种应用模型。
  整个蓝牙协议体系结构可分为底层硬件模块、中间协议层(软件模块)和高端应用层三大部分。图1中所示的链路管理层(LM)、基带层(BB)和射频层(RF)属于蓝牙的硬件模块。RF层通过2.4GHz无需授权的ISM频段的微波,实现数据位流的过滤和传输,它主要定义了蓝牙收发器在此频带正常工作所满足的要求。BB层负责跳频和蓝牙数据及信息帧的传输。LM层负责连接的建立和拆除以及链路的安全机制。它们为上层软件模块提供了不同的访问人口,但是两个蓝牙设备之间的消息和数据传递必须通过蓝牙主机控制器接口(HCI)的解释才能进行。也是说,HCI是蓝牙协议中软硬件之间的接口,它提供了一个调用下层BB、LM状态和控制寄存器等硬件的统一命令接口。HCI层以上的协议实体运行在主机上,而HCI以下的功能由蓝牙设备来完成,二者之间通过一个对两端透明的传输层进行交互。
  中间协议层包括逻辑链路控制和适配协议(L2CAP,Logical Link Control and Adaptation Protocol)、服务发现协议(SDP,Service Discovery Protocol)、串口仿真协议(RFCOMM)和电信通信协议(TCS,Telephone control Protocol)。L2CAP完成数据拆装、服务质量控制和协议复用等功能,是其他上层协议实现的基础,因此也是蓝牙协议栈的核心部分。SDP为上层应用程序提供一种机制来发现网络中可用的服务及其特性。RFCOMM依据ETSI标准TS07.10在L2CAP上仿真9针RS232串口的功能。TCS提供蓝牙设备间话音和数据的呼叫控制信令。
  在蓝牙协议栈的上部是高端应用层(Applications),它对应于各种应用模型的profile。
  2 蓝牙协议测试背景
  2.1 蓝牙测试背景
  蓝牙组织成员为证明自己的产品达到了蓝牙组织加入协定的要求,符合蓝牙规范,必须通过蓝牙认证。蓝牙认证设置的目的在于保护蓝牙无线互连技术的一致性,同时尽可能降低对产品开发商的要求。
  任何一个生产或销售蓝牙设备的公司必须首先签署蓝牙协定以成为蓝牙组织成员,然后证明自己的产品符合蓝牙系统规范(包括一致性要求)。在成功通过蓝牙认证之后,产品方案被列入合格产品目录。产品必须完全通过蓝牙认证,否则不享有蓝牙组织协定所赋予的权利。
  蓝牙设备测试规范包括一系列为验证蓝牙设备而设计的测试。蓝牙设备应对蓝牙设备测试规范中所有的蓝牙设备测试案例逐一进行验证。
  所谓测试案例是与被测试协议的一个特定特征相关的一个特定测试单元。每个测试案例都有一个特定的测试目的,运行后都对所得到的测试结果进行判断。例如为测试传输层和建链(Connection establishment)而设计一个测试案例,其测试目的为“测试传输层建链”,执行这个测试案例可能得到的结果为成功、失败或者不确定。
  测试案例一般由三部分组成:初始化部分(Preamble)、测试体(Test Body)和重置部分(Postamble)。
  在蓝牙设备认证测试中,射频(Radio Frequency)、蓝牙协议一致性、profile一致性和profile互联测试所使用的方法是不同的。
  *射频测试案例可以混合使用标准测试设备和特殊蓝牙测试设备来执行。如果有一个可用的参考测试系统,蓝牙协议一致性的测试案例可以使用它来执行。否则一致性测试只能通过其他方法进行。组织成员自由选择合适的测试设备来运行所需的测试。
  *为加强低层互联的可靠性,首先应进行蓝牙协议互联蓝牙协议互联测试。使用设计好的测试产品(一般称为蓝牙设备)来进行测试。
  *Profile一致性测试用来决定蓝牙产品是否符合蓝牙规范。
  *Profile互联测试帮助确定支持同一Profile的产品是否如预料那样支持互联。当设备特别是不同厂家设备之间进行实际通信的时候,互联测试有可能发现原先不太明显的问题。
  2.2一致性测试
  协议一致性测试和协议校验的目标是很容易混淆的。协议一致性测试用于检查给定的一种协议的实现实体是否与协议的内在动工规范要求相一致。协议校验用来检查协议规范本身在逻辑上是否可靠的。如果协议规范存在设计错误,符合规范要求的协议实现虽然存在同样的逻辑错误,但能够通过一致性测试;如果它不存在同样的错误,无法通过一致性测试。只有实现实体和规范要求不一致时一致性测试才会失败。相反,协议的可靠性验证应该检测出设计上的错误。