引言
蓝牙技术是一种用于替代有线电缆的短距离无线通信技术。它是由多家公司发起的SIG组织制定的无线通信技术标准,目的是取代现有的PC、打印机、传真机、移动电话和家庭网关等设备上的有线接口,为个人提供语音数据和普通数据的无线传输。蓝牙设备的工作频段选在全世界范围内都可以自由使用的2.4 GHz的ISM频段;成本低,功耗低,体积小,通信距离短,安全性高,能够同时传送普通数据和语音数据,可以组成微微网和散射网等。它已经广泛应用在移动电话、PDA、无线耳机、笔记本电脑等众多设备上。ISM频段是对所有无线电系统都开放的频段,因此使用其中的某个频段都会遇到不可预测的干扰源。例如某些家电、无绳电话、汽车房开门器、微波炉等,都可能是干扰。为此,蓝牙技术还特别设计了快速确认和跳频方案,以确保链路稳定。
本文介绍一种蓝牙无线显示屏系统的设计方案。使用蓝牙技术可以短距离无线控制显示终端,实现图像和字符数据的无线传输和显示,免去了有线连接所带来的缺陷,可以应用在多种领域。
1系统总体设计
该无线图形显示屏系统主要由两部分组成:主机部分和显示终端部分。主机负责控制命令以及需要显示数据的发送,显示终端部分负责接收和显示。系统结构如图1所示。
主机部分由装有Linux操作系统的PC机和BlueCore4蓝牙模块通过USB接口连接组成。
显示终端由以ARM9微控制器S3C2440A为核心的嵌入式Linux平台加上BlueCore4蓝牙模块以及LCD液晶显示屏组成。Linux操作系统安装在NAND Flash中,并连接了64 MB的外扩RAM。由于S3C2440A接口比较丰富,所以系统硬件具有较好的扩展性能。
系统通过蓝牙协议栈的RFCOMM协议层进行通信。RFCOMM协议提供串行数据传输,并能在2台蓝牙设备之间同时维持多达60个连接,可以同时支持遗留串行端口应用程序以及其他应用程序中的OBEX协议。蓝牙协议栈的结构框图如图2所示。
系统的工作过程为:系统初始化以后,主机和显示终端建立蓝牙连接。连接成功以后,主机应用程序通过蓝牙模块向显示终端发送显示的命令,显示终端根据对应命令进行接收图像数据或者字符数据等操作,然后通过LCD控制器将数据发送到LCD液晶显示屏。系统连接成功以后,显示终端可以根据收到的数据实时地显示不同的图像和字符数据,直到主机发出退出命令系统后结束通信。
2系统硬件设计
主机端和显示终端都使用了CSR公司BlueCore4-ROM芯片组成的蓝牙无线收发模块。BlueCore4系列符合2.0版蓝牙标准,并与现有1.1版和1.2版蓝牙设备完全兼容。这里采用的BlueCore4-ROM芯片具有很高的集成度,需要很少的外围露件。它提供了UART、USB2.0等主机接口,并且提供了PCM音频接口以及SPI接口。具有支持微微网和散射网,低功耗,和手机良好兼容,可以和802.11协议共存等优点。BlueCore4蓝牙模块结构如图3所示。
PC主机使用USB接口和BlueCore4蓝牙模块连接,对应的蓝牙模块同样通过USB接口和S3C2440A的USB-HOST接口进行连接。USB接口具有即插即用的优点。通过Linux操作系统的支持,该模块还可以使用通用的USB蓝牙适配器替代。BlueCore4蓝牙模块部分参考电路原理如图4所示。
LCD液晶屏和S3C2440A微控制器之间通过S3C2440A内建的LCD控制器接口进行连接。LCD液晶屏这里采用了3.5 in的L35T32,该液晶屏显示像素为240×320,可显示16位色彩,并可以方便地扩展为更大尺寸的液晶屏。S3C2440A的USB-HOST接口和LCD控制器接口部分参考电路原理如图5所示。LCD控制器接口连线主要包括:VD0到VD23(R、G、B三色分色信息),VCLK(数据传输时钟),HSYNC(行同步信号),VSYNC(场同步信号),VDEN(数据使能),LCD_PWREN(显示使能)。
3系统软件设计
系统软件同样分为主机部分和显示终端部分。这里主要分析显示终端部分软件的设计,主机部分与其类似。显示终端部分程序包括:LCD液晶屏初始化,蓝牙设备的初始化,蓝牙连接的建立和图像字符数据的传输显示等几个部分。程序流程如图6所示。
用户程序以Linux操作系统上的Bluez蓝牙协议栈为平台进行开发。主机应用程序采用GCC编译器进行编译,显示终端应用程序采用arm-linux-gcc编译器进行交叉编译。
3.1蓝牙部分程序设计
该部分采用了蓝牙socket编程。通过建立蓝牙RFCOMM协议层的socket进行连接。连接建立成功之后可以调用函数recv或者read读取主机发来的数据,主机端则对应地采用函数send或者write发送数据。通信结束之后可以调用函数close结束连接。
主机和显示终端蓝牙模块都有固定的蓝牙地址,主机端直接和固定蓝牙地址的显示终端设备进行连接。一台主机可以和多个显示终端进行通信,在不同的显示终端上显示图像和字符。
蓝牙初始化部分参考程序如下:
3.2 LCD液晶屏部分程序设计
LCD液晶屏部分程序采用了Linux内核驱动程序的framebuffer编程接口。framebuffer为图像硬件设备提供了一种抽象化处理,允许应用程序通过定义明确的界面来访问图像硬件设备。软件无须了解任何涉及硬件底层驱动的东西。通过framebuffer,应用程序可以用mmap函数把显存映射到应用程序虚拟地址空间,将要显示的数据写入内存空间就可以在屏幕上显示出来。LCD显示屏初始化和清屏部分参考程序如下:
LCD液晶屏初始化和蓝牙socket初始化连接完成以后,便可以通过蓝牙发送图像和字符数据。蓝牙接收显示图像和字符两个部分的程序类似,都是通过调用函数recv或者read读取主机发来的命令,经过程序判断然后以相同的方式接收数据。字符部分数据接收和显示参考程序如下:
该段程序利用接收到的字符数据得到对应的显示字库数据,然后通过frambuffer显示接口显示到LCD液晶屏上面。源程序带有显示字库文件,该文件通过编译并嵌入可执行代码,然后下载到显示终端文件系统。系统这里只添加了英文字库和对应的显示代码,可以正常显示英文字符。如果需要,通过添加中文字库和少量显示代码就可以很方便地实现中文字符的显示。图像部分程序则是将接收到的位图数据通过frambuffer显示接口直接显示到LCD液晶屏上面。
为了在显示终端的Linux操作系统上使用蓝牙协议栈,需要在交叉编译嵌入式Linux内核时将所需的蓝牙支持选项选上,并将所需的Bluez蓝牙库编译安装到终端文件系统中。用户应用程序同样通过交叉编译得到可执行代码,然后下载到终端文件系统运行。
该系统可以应用在公共信息显示屏,如大厅广告信息屏、建筑物提示标志等地方,可以避免有线连接的缺陷。系统通过扩展后还可以同移动电话、PDA、无线耳机、无线扬声器交换数据。
4结论
在嵌入式Linux操作系统上通过已有的蓝牙协议栈进行蓝牙开发,通过蓝牙协议层无线收发数据,可以不用关心蓝牙底层驱动的实现。用户可以通过各种上层协议进行更复杂的通信,通过蓝牙SCO协议层还可以发送音频数据。因此嵌入式Linux操作系统平台上进行蓝牙无线显示屏系统的开发较为方便,并且具有扩展性能好的优点。