一. 引言
蓝牙技术将计算和通讯很好地结合起来,根据网络的概念提供点对点和点对多点的无线链接,使人们能随时随地地进行数据信息的交换与传输。随着各种蓝牙终端设备的普及,为它们提供局域网访问的嵌入式局域网接入点会有广泛的应用场合。使用篮牙无线通信的直接网络接入要优于同等条件下的有线接入,随着各种蓝牙终端设备的普及,为它们提供局域网访问的嵌入式接入点会有广泛的应用场合。
本文所介绍的局域网接入点 LAP(LAN Access Point)解决了蓝牙设备对有线网络的访问问题,它不同于目前基于Windows开发平台的蓝牙网关。如图一所示,本嵌入式局域网接入点类似于一个小小插件,直接插在现有的有线网络拓扑结构里,只是在最后一步才是无线的,这样就有效地利用了已有网络资源,需要更少的配制和干预,也更接近人们的使用习惯,让各种蓝牙终端设备便利的接入现有的局域网,给蓝牙技术的推广应用带来极大的方便。蓝牙局域网接入点实现了蓝牙协议子集中的LAN Access Profile,对于已经实现TCP/IP协议的蓝牙设备,蓝牙局域网接入点可以运行PPP 协议与该类蓝牙设备实现通讯,从而达到将该类蓝牙设备接入到Ethernet及Internet的目的。
二. 系统硬件结构
本系统的硬件主要由两大部分组成:蓝牙模块和嵌入式微处理器,另外还有电源、键盘、显示等辅助电路。图二给出了篮牙局域网接入点LAP (LAN Access Point)的硬件框图。蓝牙模块采用爱立信的 BOM4E,它将无线射频、基带、链路控制器和管理器封装在一起。在模块中,无线层和链路控制器通过硬件来实现,而链路管理器在固件中实现,将该模块附着在一个主机设备上后,该设备就具有了蓝牙无线通信的功能。蓝牙模块的射频单元功率也符合FCC关于ISM频段的要求,采用时分双工(TDD)方案来实现全双工传输。蓝牙模块通过UART接口同微处理器通讯,它提供了标准的主机控制器接口(Host Control Interface), 允许包括应用在内的高层协议访问基带层、链路管理层以及其他的硬件寄存器,主机发射和接受数据时,无论是同步业务还是异步业务都是通过HCI来传送。当接收到来自微处理器的HCI命令后,模块可以进入某一种给定的操作模式,比如,完成一种鉴权操作,或者执行一个设备的寻呼状态。反之,模块可以通过HCI事件向高层协议传送一个设备请求操作结果等。
微处理器是本系统的核心部分,负责蓝牙中间层协议的处理、网络协议的实现以及整个系统的控制功能。IP2022是一款高性能的微处理器,它有两个全双工串化解串接口(Ser/Des),能方便地同蓝牙模块以及网络接口相连。它包含64K FLASH数据存储器,20K SRAM程序存储器。内置三个定时器和一个硬件看门狗。微处理器的网络处理功能通过以太网接口RJ45直接将蓝牙无线网络接入到局域网络(LAN)中。它能进行数据的上传和下行,既能将无线接收到的数据打包为标准的TCP/IP包上传到局域网,也能接受来自局域网上的数据。用户可以使用预创建软件模块和配置工具,对IP2022进行编程和重编程,为各种设备间通信和人机通信创建真正的单片式网络应用方案。在模块内部实现了物理层、链路层、网络层协议及部分应用层协议,在网络传输层,可以进行TCP、UDP传输,在应用层,有FTP文件传输等服务。
三. 软件协议栈
蓝牙的核心部分是协议栈,蓝牙协议栈允许多个设备进行相互的定位、连接和交换数据,并能实现互操作和交互式的应用。蓝牙的协议栈分别运行在蓝牙模块及微处理器上面,是管理系统资源、控制硬件、通过HCI对来自主机的命令进行处理、完成蓝牙功能的嵌入式软件。由于本系统的蓝牙模块提供了基带的功能和实现链路管理器协议,主机是通过HCI层来控制蓝牙的,所以系统要做的工作就是要给主机提供HCI的接口,并在HCI接口上开发中间层协议以及为应用提供应用接口。在蓝牙的协议中,蓝牙主机软件实现L2CAP功能和上层HCI的驱动程序;PPP、IP、TCP/UDP等协议归属于TCP/IP协议,已经相当成熟,并且被绝大多数操作系统实现,在本系统中由微处理器IP2022来完成。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互通性,充分利用兼容蓝牙技术规范的软硬件系统。协议栈(如图三)的各种单元在逻辑上可以被分为三组:底层协议组、中间件协议组、应用协议组。
1) 底层协议组:这个协议组包含的协议主要用于使篮牙设备能确认彼此的相互位置,并且能够创建、配置和管理物理以及逻辑的链路,以便使高层协议和上层应用经这些链路利用传输协议来传输数据。这个协议组包括无线、基带、链路控制器和管理器协议。本系统采用的蓝牙模块已经固化有蓝牙的底层协议,并且提供了标准的访问接口(HCI),不再这里讨论。
2) 中间协议组:这是本系统需要开发的核心部分,包括有逻辑链路控制及适配协议(L2CAP)、服务搜索协议(SDP)、基于TS07.10的串口仿真协议(RFCOMM)。
3) 应用协议组:本系统实现了篮牙的协议子集LAN Access Point(LAP),这种应用模式在蓝牙连接上使用IETF的点到点协议(PPP),PPP是一种广泛使用的Internet标准,为IP通讯提供了主机配置和准备,PPP是为在同等单元之间传输数据包这样的简单的链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。使用PPP是LAP的关键,PPP适用于数据接入点和数据终端间的连接。IP网络业务能够在PPP链路上传输,PPP在设计时已经考虑到了要在串行连接上使用,因此在LAP中PPP可以运行在串口仿真协议RFCOMM之上。UDP、TCP&IP是由IETF定义,主要用于Internet上的通讯。四. 协议栈的实现
篮牙协议栈的设计主要包括:结构设计,重要数据结构的设计,任务的管理,内存的管理等等。
1) 结构设计:系统采用单进程的结构,由主程序循环的调用几个任务。当一个任务执行完之后,才会进入对下一个任务的执行。任务的执行不影响中断的产生和中断服务程序的调用,可以保证系统对外部事件的响应,构成典型地前后台系统。
2) 重要数据结构的确定:根据对蓝牙协议的分析可知,协议的中心任务是建立和管理几个蓝牙设备之间的连接,建立通讯链路,并借此传输数据。因此对这种连接的建立,维护和参数管理是软件最基本的功能。根据蓝牙规范中连接的属性和各种协议数据包的定义,可以确定对应的数据结构。例如可以用结构l2cap_con来描述逻辑链路控制和适配协议层的对等层间的连接通道。
struct l2cap_con {
BD_ADDR remote_bd; /* 6 bytes */
unsigned short local_cid;
unsigned short remote_cid;
int current_state;
unsigned short psm;
unsigned short remote_mtu;
unsigned short flush_timeout;
…
};
其中BD_ADDR是一个6字节的结构,记录连接中另一方的蓝牙地址,local_cid是逻辑信道本地端设备信道标示符,remote_con是远端信道标示符,current_state表示目前的连接状态,psm是协议/服务复用段,remote_mtu是远端最大传输单位等等。还有其他一些变量用来说明这个连接的一些属性和状态。通过这个数据结构,可以描述在L2CAP 对等层间的数据通道。除了结构l2cap_con之外,还有许多用来描述各层协议数据包属性的结构也都是系统的核心结构,这里不再详细列出。
3) 任务管理:针对协议任务和事件数量多,并且之间相关性大的特点,使用有限状态机的方法来处理,并采用过程驱动方案来实现有限状态机,为每个输入状态启动一个过程。当某一个事件发生时,系统利用当前状态来选取一个适当的动作,该动作处理输入事件并更新当前状态变量值。如图四所示是L2CAP的面向连接信道的状态机,显示了由哪一个事件导致状态转换,以及在状态转换时采取哪一个动作。信道的操作共有七个状态:关闭、高层连接请求、L2CAP层连接请求、配置、打开、高层断开连接请求、L2CAP层断开连接请求。
4) 内存管理:内存管理通常是操作系统的核心任务之一,由于本系统没有使用操作系统,所以这部分任务是系统必需而重要的任务。输入的数据包必须被保存在内存中,并将其传递给适当的任务作进一步的处理。同时,应用程序产生的输出数据也必须以数据包的形式存储在内存中,并将其传递给硬件设备传送出去。设计要做到快速分配存储空间,并且避免数据包在各层协议之间移动时的数据复制。针对本系统处理的实际情况:蓝牙协议数据报只有一些固定的大小的包类型,因此采用系统分配大小固定的缓冲区的方案。这样作可以杜绝内存碎片。需要缓冲区的时候,系统调用allot_bt_buffer函数。只要缓冲区分配完成,需要保存的仅仅是指向缓冲区的指针,所以归还缓冲区到空闲缓冲区列表的时候,系统调用unallot_bt_buffer,将被释放的缓冲区的指针交还给它。采用这种方法,协议软件只需传递指向该缓冲区的指针,处理过程统一,并且避免了处理过程中数据的移动。
从一般软件设计分类的角度来看,设备管理和系统资源管理是操作系统的任务。在综合考虑系统简单性和成本等因素之后,本系统中没有使用独立的实时操作系统,而是由嵌入式软件完成部分应该由操作系统完成的功能。
五. 结束语
本嵌入式局域网访问点已可以应用于对机器人的远程访问上。如果将现有接入点进行适当改动和扩展,就能实现其他功能,例如给它扩展上一个语音解码芯片后很容易扩展到语言信号的传输。