基于BlueZ协议栈的嵌入式系统无线通信实现

发布者:幸福自由最新更新时间:2013-03-05 来源: dzsc关键字:BlueZ协议栈  无线通信  S3C2410a 手机看文章 扫描二维码
随时随地手机看文章

  1、引言

  随着科学技术发展和社会进步,嵌入式系统越来越多的应用到我们的实际生活中,极大的改变着我们的生活。开发低成本、高性能、高可靠性的嵌入式产品正在成为研究的热点。尤其是随着信息化网络化的发展,越来越需要与外部世界进行信息交换,当前主流的数据交换方式都是有线的,但有线通信存在着诸多不足,而无线通信以其无法比拟的灵活性,可移动性和极强的可扩容性正得到越来越广泛的应用。蓝牙技术作为全球统一的无线通信标准,其目的在于建立通用的低功耗、低成本无线电空中接口及其控制软件的公开标准,使通信和计算机进一步结合,使不同厂家生产的便携式设备在没有电线或电缆互相连接的情况下,能在近距离范围内具有互用、互操作的性能。而蓝牙技术在多种智能设备无线互连,多媒体终端通信和家庭网络等方面的应用也越来越广泛,本文在对蓝牙的官方协议栈 BlueZ进行深入研究的基础上,在实验开发平台上实现了协议栈的移植和文件的传输功能。

  2、BlueZ 的体系结构

  BlueZ由主机控制接口(Host Control Interface,HCI)、Bluetooth协议核心、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、SCO音频层、其它 Bluetooth服务、用户空间后台进程以及配置工具组成。它的完整结构如图 1所示(其中除应用程序和硬件外为 BlueZ提供的部分)。


  3、BlueZ协议的移植 [2]

  本文涉及到的硬件平台是三星公司的S3C2410a 开发板,软件平台是内核版本为 2.4.20的Linux操作系统, 为实现蓝牙协议栈BlueZ的移植, 可进行以下步骤进行移植:

  (1) 生成交叉编译器,创建交叉编译环境

  (2) 编译、配置实验开发平台上的 Linux内核

  (3) 安装 BlueZ 软件包

  (4) 编译实验开发平台上的Linux内核

  (5) 向s3c2410a实验平台移植 通过上述步骤完成了蓝牙协议栈 BlueZ的移植后,一个嵌入式蓝牙应用开发平台就搭建好了,下面利用该平台提供的蓝牙函数库,来进行文件传输功能的开发。

  4、文件传输功能的实现

  如上步骤成功移植蓝牙协议栈BlueZ后,一个完整的嵌入式蓝牙应用开发平台就已经搭建好了,本文将利用BlueZ提供的API函数在RFCOMM层上实现蓝牙文件传输的功能,所采用的协议路径为:射频(RF)—基带与链路控制(BB&LC)—主机控制接口(HCI)—逻辑链路与适配协议(L2CAP)—串口仿真(RFCOMM)—对象交换协议(OBEX)。它的实现分为客户端程序和服务器端程序,流程图如图2所示。

[page]


  2反映了通过蓝牙实现文件从客户端传输一个文件到服务器的过程,其中用到的协议栈中的API函数以及针对蓝牙通信的设置如下 : (1)int socket(int domain, int type,int protocol) 通过这个函数建立一个套接字,其中参数 domain说明网络程序所用的通讯协议族,本实验中我们用的是蓝牙官方协议栈BlueZ,所以我们的 domain取值AF_BLUETOOTH,type

  我们采用可靠的面向连接的 SOCK_STREAM,protocol我们采用的代表串口仿真的 BTPROTO_RFCOMM。

  (2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

  这个函数是服务器端的函数,实现的是绑定端口功能。在我们的实验中,参数 my_addr代表的我们用的是一个结构体,表示本地地址信息,它的 rc_family我们取为 AF_BLUETOOTH,它的rc_bdaddr我们取可以和任意主机通信的 INADDR_ANY。

  (3) int listen(int sockfd,int backlog)

  这个函数是服务器端的函数,实现*端口功能,它和我们普通Linux下的使用方法完全一样。

  (4) int accept(int sockfd, struct sockaddr *addr,int *addrlen)

  这个函数是服务器端的函数,完成接受客户端的链接请求,并建立与客户端的链接的功能。

  (5) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

  这个函数是客户端的函数,完成向服务器端申请建立链接,与上面的绑定端口类似,参数my_addr代表的我们用的是一个结构体,表示要申请链接的服务器地址信息,它的 rc_family我们取为AF_BLUETOOTH,它的rc_bdaddr我们取可以和任意主机通信的 INADDR_ANY。

  (6) ssize_t write(int fd,const void *buf,size_t nbytes) ssize_t read(int fd,void *buf,size_t nbyte)

  这两个函数完成文件读写的功能,也完成服务器端和客户端通信功能。在完成服务器端与客户端通信功能时,把前面建立的通道看成是文件描述符,只要往文件描述符里面读写信息就可以了,与向文件读写过程一样。

  以上是实现中用到的协议栈 BlueZ的主要库函数,它的客户端核心代码如下:

  if((from_fd=open(argv[2],O_RDONLY))==-1)

  while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

  {  /* 一个致命的错误发生了 */  if((bytes_read==-1)&&(errno!=EINTR)) break;   else if(bytes_read>0) { ptr=buffer;

  status=write(s,ptr,strlen(ptr));    memset(buffer,0,BUFFER_SIZE); }

  }

  它的服务器端核心代码如下: /*创建目标文件 */  memset(buf,0,BUFFER_SIZE); while(1) { bytes_read = read(client,buf,sizeof(buf));

  if(bytes_read>0)

  {  ptr=buf; while(bytes_write=write(to_fd,ptr,bytes_read))  { /*一个致命错误发生了 */

  if((bytes_write==-1)&&(errno!=EINTR))break;/* 写完了所有读的字节 */    else if(bytes_write==bytes_read) break; /*只写了一部分 ,继续写 */     else if(bytes_write>0) { ptr+=bytes_write;

  bytes_read-=bytes_write;

  } }   /*写的时候发生的致命错误 */ if(bytes_write==-1)break; /*这里读完后必须把 buffer清空*/    memset(buf,0,sizeof(buf));

  } else{  exit(1);  }

  }

  5、结束语

  在目前,对于蓝牙协议栈的移植已经有非常深入的研究,但对基于蓝牙协议栈 BlueZ的源代码级的研究还不多。本文在 ARM9+Linux环境下构建了的蓝牙工作环境, 通过官方的蓝牙协议栈 BlueZ提供的库函数编程实现了蓝牙的文件传输功能。利用嵌入式系统和无线传输实现文件传输,符合数字化、网络化的发展趋势。本文作者创新点 :在源代码级别上借助蓝牙协议栈 BlueZ实现了文件的传输功能。

参考文献:

[1]. S3C2410a datasheet http://www.dzsc.com/datasheet/S3C2410a_565.html.

关键字:BlueZ协议栈  无线通信  S3C2410a 引用地址:基于BlueZ协议栈的嵌入式系统无线通信实现

上一篇:基于ATM9TDMI+Linux的SOHO 路由器设计方案
下一篇:基于有机气敏变色材料的传感器系统

推荐阅读最新更新时间:2024-03-16 13:19

基于无线通信的音频解决方案分析
日常生活中很多的场景都与音频体验息息相关,人们在使用相关音频设备时也越来越注重体验感,相对常见的如听音乐、看视频、语音通话或玩游戏等等。 无线通信技术的出现使得人类摆脱了耳机线材的限制,蓝牙技术则令人类以更自由自在的方式探寻享受美妙的无线音频体验。作为新一代蓝牙音频技术标准,LE Audio不仅将提升标准蓝牙音频性能,还将为音频行业的进一步发展赋能,保驾护航,基于该技术的新一代设备也将为用户提供体验和共享无线音频的全新方式。 低延迟高音质为音频领域注入新的活力 炬芯科技基于自身的音频核心技术,抓住蓝牙5.3及LE Audio的技术特点和新机遇,针对当下音频应用市场里的其中三个痛点应用场景:无线家庭影院、无线电竞耳机以及无线
[嵌入式]
后4G面临更大容量需求和频谱短缺的矛盾
12月6日消息,在今天“2012年泛在网技术与发展论坛年度大会”上,泛在网技术与发展论坛秘书长张平提出无线带宽的瓶颈是容量不足,后4G新一代无线通信面临频谱短缺和容量需求矛盾突出的挑战。 频谱短缺和容量需求矛盾突出 根据预测,随着智能终端普及和数据业务增长,移动通信业务量未来每年会以近一倍的速度增长1000倍。至2020年无线网络容量增长达500-1000倍。但移动通信的发展史表明,容量不足一直是无线通信系统发展中的主要问题,因此后4G面临更大容量需求和频谱赤字,来自FCC的预测,2014年移动数据业务的增长将导致巨大的频谱赤字,达300MHz。 至于如何解决,张平提到需要新体制、新技术和新频谱。新体制就需要
[网络通信]
后4G面临更大容量需求和频谱短缺的矛盾
“算法+硬件”融合改变无线传输格局
eeworld网午间报道:如今,诸如Oculus Rift和HTC Vive等最先进的VR系统都需要一根稍显麻烦的线缆,来降低延迟和确保高保真图像以及电能传输到头显。但用过的用户都对此深恶痛绝,线缆直接影响了沉浸感。这个问题激发了不少于七个解决方案,这些方案都致力在高端主机PC和头显之间建立无线链路。 去掉高端VR头显的线路可谓众望所归,但到现在都没有明显的解决方案。 问题归结为三个主要因素:带宽,延迟和价格。以前的无线视频技术满足不了VR的需求,于是2016年三大高端VR头显都还需要拖着根电线走来走去。 线缆一个最致命的缺陷是它损害了沉浸感,尤其在房间尺寸VR下,当你在VR世界走来走去的时候,突然踩上了线缆,瞬间毁所有。吃亏多了
[网络通信]
双极性还是CMOS,为医疗设计选择合适的IC
    可植入、可消化、可互动、可互操作以及支持因特网,这些医疗设备现在及未来独特的需求都要求合适的IC工艺技术与封装。本文将对医疗半导体器件采用的双极性(bipolar)与CMOS工艺进行比较,并将对需要重点注意的部分封装问题进行阐述。     医疗应用的开发人员必须在功耗、噪声、线性度、可靠性以及成本之间进行权衡,需要根据这些要求精心选择工艺与设计架构。     本文将对双极性器件与CMOS器件进行比较,帮助用户判断每款器件的适用之处。文中将以高性能超声波设备为例,探讨如何平衡噪声、功耗、芯片占位面积以及集成度等问题。     功耗在许多电池供电应用中都非常重要。在这类应用中,CMOS工艺是个极好的选择。但是,漏电
[电源管理]
双极性还是CMOS,为医疗设计选择合适的IC
欧洲联盟力促近距离无线通信在下一代移动服务中的应用
欧盟委员会共同出资,加快开发NFC应用 中国,北京,2007年1月31日 —— 近日,多家公司、大学和用户组织共同成立泛欧联盟,旨在开发开放式架构,以进一步开发和部署近距离无线通信(NFC)技术,并推动其在手机中的应用。该项目名为“NFC在仓储物流及支付领域的应用(Store Logistics and Payment with NFC,StoLPaN)”,由欧盟委员会及信息社会技术(IST)项目共同投资,旨在为应用于移动设备、基于NFC的服务开发一个开放式的商用和技术框架。这些架构将超越手机类型及服务性质的限制,推动基于NFC的移动应用在众多行业市场中的部署。 该联盟成员包括摩托罗拉、恩智浦半导体(NXP Semicon
[焦点新闻]
技术文章—无线通信的可靠性是工业4.0发展的基石
工业4.0或智能工业预示着一场新的工业革命,将现有系统通过网络连接在一起,以创建网络化物理系统。第一次工业革命是不同技术的融合,以支持工程师推动手工制造向蒸汽机驱动的大规模生产转变。如今的工业革命则是传感网、通信和大数据处理等技术的融合,这些被视为工业4.0的基石。从工厂生产到客户使用产品,通过增加嵌入式系统的连接性,并实时提取数据,理论上效率可提升高达30%。利用这些数据不仅可以优化制造流程,而且有助于做出更优的业务决策,开辟新业务领域。 工业4.0的基础是可靠的通信基础设施。决策者通过基础设施从机器、工厂和现场设备中提取数据。正如工业4.0工作组的最终版报告所指出的那样,网络化是 “现实世界和虚拟世界(信息空间)以信息-物
[物联网]
技术文章—<font color='red'>无线通信</font>的可靠性是工业4.0发展的基石
MIMO通信系统的射频测试
随着每一代技术的进步,无线通信系统不断实现比以前更高的数据吞吐量。从历史上看,这个成绩是通过更宽的通道带宽、频谱利用技术(如正交频分复用 (OFDM)),以及更复杂的调制类型来实现的。 增加无线通道带宽的最近创新技术之一是多输入多输出(MIMO)系统。这种技术在许多无线标准中得到了实现,包括IEEE 802.11n、WiMAX和长期演进(LTE)等。 实现MIMO通信系统的前提,是可以通过使用相同物理频谱内的多个“通道”来提高使用有限频谱带宽的通信系统的数据速率。为做到这一点,发射机需要使用多个发射天线,每个天线发射一个独特的经过调制的信号。 接收机也使用多个天线,并且只需少量信号处理就能分离和解码各个通道,这种技术被称为空间复用。
[测试测量]
MIMO通信系统的射频测试
基于S3C2410A设计的工程地震仪方案
1 引言 随着嵌入式微处理器和嵌入式操作系统的发展,嵌入式系统在通讯、控制和消费电子等诸多领域得到了广泛的应用。嵌入式系统通常是面向特定应用的嵌入式CPU,与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,以动能力增强,与网络的耦合也越来越紧密。 本文利用ARM嵌入式系统构造微型化的工程地震仪雏形,以满足特定条件的工作需要,降低功耗,节省能源以延长工作时间,减小仪器尺寸和重量,使仪器更为轻便。 2 现有工程地震仪简介 工程地震仪应用于地基、路基与基础工程检测;隧
[单片机]
基于<font color='red'>S3C2410A</font>设计的工程地震仪方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved