华东师范大学电子系 张凌 姚萌
摘 要: 本文依据EriCSSon蓝牙开发包EBDK的特点,从多个方面解析蓝牙模块与计算机系统的通信过程,并介绍软件编程中的接口设置。
关键词: 蓝牙技术;无线通信;解析
前言
蓝牙技术是基于WPAN(Wireless Personal Area Network)的无线网络连接技术,是以短程无线电收发技术为固定与移动设备通信环境建立了一个短程无线电的特别连接。它建立一个通用的无线电空中接口以及控制软件的公开标准,使无线通信技术和计算机技术紧密结合,使不同厂家生产的便携式设备在没有电线或电缆相互连接的情况下在近距离范围内具有互用、互操作的性能,代替固定与移动通讯设备之间的电缆。利用Ericsson蓝牙开发包EBDK(Ericsson Bluetooth Development Kit),可以快速开发出建立在蓝牙通信技术之上的应用,加速产品开发的进度。
蓝牙系统模块分析
从软件和硬件来划分,蓝牙协议体系结构可分为底层硬件模块,中间协议层(软件模块)和高端应用层三大部分。链路管理层(LM),基带层(BB)和射频层(RF)属于蓝牙的硬件模块。
中间协议层包括逻辑链路控制和适配协议(1.2CAP),服务发现协议(SDP),串口仿真协议(RFCOMM)和电话通信协议(TCS)。蓝牙协议栈的最上部是高端应用层,它对应于各种应用模型的profile,是profile的一部分。
主控制器接口HCI(Host Controller Interface)是蓝牙协议中软硬件之间的接口。它提供一个调用下层基带,链路控制层,状态和控制寄存器等统一的命令接口。HCI协议以上的协议软件实体运行在主机上,而HCI以下的功能由蓝牙设备来完成,两者之间通过传输层进行交互。HCI提供对基带控制器和链路管理器的命令接口,以及对硬件状态和控制注册成员的访问。该接口还提供对蓝牙基带的统一访问模式。
EBDK硬件结构
Radio模块是蓝牙硬件的射频模拟部分,包括射频发射器和射频接收器,以跳频技术实现频率扩展,进行ISM频段频率信号的发送和接收。基带模块则对物理信道进行管理,链路控制模块进行通信链路的建立、鉴权。
软件功能分析
软件分为两部分:运行在主PC上的主机软件和在蓝牙基带设备上运行的ROM程序。EBDK主机软件在win98、NT PC上运行,通过RS-232或USB连接到EBDK。
主机软件功能机制
主机软件有两个主线程,一个执行主应用程序和传输数据包,另一个处理接收界面信息。左边的圆圈代表主应用程序线程,右边的圆圈代表接收器线程。接收器线程采用Microsoft定义的通信事件,一旦接收到一个通信事件(通常是接收缓冲区有一序列字符),就会产生一个windows消息,同时将接收到的字符序列送到包组装器进行数据包的组装。主应用程序处理windows消息队列发现有输入字符的消息后,就进行数据包的组装,或者接收到用户界面的变化,对windows的控制或输入信息转换成的数据流进行处理,进行数据包的整合,因为通常收到的数据不是一个完整的数据包。主程序判别出数据包的类型,然后进行图形用户界面的更新或发送数据包的相应处理。
通信过程
EBDK主机软件结构为分层模块化形式,每一层都进行了封装,其他层只有通过接口才能访问。
如果用户应用程序发送了一序列数据,数据在到达RS-232之前,首先会进行包的组装,生成通信协议格式的数据包,在发送数据包之前还必须检测指令完成状态机。指令完成状态机指示从发送前一条指令之后系统是否仍在等待指令完成事件。如果状态是空闲(IDLL)则发送数据包,如果状态是等待指令完成(WAITING_FOR_CMD_COMF)用户程序则被通知稍候再试。
在接收方向上,执行的操作与之相反。接收来的数据首先经过包组装器,组装成标准的数据包格式,然后解开包,抽取包中的数据,进行指令解码,获得数据中包含的指令。在指令被发送到指令处理器之前,仍然要检测指令完成事件,以确定前一条指令是否已经被处理。之后,才被指令处理器处理,处理的结果反馈到应用程序进行界面的修改或通信状态的改变处理。
指令通信示例
以一个简单的示例来说明数据流动的全过程。
从EBDK的通信界面发送一条指令:
cmd cclk 0x2345
并按回车,将产生一个Windows事件调用字符串分析器对以空格分界的字符串进行标记和处理,生成一条消息字符序列。这个字符序列是对应指令的HCI位字符流。这个字符序列被封装到数据包中,经过通信过程中的一系列过程发送给RS-232DLL,RS-232DLL再立即将它放到COMM口上,携带HCI指令的电信号从PC 的COM或USB口发出,沿着RS-232或USB线,到达EBDK的COM或USB中,穿过RS-232缓冲区buffer以及Mother Board进入基带连接器和基带设备。基带的ROM程序将消息解码并执行。在这种情况下,它生成一个数据帧,在空中通过电磁波传输。这个帧通过与Radio Module的接口,以串行序列的形式从射频天线发送出去。
射频信号被附近的一个EBDK获取,它的射频模块将射频调制信号转换为一个数字信号,再以串行形式送到基带设备。基带控制和一个HCI数据包或事件包,再由基带设备将该包通过RS-232(或USB)线送到PC。PC的CPU收到一个中断指示收到一些字节数据,这些数据被送到缓冲器中,然后被RS-232包组装器(Packet Builder)进行处理。应用程序收到一个消息指明有一个数据包要处理,最后根据抽取出来的指令,调用相应的函数进行操作。这样就完成了一个消息通信的过程。
要以程序编程实现上述的过程,就需要在程序中设置上述操作中的软件接口动作机制。在C++中以一个通信类可以实现上述的基本操作。
一个基本的蓝牙通信对象应该具有以下的基本操作接口。
发送消息:
LssuoCommand:发送指令
TransmitRewData:发送数据
接收消息:
CommandCompleteSuccess:指令成功完成
CommandPending:指令延迟
CotRxPacket:收到数据包
ReadyForData:准备接收数据
DisconnectionOccurred:发生连接中断
GotBTAddress:获得蓝牙通信地址
而在实际通信操作中,要分为通信客户端和通信服务器端。因此,在基本的通信对象的基础上要派生出Client 和Server对象,分别就具体的操作进行处理。
另外需要一个包组装器专门处理数据包:
On_WMC_RXD_DATA:处理接收到数据之后的动作
PackelComplete:包接收完毕的动作
InvalidPacket:判断包是否有效
在VC++中,可以利用蓝牙工程模板自动生成,因此蓝牙通信包软件的开发具有易于实现和易与其他软件捆绑的特点。
结语
本文分析了基于EBDK的蓝牙通信的整个过程以及软件实现机制,可以作为蓝牙通信的应用开发的借鉴。具备了Ericsson蓝牙开发工具包之后,由于蓝牙软件包具有捆绑性与易实现性,可以在此基础上直接进行应用的开发,也可以从蓝牙通信的软件实现机制上理出应用的实现思路。■
摘自《电子产品世界》
|