XTNDAccess Blue SDK蓝牙协议软件的结构、移植与应用
作者简介:
    李冉,现任美国IMAG公司Bluetooth产品专员。
1996-1998在电子部六所进行电信软件的开发工作;
1998-2000在美国IMAG公司负责Tornado/VxWorks实时操作系统在嵌入式领域(主要是通信和自动控制领域)中应用的技术咨询工作;
2000-现在 在美国IMAG公司负责Extended Systems公司的蓝牙协议产品的技术咨询工作。
摘要:
本文以Extended Systems公司的蓝牙协议栈产品XTNDAccess Blue SDK为例介绍了蓝牙协议软件的设计原理,协议栈结构,移植过程,及应用的开发方法。
关键词:
    XTNDAccess Blue SDK
Bluetooth
IrDA
    Profile
    Baseband
    HCI
    LMP/HCI/SDP/TCS/RFCOMM/OBEX/IrMC
    TCP/IP,PPP.AT command
引言:
    蓝牙技术广阔的应用前景在国内引起了极大的关注,有些公司已经决定投入资金进行技术跟踪和相应产品的开发。但大多数厂商还在持观望的态度,其中有蓝牙硬件成本仍高居
不下的问题,也有蓝牙软件协议开发困难和协议兼容性认证困难的问题。
    XTNDAccess Blue SDK是Extended Systems公司(dedsystems)开发的功能完善,原码形式提供的,经过Bluetooth SIG兼容性测试的协议软件产品。目前全球已经有超过60个客户在使用该SDK进行着蓝牙应用的开发,其中不乏著名公司,如3COM/Plam,Motorola,HP, Xircomm, Red-M, Fujitsu, Flashpoint……
    本人希望通过介绍XTNDAccess Blue SDK的设计原理和实现方法,揭开蓝牙协议设计与实现的神秘面纱,增加读者对蓝牙协议软件的认识,使读者掌握使用XTNDAccess Blue SDK进行蓝牙产品的开发的过程,也为读者自己进行蓝牙软件设计与实现提供一定的思路。
    需要指出的是,蓝牙技术发展迅速,Extended Systems公司的XTNDAccess Blue SDK的软件版本也在不断的更新之中,本文介绍的内容是基于XTNDAccess Blue SDK的1.2版本。该软件的最新特性,可以参考dedsystems
1. 蓝牙标准协议栈结构的简介:
蓝牙技术规范目前版本为1.0b,主要规范文档为<<Specification of the Bluetooth Systems--Core>>和<<Specification of the Bluetooth Systems--Profile>>,。
其中<<Specification of the Bluetooth Systems--Core>>对蓝牙技术的射频、基带、音频传输,HCI接口,LMP,L2CAP,SDP,RFCOMM,与IrDA协议的互操作,蓝牙产品的认证等进行了定义。<<Specification of the Bluetooth Systems--Profile>>对蓝牙技术的各种Profile(应用模型)进行详细的定义,其中包括
另外,<<Bluetooth Protocol Architechture>>文档对蓝牙协议的软件结构做了专门的介绍。让我们首先看看该文档中的完整的蓝牙软件协议结构图(见图一)。
            图一:标准蓝牙软件协议结构图
规范中将所有协议分类为:
1. 蓝牙核心协议
基带控制部分,包括语音处理;链路管理协议(LMP);逻辑链路适配协议(L2CAP);服务发现协议(SDP)。
2. 电缆替代协议
串口仿真协议(RFCOMM),基于ETSI 07.10规范。
3. 电话控制协议
TCS BIN,基于ITU-T的Q.931规范;AT Commands基于ITU-T的推荐V.250和ETS 300 916(GSM 07.07)规范。
4. 吸收的协议
PPP;TCP/IP;OBEX(对象交换协议)基于红外协议栈中的IrOBEX;WAP。
我们在此文中不再详细介绍各个协议的具体功能,而着重介绍这些协议在XTNDAccess Blue SDK中的实现方法。
2. sdkXTNDAccess Blue SDK的设计思想:
Extended Systems公司设计XTNDAccess Blue SDK的目的是为蓝牙应用的开发者提供一个高效开放的蓝牙软件协议开发平台,使开发人员可以很方便地开发出自己的蓝牙应用,很方便的将蓝牙软件移植到开发人员选定的操作系统中,通过特定的HCI接口支持特定的蓝牙模块。
Extended Systems公司是短距离无线通信协议的著名提供商。早在加入Bluetooth SIG之前,就已经是红外通信标准化组织的发起人和标准制定人(当时以Conter Pointer公司的身份)。该公司以Dave Suvak为主的技术专家参与制订了红外通信协议簇中的绝大部分协议。尤其值得指出的是Dave Suvak 编写的IrOBEX协议,被Bluetooth SIG吸收到蓝牙协议中来。作为蓝牙技术和红外技术的结合点,OBEX协议规定了蓝牙技术和红外技术的互操作性。作为Object Push Profile,File Transfer Profile,Synchronization Profile的实现基础,OBEX在蓝牙协议的应用上有着极其重要的地位。
在蓝牙的规范中,蓝牙硬件模块中实现了基带的功能和链路管理协议(LMP),所以不需要SDK实现。但对基带送上来的语音,SDK还是要有特殊的处理部分的。
在蓝牙的协议中,PPP,IP,TCP/UDP等协议归属于TCP/IP协议簇,已经相当成熟,并且
被绝大多数操作系统实现,属于操作系统的一部分,所以也SDK也没有实现的必要。
AT Commands非常简单,只是需要在特定的应用中通过RFCOMM协议发送特定的数据(命令)而已,所以也无实现的必要。
WAP协议本身的发展还有许多不确定的因素,并且WAP协议本身比较复杂,相对独立,有独立的软件开发商提供,所以SDK没有包含WAP协议簇的必要。
这样,我们就可以确定了SDK要实现的蓝牙协议的模块:L2CAP,RFCOMM,SDP,TCS BIN,Audio,OBEX。
其中OBEX因为地位特殊,在XTNDAccess Blue SDKstack中被作为Add-Ins(特殊的应用部分)实现,不包含与SDK stack之中。这样我们可以得到在XTNDAccess Blue SDKstack的基本构成。
3.XTNDAccess Blue SDKstack的结构和功能模块:
图二:Blue SDK stack的内部结构图
在图二中,我们看到在Blue SDK stack中除了基本的协议模块外,还有两个软件模块:Management Entity 和 Event Manager。
这两个模块的功能是什么呢?
Management Entity是负责管理功能的软件模块,包括:
1) Piconet Manager:负责Piconet的连接的建立、维护,设备查询,维护Slave设备的工作模式(Active,Park,Hold,Sniff)。
2) SCO Manager:负责创建和维护设备之间的语音交换的链路。
3) Security Manager:允许应用程序对鉴权和加密进行设置,真正的鉴权和加密是硬件实现的。
Event Manager是一个执行线程(thread),包含着对所有协议模块的调用,并且管理着协议栈的初始化和定时器信息。
由此可以看出,SDK中附加的两个模块是为了蓝牙的实际应用而建立的。Management Entity包含了蓝牙实现中最常用的管理应用;Event Manager是程序执行的线程实体。
3. XTNDAccess Blue SDK的移植和应用:
            图三:构成蓝牙应用的部件
在图三中,我们可以看到以Blue SDK stack为核心,该SDK经过归纳设计出了三种API:
Application API—开发蓝牙应用程序;
OS API—使用操作系统提供的服务;
HCI API—通过特定的HCI类型驱动特定的蓝牙硬件模块。
   
1) 操作系统的移植-- OS API:
我们的协议栈任务的基本要求是不可重入。
移植前,我们要明确操作系统的一些特性,如:是单任务OS还是多任务的OS;多任务的OS是否是抢占式的;系统的互斥机制;定时器的特性;中断处理程序的编写等等……
向特定操作系统的移植,会涉及到以下一些操作系统提供的服务
操作系统服务
描述
Tasks(threads)
一个单独的任务(线程)足以完成Blue SDK stack和它的Add-ins(如OBEX)的执行,但要求不可重入
Interrupts
处理硬件的IO中断
Timers
在抢占式的多任务操作系统中需要一个单独的定时器,否则不需要
Systems Tick
系统提供的tick计数器:要求每tick小于1s,,tick计数器运行一个循环必须大于300秒
Semaphores
在抢占式的多任务操作系统中需要两个信号灯:一个用于保证协议栈任务的不可重入性;另外一个用于控制硬件的运行(堆栈任务与硬件驱动程序交换数据)
Memory Allocations
Blue SDK stack执行静态内存分配,要求提供内存拷贝、比较和设置的功能
ROM
依据平台和配置的选择,堆栈代码和常量需要超过30K的ROM
RAM
依据平台和配置的选择,堆栈变量和内部缓冲区需要超过4K的RAM
    下面我们通过图四表现,协议栈任务的执行过程。
                图四:协议栈执行的流图
堆栈任务实际就是反复的调用EVM_Process()函数,此函数不可重入,所以用OS_LockStack()和OS_UnlockStack()函数实现互斥的保护。OS_LockStack()和OS_UnlockStack()利用了一个OS的Semaphore来实现。在任务执行过程中,需要调用到高层协议的时候,SDK使用Callback函数的方式实现。在其它层中,提供的Callback函数,也会锁定协议任务。所以要求操作系统提供的互斥机制可以多次锁定同样的任务。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。