搜档网
当前位置:搜档网 › 蓝牙协议栈软件设计

蓝牙协议栈软件设计

蓝牙协议栈软件设计

B luetooth Protocol Stack Soft w are Design

张克非1,陈咏恩1,牛亏环2

(1.同济大学中德学院 上海200092;2.郑州防空兵学院 河南郑州450052)

收稿日期:2003206210

【摘 要】 蓝牙技术是一种用于个人区域网络的低成本、低功率的无线通信技术,主要包括基带芯片和协议栈两个部分。分析了蓝牙协议栈的功能和结构,提出了实现该嵌入式协议栈的软件结构,对各个模块进行了分析,最后,在硬件平台上进行了C 语言的编码和测试。

关键词:蓝牙技术,协议栈,嵌入式软件,状态机【Abstract 】 Bluetooth is a kind of low cost and low power wireless communication technology which is mainly applied in personal area net and consists of baseband chip and protocol stack.In this paper ,function and structure of Bluetooth protocol stack are studied ,then the software structure which can fulfill the functions of embed protocol stack is brought forward and the modules in software are

analyzed.The software is coded in C Language and tested in hardware platform.

K eyw ords :Bluetooth technique ,protocol 2stack ,embed 2software ,state 2machine

1 引 言

蓝牙技术是一种短距离无线通信技术,它取名于1000多年前统一丹麦和挪威的国王的名字(Harald Bluetooth ),意在形成统一的标准。1998年5月,爱立信、诺基亚、东芝、IBM 和英特尔这5家世界顶级公司联合公布了一项名为“蓝牙”的技术,不久便得到了包括摩托罗拉、朗讯、康柏、西门子等大批公司的一致拥护。蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。蓝牙技术的实质内容是要建立通用的射频接口及其控制软件的公开标准,使通信和计算机进一步结合,使不同厂家生产的移动电话、便携式计算机以及各种便携式通信设备的主机之间在没有电线或电缆相互连接的情况下,也能在近距离范围内具有互用、相互操作的性能,实现无缝的资源共享。

2 蓝牙协议栈结构

蓝牙技术规范在使用通用无线传输模块和数据通信协议的基础上,开发交互式服务和应用。蓝牙技术规范的目的是使符合该规范的各种应用之间能够互通,本地设备与远端设备需要使用相同的协议,不同的应用需要不同的协议,但是,所有的应用都使用蓝牙技术规范中的数据链路层和物理层协议。

完整的蓝牙协议包括蓝牙专利协议LMP (Link Manager Protocol )、L2CAP (Logic Link Control and Adaptive Protocol )和非专利协议,例如对象交换协议(OB EX )和用户数据报文协议(UDP )。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互通性,充分利用兼容蓝牙技术规范的软硬件系统。

蓝牙协议栈如图1所示。图中显示了数据经过无线传输时,所有协议之间的相互关系。

图1 蓝牙协议栈

3 蓝牙协议栈开发平台

本系统是在一块带有CPU 的Nios 开发板上进行

的。系统的硬件是基于FP G A 开发的蓝牙芯片,用来

?

51?

完成蓝牙基带中需要的复杂运算和实现射频功能,并以函数调用的形式提供对这些功能的访问。

4 蓝牙协议栈的功能分析

蓝牙的协议栈是运行在CPU 核上面、管理系统资源、控制硬件、对通过HCI (Host Controller Interface )来自主机的命令进行处理、完成蓝牙功能的嵌入式软件。由于本系统提供基带的功能和实现链路管理器协议,主机是通过HCI 层来控制蓝牙的,L2CAP 属于上层的协议,所以系统要做的工作就是给主机提供HCI 的接口,并且处理来自另一个蓝牙设备的链路管理器协议的PDU (Prtocol Data Unit )包。在蓝牙协议中,蓝牙主机软件实现了L2CAP 功能和上层HCI 的驱动程序;PPP 、IP 、TCP/UDP 等协议归属于TCP/IP 协议,已经相当成熟,并且被绝大多数操作系统实现,不在嵌入式协议栈的处理范围之内

从一般软件设计分类的角度来看,设备管理和系统资源管理是操作系统的任务。在综合考虑系统简单性和成本等因素之后,本系统中没有使用独立的实时操作系统,而是由嵌入式软件完成部分应该由操作系统完成的功能。

5 蓝牙协议栈总体设计

总体设计的内容包括:结构设计,功能设计,系统任务之间的通信和重要数据结构的确定等。5.1 结构设计

系统采用单进程的结构,由主程序循环调用几个任务。当一个任务执行完之后,才会进入执行下一个任务。在任务执行期间,不屏蔽外部事件的中断请求,因而外部事件可以被实时响应,整个系统构成典型的前后台系统。这些任务包括:对HCI 命令和PDU 的处理,对LC (Link controller )的控制和管理,对Timer 的管理和数据包的处理。模块之间的关系见图2。

图2 系统模块图

5.1.1 HCI 和LC 数据处理模块

HCI 和LC 数据处理模块主要完成数据包的分包

和重组。HCI 是UAR T 接口,这里的数据包是L2CAP 层传送的上层应用程序的数据包;LC 层可以

传送的数据包是蓝牙协议规定的包类型,并且与建立连接时两个设备的协商结果有关,所以,来自HCI 的数据包可能与LC 层可以传送的数据包的大小不同。这就需要在发送来自HCI 的数据包时,根据LC 层可以使用的数据包的大小来重新组合和分包,以适合LC 层的需要;当收到LC 层的固定类型的数据包时,还要根据HCI 层规定来组合,以适合HCI 层的传送需要。5.1.2 内存管理模块

内存管理通常是操作系统的核心任务之一,由于本系统没有使用实时操作系统,所以,这部分任务是系统必需而重要的任务。

输入的数据包必须保存在内存中,由适当的任务做进一步处理。同时,应用程序产生的输出数据也必须以数据包的形式存储在内存中,由硬件设备传送出去。一般来说,协议软件的有效性最终取决于如何管理保存这些数据包的存储器。一个良好的设计要做到快速分配存储空间,并且避免数据包在各层协议之间移动时的数据复制。常用的分配方案有:

(1)缓冲区方案理论上,最理想的解决办法是将缓冲区划分得足够大,以存储最长的有效信息或数据包。采用大缓冲区时,首先选择一个系统能够处理的数据包的最大长度为D ,然后使缓冲区足够大,可以容纳长度为D 的数据包及其首信息。采用这种方法是在允许使用较长的数据包和能够给正常的通信量提供足够多的缓冲区之间的折衷。

(2)链表方案

除了大缓冲区方案外,还可以采用将较小的缓冲区以链表的形式连接起来,以处理任意长度的数据包。在链表设计方案中,表中的缓冲区既可以是大小固定的,也可以是不固定的。

链表方案允许链表中的每一个缓冲区只包含部分数据,并具有其他一些优点,例如允许快速封装而无需复制操作,当某一层的软件接收到上一层的协议发送的信息后,就分配一个新的缓冲区,填写其中的首信息,并将新缓冲区插入保存此信息的链接列表中,这样,附近的字节就可以很容易插在某个信息的前面,而无需移动已经存在的数据。

针对本系统处理的实际情况,蓝牙中的数据包只

有固定大小的包类型,因此,采用系统分配大小固定的

缓冲区的方案。这样做可以杜绝内存碎片,并保证内存的高利用率。此外,系统采用了缓冲区自识别策略,以使缓冲区的处理过程统一。需要缓冲区时,系统调用getbuf 函数。只要缓冲区分配完成,需要保存的仅

?

61?

仅是指向缓冲区的指针,所以,归还缓冲区到空闲缓冲

区列表时,系统调用freebuf ,将被释放的缓冲区的指针交还给它。采用这种方法,协议软件只需传递指向该缓冲区的指针,处理过程统一,并且避免了处理过程中数据的移动。

(3)时钟管理模块蓝牙模块中有许多地方需要定时,以控制状态持续的时间,对过程进行时间上的监控。

管理定时事件的关键在于一个被称为

Delta 表的数据结构。Delta 表中的每一个表项都对应于一个将来发生的事件。因为每个定时器可能发生在不同的时间,所以,Delta 表中的每项都有一个字段,该字段记录事件将要发生的时间。为了提高Delta 表的更新效率,Delta 表中的事件按照它们发生的时间进行排序,表中存放事件发生的相对时间,而非绝对时间。例如,图3所示的Delta 表中包含了4个表项,分别被安排在将来的第16,20,21和30个单位时间时发生,但在表中,这些表项的时间值分别是16,4,1和9,因为第1个表项将在从现在算起的第16个单位时间发生,第2个事件将在第1个事件发生后的第4个单位时间发生,第3个事件将在第2个事件发生后再过一个时间单位时发生,第4个事件将在第3个事件后的第9个单位时间发生。

图3 Delta 表

Delta 表的主要优点在于它的高效率,因为所有

的时间都是相对的,所以,定时器进程只需要定期地递减表中第1项的时间值。

定时器管理软件根据下面的基本原则进行设计:在Delta 表中的表项用来保存命令,由定时器进程在事件发生时对这些命令做出解释。

(4)事件处理模块

针对HCI 命令和PDU 数量多、互相之间相关性大的特点,使用有限状态机的方法来处理它们。有限状态机的实现通常选取表驱动或过程驱动这两种基本方案。

单纯的表驱动方案利用一个二维数组,其中每一行对应一个状态,每一列对应一种可能的输入事件,或者引起状态变迁的操作。因此,每一个表项对应一个处于某种状态下的输入事件。该表项中包含了被调用来处理该事件过程的地址,同时还有状态变迁后的整型状态值。

过程驱动方案为每个输入状态启动一个过程。当

某一个事件发生时,系统利用当前状态来选取一个适

当的过程,该过程处理输入事件并更新当前状态变量值。

在实现一个结构规整、语义简单、具有相对来说较复杂的变迁图的有限状态机时,表驱动方案工作更出色一些。而在实现一个变迁状态少、语义复杂的有限状态机时,过程驱动方案工作更出色。

嵌入式协议栈要处理的HCI 命令和LMP PDU 都有很多类型,从这方面来看,些;但是在某些过程中,例如建立连接过程等,变迁图比较复杂,所以,我们采用了两者相结合的方案,即对于简单的、不涉及复杂变迁图的HCI 命令和LMP PDU 采用表驱动方案,对于一些复杂的变迁图的HCI 命令和LMP PDU 则采用过程驱动方案。5.2 任务之间的通信任务之间的通信是协议栈软件的重要部分,对协议的性能有很大的影响。对于操作系统来说,任务之间的通信通常采用的方法有信号量、邮箱、消息队列、管道等。在我们的实现中,借鉴了管道的思想,亦即给所有需要通信的任务之间建立管道。为所有需要通信的任务建立管道,需要发送消息的任务把消息的内容放入双方已协商的管道中,然后由需要消息的任务从中取出。对管道中消息的存取和检查都由一组统一的函数完成。

5.3 重要数据结构的确定

从对蓝牙协议的分析可知,链路管理器的核心任务是管理和维护由数个蓝牙设备组成的Piconet 。Pi 2conet 的基本组成单元是两个蓝牙设备之间的连接,最基本的Piconet 由两个蓝牙设备组成。因此,由两个蓝牙设备组成的一个连接是系统最基本的组成部分,对这种连接的建立、维护和参数管理是软件最基本的功能,对这种连接的操作就是嵌入式软件实现的核心任务。根据蓝牙规范和连接的属性,确定了描述这个对象的参数,用结构TACLConnection 来描述这个对象。

struct TACLConnection {

struct BD-ADDR bd-addr ;U IN T8AM-ADDR ;U IN T16ACLConHandle ;U IN T8T YPE ;U IN T8FLOW ;U IN T8IsActive ;bool Encrypted ;

struct TFeatures Features ;

……

}

?

71?

其中:bd-addr是一个8字节的结构,记录连接另一方的蓝牙地址;ACLConHandle是唯一标志这个连接的连接句柄(connection handle),上层的主机通过这个句柄来访问连接中的另一个设备;AM-ADDR用以标识Piconet中的蓝牙设备,通过这个数据结构可以把在上层应用程序中的数据通道和物理的无线连接对应起来;其他一些变量说明了这个连接的某些属性和状态,例如是否加密等。

除了结构TACLConnection之外,用来描述Pi2 conet属性的结构和记录本地蓝牙设备属性的结构等也都是系统的核心结构,这里不再详细列出。

6 试验结果分析

我们利用Nios开发板,对所设计的软件和蓝牙基带芯片进行了测试,证明软件可以完成蓝牙基带的基本功能。蓝牙嵌入式通信协议栈的开发工作尚未全部结束,目前完成的是在两个蓝牙设备之间建立连接的工作。测试结果表明,在这个协议栈的开发工作中采取的一系列技术手段是基本成功的,这使得我们可以进一步开发更加完善的协议栈。

参 考 文 献

1 Thomas Müller.Bluetooth Security.In:Proceedings Blue2 tooth’99.London,1999

2 Riku Mettala.Bluetooth Protocol Architecture Version1.0b.

1999

3 王 璞,张臻鉴,王玉空.面向实时嵌入式机载软件的测试技术研究.航空计算技术,1997,27(4):4~11

4 张 宇,黄 克.实时程序设计方法的发展趋势.计算机研究与发展,1993,30(1):55~60

5 李伟华,康继昌.实时软件测试用例构造的充要策略研究.

航空计算技术,1996,26(2):20~25

6 梁合庆.今日的嵌入式系统.浙江大学学报,1998(增刊)

7 [美]Tanenbaum S Andrew著.计算机网络(第三版).熊桂喜,王小虎,译.北京:清华大学出版社,1999

8 李大友主编.计算机操作系统.北京:机械工业出版社,1998 9 金 纯,许光辰,孙 容.蓝牙技术.北京:电子工业出版社,200l

10 肖 斐,朱祟湘,赵文耘.协议软件实现的面向对象的方法.计算机工程设计,1998,19(6):19~25 ■

北电网络成为北美3G领先设备供应商

日前,A T&T Wireless[纽约证交所代码:AWE]宣布与北电网络3[纽约证交所代码:N T]和爱立信[纳斯达克证交所代码:ERICY]达成了部署北美第一个商用W2CDMA(宽带码分多址)无线网络的协议。北电网络将为A T&T Wireless提供大约1200个Node B基站,从而成为A T&T Wireless的W2CDMA无线网络设备的领先供应商。

此次部署的商用W2CDMA无线网络和相关服务将为A T&T Wireless在2004年底前启动4个使用W2 CDMA的美国地区市场作好准备,同时也将对A T&T Wireless的全国性高速ED GE网络起到补充作用,从而进一步确立A T&T Wireless在为客户提供新一代移动多媒体业务方面的业界领先地位。目前,A T&T Wireless拥有大约2千多万用户,覆盖了美国各大主要城市。

目前,北电网络正在与欧洲,非洲和中东地区的领先运营商(包括6家大公司中的4家:Vodaphone、T2 Mobile、Telefonica和mm02)共同部署UM TS。在欧洲,北电作为在所有无线领域均居领导地位的一家厂商,北电网络已为全球客户建设了超过300个无线网络,在欧洲、北美和亚洲赢得了26个3G合同。北电网络在部署CDMA网络的W2CDMA客户基础增长已经超过了2G。

无线网络方面具备8年以上的经验,并且是全球的无线核心网和3G第一层接入运营商的主要供应商,在实践部署中积累了丰富的经验并展示了不断创新的实力。

北电网络是致力于改变全球通信和信息交换方式的业界领导者和改革者。公司一直致力于为服务供应商和企业客户提供通信技术及基础设施,使他们能够在无线网络、有线网络、企业网络和光网络上提供增值IP数据、话音和多媒体业务。作为一家全球性公司,北电网络在全球150多个国家开展业务。关于北电网络的更多信息,请访问:https://www.sodocs.net/doc/ff3791445.html,。

?

8

1

?

蓝牙协议栈详解

1.概述: 蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙 协议堆栈的各个层次。 SIG所定义的蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现 互操作。互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈。但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层。 2.完整的蓝牙协议栈 完整的蓝牙协议栈如图1所示,不是任何应用都必须使用全部协议,而是可以只使用其中的一列或多列。图1显示了所有协议之间的相互关系,但这种关系在某些应用中是有变化的。 蓝牙协议体系中的协议 蓝牙协议体系中的协议按SIG的关注程度分为四层: 核心协议:BaseBand、LMP、L2CAP、SDP; 电缆替代协议:RFCOMM; 电话传送控制协议:TCS-Binary、AT命令集; 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。 除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP 的下层,但HCI也可位于L2CAP上层。

蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。3.蓝牙核心协议介绍 1)基带协议 基带和链路控制层确保微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。它使用查询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL),而且,在同一射频上可实现多路数据传送。ACL适用于数据分组,SCO适用于话音以及话音与数据的组合,所有的话音和数据分组都附有不同级别的前向纠错(FEC)或循环冗余校验(CRC),而且可进行加密。此外,对于不同数据类型(包括连接管理信息和控制信息)都分配一个特殊通道。 可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达L2CAP。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。 2)连接管理协议(LMP) 该协议负责各蓝牙设备间连接的建立。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。 3)逻辑链路控制和适配协议(L2CAP) 该协议是基带的上层协议,可以认为它与LMP并行工作,它们的区别在于,当业务数据不经过LMP时,L2CAP为上层提供服务。L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP 允许高层协议以64k字节长度收发数据分组。虽然基带协议提供了SCO和ACL两种连接类型,但L2CAP只支持ACL。 4)服务发现协议(SDP)

蓝牙协议栈BlueZ的移植与开发

蓝牙协议栈BlueZ的移植与开发* 欧阳鑫 于红岩 吕杨 (昆明理工大学信息工程与自动化学院,昆明,650051) 摘要:蓝牙技术是当前国内外科技界和产业界研究开发的热点技术,其应用范围包括手机、PDA、信息家电设备等领域,蓝牙技术在嵌入式系统上必将得到广泛的应用。而要在嵌入式系统上提供蓝牙开发支持,蓝牙协议栈的移植是关键。本文分析了蓝牙协议栈BlueZ体系结构,详细介绍了在S3C2410开发板上移植BlueZ的步骤,建立了嵌入式蓝牙应用开发平台,并提出了用BlueZ 开发蓝牙应用程序的思路。 关键字:蓝牙技术;蓝牙协议栈BlueZ;移植;S3C2410;Linux 中图分类号:TP368.1 文献标识码:A BlueZ Porting and Programming Ou Yangxin,Yu Hongyan,Lv Yang (College of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650051,China) Abstract: Bluetooth technology is the focused on by the domestic and overseas research institutes. This technology is widely used in mobile phone, PDA, and Information Appliance devices. In the future,bluetooth technology will be widely used in embedded system. Built some bluetooth applications on embedded system,the key technology is porting bluetooth protocol suites to platform. In this paper,we study the BlueZ architecture,describe the steps of Porting BlueZ to S3C2410 Platform in detail,and build the embedded bluetooth application programming platform. In the end, we also give the idea of bluetooth programming. Keywords: bluetooth technology,bluetooth protocol suites BlueZ,porting, S3C2410, Linux 1引言 蓝牙技术是一项低价格、低功耗的射频技术,它能使蓝牙设备实现近距离无线通信。由于蓝牙技术有广泛的应用前景,它已成为当前国内外科技界和产业界研究开发的热点技术。Linux 操作系统的开放的蓝牙协议栈主要包括IBM公司的BlueDrekar,Nokia公司的Affix, Axis公司的OpenBT和官方协议栈BlueZ[1]。BlueZ是公布在Internet上的免费蓝牙协议栈,由于它结构简单,应用方便,具有灵活、高效和模块化的特点且具有较强的兼容性,因此BlueZ已经成为Linux操作系统下的官方的蓝牙协议栈。 S3C2410x是三星公司推出的一款高性价比32位的RISC处理器,内含一个由ARM公司设计的ARM920T核,具有低功耗高性能的特点,适用于对价格及功耗敏感的场合。本文使用的S3C2410开发板主要包含以下部件:S3C2410x芯片,32MB Nor Flash,64MB SDRAM,IIC存储器接口,LCD控制器,UART接口,一个USB(Host)接口。 利用S3C2410开发板上的USB接口,可以外扩蓝牙适配器,但S3C2410开发板上没有实现蓝牙设备驱动。本文对蓝牙协议栈BlueZ进行分析,移植BlueZ到开发板上实现蓝牙设备驱动,提出了使用BlueZ开发蓝牙应用程序的基本思路。 *基金项目:云南省自然科学基金项目(2004F0024M)。

由浅入深,蓝牙4.0BLE协议栈开发攻略大全

本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第五部分: 第五部分知识点: 第二十一节 DHT11温湿度传感器 第二十二节蓝牙协议栈之从机通讯 第二十三节蓝牙协议栈主从一体之主机通讯 第二十四节 OAD空中升级 第二十五节 SBL串口升级 有关TI 的CC254x芯片介绍,可点击下面链接查看: 主流蓝牙BLE控制芯片详解(1):TI CC2540 同系列资料推荐: 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3) 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(4) 有关本文的工具下载,大家可以到以下这个地址: 朱兆祺ForARM 第二十一节 DHT11温湿度传感器 DHT11简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相

连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。 技术参数 供电电压: 3.3~5.5V DC 输出:单总线数字信号 测量范围:湿度20-90%RH,温度0~50℃ 测量精度:湿度+-5%RH,温度+-2℃ 分辨率:湿度1%RH,温度1℃ 互换性:可完全互换, 长期稳定性: < ±1%RH/年 DHT11 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由 5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11 的数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和。其中校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。例如,某次从 DHT11 读到的数据如图所示: 协议栈DHT11测试

PC端微软蓝牙协议栈的安装

PC端微软蓝牙协议栈的安装 利用https://www.sodocs.net/doc/ff3791445.html,2005平台和C# 语言编写蓝牙信息系统(包括蓝牙文件传输和蓝牙信息广播)需要微软蓝牙协议栈(MS Stack)的支持。下面就PC端如何安装微软蓝牙协议栈进行操作说明。 1、将USB的蓝牙适配器(BlueTooth Dongle)插入到USB接口中。Windows XP 等系统会提示发现新的硬件。点击取消按钮。如下图所示 2、右键点击桌面上我的电脑,选择属性,进入系统属性对话框,选择硬件,点击设备管理器,将会出现下图所示:

选择详细项,从下拉框中选择Hardware Ids,如下图所示:

4、找到C:\Windows\inf\bth.inf目录下文件,打开bth.inf文件,找到如下所示行: ;------------- Device section - Start ----------------------- [ALPS.NT.5.1] ALPS Integrated Bluetooth Device= BthUsb, USB\Vid_044e&Pid_3005 Alps Bluetooth USB Adapter= BthUsb, USB\Vid_044e&Pid_3006 [Belkin.NT.5.1] Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0081 Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0084 5、在Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0084后在增加一行如下面所示即可。 ;------------- Device section - Start ----------------------- [ALPS.NT.5.1] ALPS Integrated Bluetooth Device= BthUsb, USB\Vid_044e&Pid_3005 Alps Bluetooth USB Adapter= BthUsb, USB\Vid_044e&Pid_3006 [Belkin.NT.5.1] Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0081 Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0084 Belkin Bluetooth Adapter= BthUsb, USB\Vid_050d&Pid_0012 6、保存文件和关闭文件。 7、再在设备管理器中卸载未知的USB device(即刚才的蓝牙设备)。 8、从USB接口拔出USB蓝牙适配器,然后再将USB蓝牙适配器插入USB接口。 9、Windows XP 等系统会提示发现新的硬件,但这一次我们选择“No, not this time”,选择下一步按钮,如下图所示:

蓝牙音频传输协议

蓝牙音频传输协议 篇一:蓝牙通信协议 蓝牙通信协议(适合于蓝牙开发工程师) 蓝牙协议栈 ----蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作。互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈。但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层。 ----完整的蓝牙协议栈如图1所示,不是任何应用都必须使用全部协议,而是可以只使用其中的一列或多列。图1显示了所有协议之间的相互关系,但这种关系在某些应用中是有变化的。 ----完整的协议栈包括蓝牙专用协议(如连接管理协议LMP和逻辑链路控制应用协议L2CAP)以及非专用协议(如对象交换协议OBEX和用户数据报协议UDP)。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互操作,充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的开放性保证了设备制造商可以自由地选用其专用协议或习惯 1 使用的公共协议,在蓝牙技术规范基础上开发新的应用。 蓝牙协议体系中的协议 ----蓝牙协议体系中的协议按SIG的关注程度分为四层: 核心协议:BaseBand、LMP、L2CAP、SDP; 电缆替代协议:RFCOMM; 电话传送控制协议:TCS-Binary、AT命令集; 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

----除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制 器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于 L2CAP的下层,但HCI也可位于L2CAP上层。 ----蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。 ----1(蓝牙核心协议 -?基带协议 ----基带和链路控制层确保微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。 2 它使用查询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL),而且,在同一射频上可实现多路数据传送。ACL适用于数据分组,SCO适用于话音以及话音与数据的组合,所有的话音和数据分组都附有不同级别的前向纠错(FEC)或循环冗余校验(CRC),而且可进行加密。此外,对于不同数据类型(包括连接管理信息和控制信息)都分配一个特殊通道。 ----可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达L2CAP。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。 ---?连接管理协议(LMP) ----该协议负责各蓝牙设备间连接的建立。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。

蓝牙4.0协议栈按键流程分析

在介绍蓝牙按键流程分析之前,我们需要了解一个概念,那就是就是OSAL。什么是OSAL呢? 可能大伙对于OS是比较了解的,学了计算机的搞过OS的也基本接触过,简单来说就是一个操作系统抽象层,可以理解为运行在CC2540 上的操作系统,说操作系统还不能算,TI的OSAL只实现了任务切换和消息机制。并且把协议栈的代码、硬件处理的代码,用户程序的代码等分别放到了OSAL 层的不同任务处理函数中去了,各任务函数之间通过消息机制、同一个任务之间通过事件的的方式来通信。 什么是EVENT 事件? OSAL 为每个任务函数分配了一个16 位的事件变量,每一位代表一个事件,最高位为0x8000 表示为系统事件SYS_EVENT_MSG。其余的15 位留给用户自定义需要的事件。通常事件由定时 器启动,比如一秒后我要点亮LED2,这就需要发送一个点亮LED2 的事件,然后等待定时器1s后溢出,于是启动点亮LED2事件,事件会调用相应的hal 层API点亮LED2。 什么是MSG 消息 MSG 是比EVENT 事件更具体并且可以携带数据的一种通信方式,MSG 的标记是按数值,而不是按位。比如0x01 和0x02 是两个不同的消息,但对于事件0x03 则是0x01 事件和0x02 事件的组合。MSG 收发使用osal_msg_send()和osal_msg_receive();当调用osal_msg_send()发送一个msg 的同时会在EVENT 列表中触发一个message ready event。(请注意最后一句话,这句话点出了为什么按键时间的触发为何会导致系统事件也接受到了) 现在以SimpleBLEPeripheral 为例说明按键流程 在SimpleBLEPeripheral 任务初始化函数中有这样一条代码: // Register for all key events - This app will handle all key events RegisterForKeys( simpleBLEPeripheral_TaskID ); 这个函数来自OnBoard.c 源文件中 /********************************************************************* * Keyboard Register function * * The keyboard handler is setup to send all keyboard changes to * one task (if a task is registered). * * If a task registers, it will get all the keys. You can change this * to register for individual keys. *********************************************************************/ uint8 RegisterForKeys( uint8 task_id ) { // Allow only the first task if ( registeredKeysTaskID == NO_TASK_ID ) {

智能手环开发方案--蓝牙通讯协议

智能手环开发方案--蓝牙通讯协议 深圳智能手环方案公司《酷点网络》定制手环方案,本文档针对手环显示,控制的需求说明。 1.1 编写目的 本协议针对智能手环显示,控制的需求说明,供开发人员,测试人员,美工参考。 1.3 项目术语 数据库字段全为小写 1.4 参考资料 1.4.1 手机端app和手环蓝牙模块通讯协议采用10Byte数据传输,1Byte校验码,1Byte 1.4.1 数据校验方式:Byte10=(Byte1+Byte2+Byte3+Byte4+Byte5+Byte6+Byte7+Byte8+Byte9)&0xFF 2 系统需求 2.1任务概述 1,睡眠追踪记录 2,运动步数追踪记录 3,手机来电提示。 4,手机短信提示。 5,定时定点提醒 6,手机APP设置手环时间。 2.2 功能描述 2.2.1 睡眠追踪记录 1,手环蓝牙模块1分钟检测到Sensor数据变化在某一区间(代表不运动)时开始进行记录时间A,直到Sensor数据开始变化(1分钟内都在大范围变化)时结束,时间为B。 B-A 的时间间隔就为此次睡眠时间。此时将数据上报给手机端App。

3,读取历史睡眠记录数 4,接受历史睡眠记录数 2.2.2,运动步数追踪记录 1,计步模式两种 1,按目标计步 2,随意走动即计步统计 2,数据保存 1,如果到23:59分目标还未完成,保存目标记步,且自动切换到随意模式。 2.2.4 定时提醒 手机到手环蓝牙芯片 1秒震动

2.2.5 手机设置手环时间,日期,星期设置 1,日期年月日 4Byte,数据位的前4个Byte表示,高位为年低位为日。 eg: 2014 - 10 -31 数据位表示为:0x 14 0E 0A 1F 20: 0x14 14: 0x0E 10: 0x0A 31: 0x1F 2,时间2Byte ,数据为的后2个Byte表示高位为小时,低位为分钟,eg:15:56 数据表示为:0x 0F 38 3, 秒 1 Byte eg: 30 秒数据表示为 0x 1E 5,星期几 1Byte eg: 星期1 ,0x 01 范围:0x 01 到 0x07 2.2.6,设置闹钟时间。

原理解析之蓝牙协议栈和语音网关3

◆蓝牙耳机的工作原理 下面重点讲述下蓝牙耳机的工作原理: 关于音频流的蓝牙传输可以通过两个方式: 1) 通过PCM接口来传送 2)通过模拟UART来传送 下面分别来讲述: 1)通过PCM接口来传送 通过音频播放器(eg: Media Player)来打开音频文件,调用Audio驱动,音频文件通过解码后,由PCM输出到Host端蓝牙模块的PCM输入端,接着,经过蓝牙模块的处理后,由RF 无线模块发送给Client 端蓝牙设备. Client 端蓝牙设备经由无线接收模块后,滤波,稳压,经微处理芯片处理后,直接由Speaker播放. 2)通过模拟UART来传送 通过设置注册表【HKEY_LOCAL_MACHINE\Services\BTAGSVC】 IsEnabled =1 使得系统引导时自动加载语音网关(AG)服务. 首先,通过手动配置建立Host端蓝牙设备与Client端蓝牙设备ACL链接(面向无连接的异步链路),接着在Applicaiton或Audio Driver中调用 IOCTL_AG_OPEN_AUDIO,重新建立Host端蓝牙设备与Client端蓝牙设备SCO链接(面向连接的同步链路),接着AG自动发送waveOutMessage((HWAVEOUT)i, WODM_BT_SCO_AUDIO_CONTROL, 0, TRUE); 从而建立了Audio至蓝牙芯片之间的通道,也即,实现了音频流到蓝牙模块的传送. 然后,经由主机端蓝牙模块将音频流打包经由RF模块发送出去. 客户端蓝牙耳机接收到无线音频包后,滤波,稳压,经微处理芯片处理后,由PCM传送给音频编解码器芯片,最后,由Speaker播放. 下面这段段码是建立Host端蓝牙设备与Client端蓝牙设备SCO链路 1.HANDLE h = CreateFile(L"BAG0:",0,0,NULL,OPEN_EXISTING,0,NULL); 2.if (INVALID_HANDLE_VALUE == h) { 3. wprintf(L"Error calling CreateFile on Audio Gateway.\r\n"); 4.return 0; 5. } 6.

百度智能手环蓝牙私有通信协议

智能手环蓝牙私有通信协议文档 百度在线网络技术(北京)有限公司 (版权所有,翻版必究)

目录 前言 (5) 1名词解释与约定 (6) 1.1名词解释 (6) 1.1.1设备 (6) 1.1.2手机 (6) 1.2约定 (6) 1.2.1协议栈字节序 (6) 1.2.2 L2 层V-length注意项 (6) 2协议结构介绍 (6) 2.1协议栈结构图 (6) 2.2 L0(UART Profile) (7) 2.2.1模块图 (7) 2.2.2协议层功能描述 (7) 2.3 L1(Transport layer) (8) 2.3.1协议层功能描述 (8) 2.3.2协议层数据包结构 (8) 2.3.3 L1版本号 (9) 2.4 L2(Application layer) (9) 2.4.1协议层数据包结构 (9) 3 L2 command详解 (9) 3.1 Command 列表 (9) 3.2固件升级命令(command id 0x01) (10) 3.2.1 L2 版本号 (10) 3.2.2固件升级命令key列表 (10) 3.2.3进入固件升级模式请求key (10) 3.2.4进入固件升级模式返回key (10) 3.3设置命令(command id 0x02) (11) 3.3.1 L2 版本号 (11) 3.3.2设置命令key列表 (11) 3.3.3时间设置key (11) 3.3.4闹钟设置key (12) 3.3.5获取设备闹钟列表请求key (12) 3.3.6获取设备闹钟列表返回key (12) 3.3.7用户profile设置key (13) 3.3.8防丢设置key (13) 3.3.9计步目标设定 (13) 3.3.10久坐提醒设置key (14) 3.3.11左右手key (14) 3.3.12 手机操作系统设置 (14) 3.3.13 来电通知电话列表设置 (15) 3.3.14 来电通知开关 (15) 3.4绑定命令(command id 0x03) (15)

蓝牙4.0BLE学习之协议栈

在线学习好工作https://www.sodocs.net/doc/ff3791445.html,/ 蓝牙4.0BLE学习之协议栈 蓝牙4.0BLE协议栈介绍 问题:什么是BLE协议栈?BLE协议栈与BLE协议的关系? 顾名思义,人类之间需要一种语言才能沟通,机器之间,电子之间也有一个标准,也就是作为通讯标准,也就是通讯协议。 协议:定义了一系列通讯标准,通讯双方都按照这一标准,进行数据通讯。 协议栈:协议的具体实现形式,实现的函数库,固件库。 把个个协议集合到了一起,以函数库的形式实现,并用这些给用户提供一些应用层的API接口,用户可以进行一些调度。 问题:如何使用BLE协议栈进行开发? 三个步骤: 1.不需要具体了解BLE协议栈的具体复杂的过程,只需要知道它的数据从哪里来,需要到哪里去就行了。 2.根据BLE协议栈调用它里面的函数,实现自己的一些功能。 3.可以自己编写一些函数,实现自己需要特定的功能。 协议结构图

第一层:physicallayer(物理层) 信道带宽提供2M,提供三个广播信道1M。 第二层:link layer(链路层) 执行一些基带协议,底层的数据包管理协议。 第三层:host controller interface (主机控制接口层) 提供主机与控制层的通讯方式,以及命令格式,重用蓝牙标准,比如一些串口,USB等等。 第四层:L2CAP(逻辑链路于适配器协议层) 为它上层提供数据业务,提供端到端的逻辑数据通信。 第五层:security manager(SM)安全管理层 层与层之间会有通信,它是建立数据交换安全方面的数据知识。 第六层:attribute protocol(ATT)通用接入层 定义了一些通用接口,供应用层和底层之间的调用,比如你要调底层的硬件模块的东西,就需要这个层的底层的驱动模块去实现它的一些功能,所以它会同时封装一些API的函数设置。

nRF51822芯片上的BLE蓝牙协议栈

nRF51822芯片上的BLE蓝牙协议栈 本文介绍了在nRF51822芯片上使用S110 SoftDevice协议栈构建一个最小的BLE应用的过程。 1初始化介绍 有一些初始化函数通常在执行一个BLE应用之前调用,下面的表格中列出了这些初始化调用函数,在后面将对它们进行详细的介绍。 大部分采用数据结构的形式作为输入参数,这些数据结构包含一系列的配置和选项信息,阅读代码中的注释能更好地理解它们。 在广播开始之后,你就进入了main函数中的for循环。 2 协议栈S110 SoftDevice 为了使用独特的射频特性,你必须使能S110 SoftDevice协议栈。见《S110 nRF51822 SoftDevice Specification》(S110 nRF51822 SoftDevice协议栈说明书)中对硬件资源的详细需求。 3 广播 用于广播的数据结构如下: ble_gap.h 中ble_gap_conn_sec_mode_t ble_advdata.h 中ble_advdata_t

注意:传递给sd_ble_gap_device_name_set()的安全模式仅适于设备本身的名字。 广播参数(ble_gap_adv_params_t)必须通过sd_ble_gap_adv_start()来传递: 4 连接参数 SDK提供了一个名为ble_conn_params的模块用于管理连接参数更新,它通过SoftDevice API进行处理,包括请求的时间和第一次请求被拒绝再发送一个新的请求。 在初始化结构体ble_conn_params_init_t中,定义了更新过程的有关参数,例如,是否开始连接,什么开始写入一个特定的CCCD,是否使用连接参数,发送更新请求的延时等等。 在初始化函数ble_conn_params_init()中,使用封装了初始化连接参数(ble_gap_conn_params_t)的结构体ble_conn_params_init_t作为输入参数进行连接参数初始化。 ble_conn_params SDK模块确保与主机(集中器)的连接参数相适应,如果不适应,外围设备将要求更改连接参数,超过设定的更新次数都没有更新成功后,它就会断开连接或者根据设置返回一个事件到应用层。 5 服务 服务可以通过sd_ble_gatts_service_add()进行添加,最好不要在应用层代码中建立服务,而是在一个单独的文件中建立服务。一个服务不是主服务就是次服务,但是在通常实际的应用中大部分使用主服务。变量service_uuid就是你想用于服务的UUID。变量service_handle是一个输出变量,当创建一个服务的时候将会返回一个唯一的句柄值,这个句柄可以在以后用于识别不同的服务。 6 特性 特性可以通过sd_ble_gatts_characteristic_add()函数进行添加,它有4个参数。为了代码清晰,这个函数应该只能出现在服务文件中,而不能出现在应用层中。 第1个参数是特性要加入的服务的句柄,第2个参数是特性的结构体,它是一个全局变量,它包含了特性可能用到的性质(读,写,通知等)。第3个参数是值属性的描述,它包含了它的UUID,长度和初始值。第4个参数是返回的特性和描述符的唯一句柄,这个句柄可以在以后用于识别不同的特性。例如,在写事件中用于识别哪一个特性被写入。

蓝牙协议栈的原理和结构

蓝牙协议栈的原理和结构 蓝牙,这个已经不是什么新鲜的技术了,相信大多数人都是了解的。那么对于这方面,我们可以在嵌入式操作中进行一下实现。在蓝牙系统中,为了支持不同应用,需要使用多个协议,这些协议按层次组合在一起,构成了蓝牙协议栈。蓝牙协议栈是蓝牙技术的核心组成部分,它能使设备之间互相定位并建立连接,通过这个连接,设备间能通过各种各样的应用程序进行交互和数据交换。 1、蓝牙协议栈体系结构 蓝牙协议栈体系结构为分层结构,具体如图所示 蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作。互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈。并不是任何应用都必须使用全部协议,而是可以只使用其中的一层或多层。但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层。

设计蓝牙协议栈的主要原则是尽可能地利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互通性以及充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的的开放性保证了设备制造商可自由地选用其专利协议或常用的公共协议,在蓝牙技术规范基础上开发新的应用。蓝牙技术规范包括Core和Profiles两大部分。Core是蓝牙的核心,主要定义蓝牙的技术细节;Profiles部分定义了在蓝牙的各种应用中的协议栈组成,并定义了相应的实现协议栈。 按照各层协议在整个蓝牙协议体系中所处的位置,蓝牙协议可分为底层协议、中间层协议和高层协议三大类。 2、蓝牙底层协议 蓝牙底层协议实现蓝牙信息数据流的传输链路,是蓝牙协议体系的基础,它包括射频协议、基带协议和链路管理协议。 (1)射频协议(Radio Frequency Protoc01) 蓝牙射频协议处于蓝牙协议栈的最底层,主要包括频段与信道安排、发射机特性和接收机特性等,用于规范物理层无线传输技术,实现空中数据的收发。蓝牙工作在2.4GHz ISM 频段,此频段在大多数国家无须申须运营许可,使得蓝牙设备可工作于任何不同的地区。 信道安排上,系统采用跳频扩频技术,抗干扰能力强、保密性好。蓝牙SIG制定了两套跳频方案,其一是分配79个跳频信道,每个频道的带宽为1MHz,其二是23信道的分配方案,1.2版本以后的蓝牙规范目前已经不再推荐使用第二套方案。 (2)基带协议,S((Base Band Protoc01) 基带层在蓝牙协议栈中位于蓝牙射频层之上,同射频层一起构成了蓝牙的物理层。 基带层的主要功能包括:链路控制,比如承载链路连接和功率控制这类链路级路由;管理物理链路,SCO链路和ACL链路;定义基带分组格式和分组类型,其中SCO分组有HVl、HV2、HV3和DV等类型,而ACL分组有DMl、DHl、DM3、DH3、DM5、DH5、AUXl 等类型;流量控制,通过STOP和GO指令来实现;采用13比例前向纠错码、23比例前向纠错码以及数据的自动重复请求ARQ(Automatic Repeat Request)方案实现纠错功能;另外还有处理数据包、寻呼、查询接入和查询蓝牙设备等功能。

低功耗蓝牙协议栈全面解答

低功耗蓝牙协议栈全面解答 协议栈框架 一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。在深入BLE协议栈各个组成部分之前,蓝牙模块厂家-云里物里科技带大家先看一下BLE协议栈整体架构。 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。具体来说,BLE协议栈主要由如下几部分组成:

PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。 LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link(连接),就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL 层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP 或者ATT。 HCI(Host controller interface)。HCI是可选的(具体请参考文章:三种蓝牙架构实现方案(蓝牙协议栈方案),HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。 GAP层(Generic access profile)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。 L2CAP层(Logic link control and adaptation protocol)。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。 SMP(Secure manager protocol)。SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。 ATT(Attribute protocol)。简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute 除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT 层。 GATT(Generic attribute profile)。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE 协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。

A2DP协议 中文图文解析

随着蓝牙技术在电子产品中的日益普及,蓝牙音频设备也层出不穷,其中具有免提功能的蓝牙耳机和蓝牙音频网关的应用是最典型的例子。但免提单元与音频网关进行音频传输建立起来的SCO连接,仅能支持64Kb/s电信级语音质量的音频流,这也就限制了蓝牙音频质 量的提高,同时也影响了蓝牙的娱乐消费市场。为了满足人们对高质量音频的需求,进一步扩大蓝牙产品市场,蓝牙特殊兴趣小组SIG组织,在蓝牙 1.1规范的应用框架基础上又单独提出了高级音频分发框架(Advanced Audio Distribution Profile,A2DP)。该框架利 用了在L2CAP层建立起来的ACL异步无连接链路来传输高质量的单声道或者立体声音频数据,有效负载的传输速率可以达到300~400Kb/s。 A2DP框架概述 在娱乐消费市场中,A2DP实例化应用就是用音乐播放器把音频数据 通过ACL连接发送到耳机或者音箱上。目前的框架规范中,并不支持同步的一点对多点的广播式音频分发,而对于点对点音频的分发,又存在着两种不同的角色,一个是信源设备(SRC),这种设备作为发 起者将数字音频流发送到Piconet网中;另一个是信宿设备,是接收信源发出的音频流的设备。如果蓝牙音乐播放器是信源设备,那么与之交互的蓝牙耳机就是信宿设备,信源和信宿的区别就在于,它是发起者还是接收者。下面对该框架所涉及的具体协议和其依赖框架进行分析。 1 A2DP应用框架

在典型的蓝牙音频相关框架的整体结构中,A2DP框架所处的位置如图1所示。 服务发现应用框架(SDAP)所提供的功能,是向其他蓝牙设备提供自身所具备的服务,并且能够使用远程设备所提供的服务和功能。在实际应用中,几乎所有框架都支持服务发现协议(SDP)。蓝牙音频视频遥控应用框架(AVRCP)实现了蓝牙设备之间的遥控功能,例如,音乐播放器的前进、后退、停止、播放等控制信令的传输。免提功能头戴式设备应用框架(HFP/HSP),最主要的应用就是实现了蓝牙耳机的免提功能和某些蓝牙设备的音频网关功能。 高级音频分发框架(A2DP)依赖于通用音频视频分发框架(GAVDP),GAVDP定义了设置音频和视频流传输的步骤,而A2DP则进一步定义了音频流传输的参数和步骤细节。 在实际应用中,逻辑链路控制适配层协议(L2CAP)要求比较高的可靠性,基带的广播数据分组将被禁止使用,因此,L2CAP层并不支持可靠的多点传输信道,这也就是A2DP框架不支持多点广播式音频分发的主要原因之一。而对于面向高层协议的开发和应用者,L2CAP层协议是透明的,因此这里对A2DP轻型框架具体实现的相关描述,也仅限于L2CAP层以上,A2DP相关的协议及框架如AVDTP、GAVDP等协议模块的设计。

蓝牙通信协议

蓝牙通信协议(适合于蓝牙开发工程师) 蓝牙协议栈 ----蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作。互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈。但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层。 ----完整的蓝牙协议栈如图1所示,不是任何应用都必须使用全部协议,而是可以只使用其中的一列或多列。图1显示了所有协议之间的相互关系,但这种关系在某些应用中是有变化的。 ----完整的协议栈包括蓝牙专用协议(如连接管理协议LMP和逻辑链路控制应用协议L2CAP)以及非专用协议(如对象交换协议OBEX和用户数据报协议UDP)。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互操作,充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的开放性保证了设备制造商可以自由地选用其专用协议或习惯使用的公共协议,在蓝牙技术规范基础上开发新的应用。 蓝牙协议体系中的协议 ----蓝牙协议体系中的协议按SIG的关注程度分为四层: 核心协议:BaseBand、LMP、L2CAP、SDP; 电缆替代协议:RFCOMM; 电话传送控制协议:TCS-Binary、AT命令集; 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。 ----除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP 的下层,但HCI也可位于L2CAP上层。 ----蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。 ----1.蓝牙核心协议 -·基带协议 ----基带和链路控制层确保微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。

蓝牙协议栈移植

蓝牙协议栈移植 目录 第一步:下载文件 (1) 第二步:配置内核支持Bluetooth (2) 第三步:交叉编译蓝牙协议栈库文件 (3) 第四步:移植到arm板 (4) 硬件平台:S3C6410开发板 Linux内核:linux-3.0.1 作者:孙怀亚 说明:这是一个6410+usb蓝牙移植过程! 在做下面的过程中,我认为你是有个有点嵌入式开发经验的人,并且交叉编译器已经安装完毕,内核源码已经可以编译通过运行等!特别要强调,usb总线驱动一定要是好的。 如有需要请联系:sunhuaiya@https://www.sodocs.net/doc/ff3791445.html, 第一步:下载文件 bluez-lib-3.36.tar.gz expat-2.0.1.tar.gz dbus-1.2.16.tar.gz glib-2.22.4.tar.bz2 libusb-0.1.12.tar.gz bluez-utils-3.36.tar.gz(哥花钱下载的!肯爹的官网没下载下来!)

第二步:配置内核支持Bluetooth make menuconfig [*] Networking support ---> <*> Bluetooth subsystem support ---> //蓝牙子系统必须选择 <*> L2CAP protocol suppor //逻辑链路控制和适配协议。 <*> SCO links support //蓝牙语音和耳机支持 <*> RFCOMM protocol suppor //面向流的传输协议,支持拨号网络等[*] RFCOMM TTY support // <*> BNEP protocol support //蓝牙网络封装协议,自组网支持 [*] Multicast filter support //蓝牙多播,支持支持BNEP [*] Protocol filter support //蓝牙多播,支持支持支持BNEP <*> HIDP protocol support //基本支持协议 Bluetooth device drivers ---> <*> HCI USB driver //USB蓝牙模块支持 <*>HCI UART driver //基于串口,CF卡或PCMCIA的蓝牙 <*> HCI BlueFRITZ! USB driver <*> HCI VHCI (Virtual HCI device) driver

相关主题