设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 电子领域 设计应用 消费电子 查看内容

一种机顶盒集成蓝牙方案的设计与实现

2013-10-14 16:48| 发布者: Saiu| 查看: 786| 评论: 0

摘要: 本文通过在机顶盒嵌入式系统中以USB 接口拓展蓝牙功能,实现了机顶盒与其他形式智能终端通过蓝牙进行无线互 联,为进一步构建以机顶盒为中心的家庭信息娱乐网络打下基础。机顶盒平台选用了开发性较好的嵌入式Linux 系统,以USB 适 配器的方式实现蓝牙硬件功能。
      1 概述
      随着下一代广电网络(NGB)的演进和嵌入式计算机技术的发展,作为广电网络接入终端的机顶盒将成为构建家庭多媒体娱乐中心。以机顶盒作为智能网关,以无线连接的方式,实现物联网和智能家居。本文通过在机顶盒嵌入式系统中以拓展USB 接口的方式实现蓝牙功能,实现了机顶盒与其他形式智能终端之间通过蓝牙技术进行无线互联,为进一步构建以机顶盒为中心的家庭信息娱乐网络打下基础。机顶盒平台选用了开放性较好的嵌入式Linux 系统,以USB 接口蓝牙适配器的方式实现蓝牙硬件功能。
      2 蓝牙技术
      蓝牙(Bluetooth)是一个全世界范围内的短距离无线通信标准,使用2.4-2.5 GHz 的ISM(Industrial Scientific Medical )频段来传送话音和数据。蓝牙的应用非常广泛,现在大部分手机、PDA、便携电脑以及MP3、MP4 等设备几乎都将蓝牙功能作为标准配置。蓝牙运用成熟、实用、先进的无线技术来代替电缆,具有低成本,低功耗的特点,并且支持多种固定或移动终端设备,如:计算机系统、家庭影院系统、无绳电话系统、各种通信设备等,通过PAN(Personal Area Network)连接起来相互通信,实现资源共享。
      实现蓝牙应用时一般将协议栈分成两部分来考虑,其一是硬件实现部分,位于主机控制器接口HCI 的下面。以HCI 为分界,链路管理层(LMP)、基带层(BB)和射频层(RF)组成了蓝牙的底层模块;其二是软件实现部分。软件实现部分位于HCI 的上面,包括了逻辑链路控制与适配协议L2CAP(Logical Link Control and Adaptation Protocol)、服务发现协议SDP(Service Discovery Protocol)、串口仿真协议或称线缆替换协议RFCOMM 和二进制电话控制协议TCS,以及各种可选协议构成的高端应用层。
      基带协议(Base Band)主要负责建立各蓝牙设备单元之间的物理射频链路。蓝牙的射频系统是一个跳频系统,数据包在指定时隙、指定频率上发送,需要同步不同设备间的发送频率和时钟。基带数据包有两种物理连接方式:面向连接(SCO)和无连接(ACL),其中ACL 适合于数据包,SCO 适合于语音。而且在同一射频上可实现多路数据传输。
      逻辑链路控制和适配协议(L2CAP)可支持高层协议的复用、分组的分段和重组以及业务质量,支持ACL 连接类型。L2CAP 允许高层协议以64K 字节收发数据包。
      服务发现协议(SDP)的作用非常重要。使用SDP 可以查询到蓝牙设备信息和服务类型,从而在蓝牙设备间建立相应的连接。
      电缆替代协议(RFCOMM)可以在蓝牙基带协议(Base Band)上仿真RS232 的控制和数据信号,为使用串行线传送机制的上层协议提供服务支持,如对象交换协议OBEX。
      主机控制接口(HCI)定义了位于HCI 驱动程序(即蓝牙通讯模块的使用者)和主机控制器固件(蓝牙通讯模块的一部分)之间的接口,为上层协议提供了进入链路管理层和基带层的统一接口。在HCI 的主机(Host)和HCI 主机控制器(Host Controller)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。
      一般来说,通用的USB 接口蓝牙适配器实现了HCI 以下的协议层。蓝牙设备通过模块内的USB 设备控制器和总线与主机控制器相连,负责与主机的数据交换,它在USB 固件的控制下,将接收到的HCI 协议分组交给HCI 固件处理或将来自链路管理器和基带控制器的数据传送至主机。HCI 固件负责解释从主机接收到的HCI 分组并交给链路管理器和基带控制器处理。
      3 Linux 蓝牙协议栈
      使用不同蓝牙协议栈的设备在通信时会遇到互操作性的问题。开发者需要了解各种协议栈的体系结构并考虑其差异。BlueZ 作为当前最成熟的开源蓝牙协议栈,在Linux 的2.6 版本中已经得到了广泛的应用。由于BlueZ 结构简单、应用方便,具有灵活、高效和模块化的特点且具有较强的兼容性,因此成为Linux 操作系统下的官方蓝牙协议栈。
      蓝牙协议栈BlueZ 分为两个部分:内核代码和用户态的程序及工具集。其中内核代码部分采用模块化设计,由设备驱动程序和BlueZ 核心协议模块组成,分别位于Linux 内核代码的drivers 子目录和net 子目录下。Drivers 子目录下的代码包括Linux 内核对各种接口的蓝牙设备的驱动。net 子目录下代码包括蓝牙核心层和一部分扩展协议的内核代码,如L2CAP、RFCOMM、SCO、SDP、BNEP 等协议。对于用户态程序,BlueZ 提供函数库及应用程序接口,便于程序员开发蓝牙应用程序。
BlueZ 源码包主要由bluez-kernel、bluez-libs 和bluez-utils 等部分组成,分别对应蓝牙内核驱动、函数库和工具集。由于Linux 的2.6 版本中已经对BlueZ 协议栈核心代码提供了支持,因此只需要安装bluez-libs和bluez-utils 这两个软件包。较新版本的BlueZ 已将这两个包合并在一起发布。
      BlueZ 由多个独立的模块组成,内核空间主要包括设备驱动层、蓝牙核心及HCI 层、L2CAP 与SCO 音频层、RFCOMM,BNEP,CMTP 与HIDP 层、通用蓝牙SDP 库和后台服务及面向所有层的标准套接字接口;在用户空间提供了蓝牙配置、测试及协议分析等工具。BlueZ 没有实现专门的SDP 层,而是将其实现为运行在后台的蓝牙服务库例程。
      RFCOMM 层支持标准的套接字接口。BNEP 层实现了蓝牙的以太网仿真,TCP/IP 协议可以直接运行于其上。
      4 设计与开发
      机顶盒的开发基于Linux2.6.14 内核,首先要移植BlueZ 蓝牙协议栈以支持蓝牙硬件模块和编程接口。首先重新编译Linux 内核,makemenuconfig 进入内核配置菜单“Bluetooth subsystem support”子选项,将所列全部编译项目选中。然后进入“Bluetooth device drivers”,选中相应芯片的驱动项目。完成上述操作后,进行内核编译,新生成的内核镜像文件即可正确识别和支持USB 蓝牙模块。下一步,交叉编译bluez-lib-2.25 和bluez-lib-3.36,在lib 子目录下生成相关库文件,并将其加入到嵌入式系统的根文件系统当中,与添加了蓝牙支持的Linux 内核一起,对蓝牙开发接口提供全面的支持。
      编译好的BlueZ 库提供了Socket 编程接口,通过一个类似TCP/IP套接字的接口封装了对L2CAP 和RFCOMM 的操作。通过API 创建一个套接字,指定参数domain 为AF_BLUETOOTH,即指定使用蓝牙协议族;参数protocol 则分为BTPROTO_RFCOMM 或BTPROTO_L2CAP 分别指定使用的协议层。本文软件开发应用了RFCOMM 层的接口。
      RFCOMM 层则以端口(Port)区分不同的连接,需要在使用时动态分配。
      蓝牙连接的双方分为服务器端和客户端,服务器端向系统注册相应的服务类型(以UUID 标识),底层驱动会分配可用的端口与该服务绑定。
      客户端连接到服务器端时并不知道该动态分配的端口值,而是指定连接的服务类型,在服务器端进行服务搜索(SDP)找到与该服务绑定的端口,通过L2CAP 层通知客户端,从而建立RFCOMM 层的连接。通过套接字可以在RFCOMM 层进行端到端的连接,监听端口,接受、断开连接等操作。
      机顶盒上开发的蓝牙应用程序在进程启动后即开启蓝牙并搜索周边可被发现的设备,开启服务器端线程等待其他客户端的接入。建立连接后根据接收的指令内容执行相应的操作,如回传采集的数据或开启文件传输线程。接收文件线程在收到要求传输的文件大小和文件名后在指定路径创建该文件并开始接收,如创建失败则返回出错代码。机顶盒集成了图片浏览,音乐播放等多媒体功能,并支持外接存储器。
      5 结束语
      经实验和测试,已实现机顶盒与手机、计算机等不同类型网络终端之间的蓝牙无线互联,设备之间能够相互发现,建立连接,传输数据。实现用手机遥控机顶盒,无线采集收视数据,共享照片、音乐文件等典型应用,文件的有效传输速率达到约900kbps。该设计对具有USB 接口的机顶盒仅需升级软件即可利用蓝牙适配器为其提供无线互联功能,是一种低成本,简便高效的方案

相关阅读

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-6-17 02:59 , Processed in 0.039836 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部