资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,蓝牙模块相关知识交流,1,概述,蓝牙技术的特点,蓝牙协议体系结构,Android Bluetooth,架构,2,概述,“蓝牙”是一种开放的技术规范,它可在世界上的任何地方,实现短距离的无线语音和数据通信。,蓝牙技术的发展:,1994,年,爱立信移动通信公司开始研究在移动电话及其附件,之间实现低功耗、低成本无线接口的可行性。随着项目的进,展,爱立信公司意识到短距无线通信的应用前景无限广阔。,(,ShortDistance WirelessCommunication,),3,爱立信将这项新的无线通信技术命名为蓝牙,(,Bluetooth)。,Bluetooth,取自10世纪丹麦国王,HaraldBluetooth,的名字。,1998年5月,爱立信联合诺基亚(,Nokia)、,英特尔,(,Intel)、IBM、,东芝(,Toshiba),这4家公司一起成立了,蓝牙特别兴趣小组(,SpecialInterest,Group,SIG),,负,责蓝牙技术标准的制定、产品测试,并协调各国蓝牙的具体,使用。,目前,SIG,已经采纳蓝牙,4.0,核心规范技术拥有极低的运,行和待机功耗,使用一粒纽扣电池甚至可连续工作数年之久。,同时还拥有低成本,跨厂商互操作性,,3,毫秒低延迟、,100,米,以上超长距离、,AES-128,加密等诸多特色,可以用于计步器、,心律监视器、智能仪表、传感器物联网等众多领域,大大扩,展蓝牙技术的应用范围。,4,蓝牙技术的特点,蓝牙是一种短距无线通信的技术规范,它最初的目标是取代,现有的掌上电脑、移动电话等各种数字设备上的有线电缆连,接。,(,1,)全球范围适用:蓝牙工作在,2.4GHz,的,ISM,频段,全球大多数国家,ISM,频段的范围是,2.4-2.4835GHz,,使用该频段无需向各国的无线电资源管理部门申请许可证。,(,2,)同时可传输语音和数据:蓝牙采用电路交换和分组交换技术,支持异步数据信道、三路语音信道以及异步数据与同步语音同时传输的信道。每个语音信道数据速率为,64kbit/s,,语音信号编码采用脉冲编码调制(,PCM,)或连续可变斜率增量调制(,CVSD,)方法。蓝牙有两种链路类型:异步无连接(,ACL,)链路和同步面向连接(,SCO,)链路。,5,(,3,)可以建立临时性的对等连接:,根据蓝牙设备在网络中的角色,可分为主设备(,Master,)与从设备(,Slave,)。主设备是组网连接主动发起连接请求的蓝牙设备,几个蓝牙设备连接成一个皮网(,Piconet,)时,其中只有一个主设备,其余的均为从设备。皮网是蓝牙最基本的一种网络形式,最简单的皮网是一个主设备和一个从设备组成的点对点的通信连接。,(,4,)具有很好的抗干扰能力:工作在,ISM,频段的无线电设,备有很多种,如家用微波炉、无线局域网(,WLAN,),Home RF,等产品,蓝牙采用跳频(,FrequencyHopping,)方式来扩展,频谱,将,2.402,2.48GHz,频段分成,79,个频点,相邻频点间,隔,1MHz,。抵抗来自这些设备的干扰。,6,(,5,)蓝牙模块体积很小、便于集成。,(,6,)低功耗:,蓝牙设备在通信连接(,Connection,)状态下,,有四种工作模式:激活(,Active,)模式、呼吸(,Sniff,)模式、保持(,Hold,)模式、休眠(,Park,)模式。,Active,模式是正常的工作状态,另外三种模式是为了节能所规定的低功耗模式。,(7)开放的接口标准:,SIG,为了推广蓝牙技术的使用,将蓝牙的技术标准全部公开,全世界范围内的任何单位和个人都可以进行蓝牙产品的开发,只要最终通过,SIG,的蓝牙产品兼容性测试,就可以推向市场。,(8)成本低:随着市场需求的扩大,各个供应商纷纷推出自己的蓝牙芯片和模块,蓝牙产品价格飞速下降。,7,蓝牙移动终端,移动电话(,Mobile Phone),无绳电话(,Cordless Phone),笔记本电脑(,Notebook),个人数字助理(,PDA),数字相机(,Digital cameras),打印机(,Printer),局域网络(,Network),等,8,蓝牙体系结构,蓝牙技术的系统结构分为三大部分:,1.,底层硬件模块,2.,中间协议层,3.,高层应用,9,蓝牙协议栈体系结构示意图,10,一、底层硬件模块,底层硬件部分包括无线跳频(,RF,)、基带(,BB,)和链路管理(,LM,)。,RF,层,通过,2.4GHz,无需授权的,ISM,频段的微波,实现数据位流的过滤和传输,本层协议主要定义了蓝牙收发器在此频带正常工作所需要满足的条件。,基带,负责跳频以及蓝牙数据和信息帧的传输。,链路管理(,LM,),负责连接、建立和拆除链路并进行安全控制。,链路为,SCO,同步话音链路与,ACL,异步数据链路。,蓝牙的,SIG,规定了四种与硬件连接的物理总线方式:,USB,、,RS232,、,UART,和,PC,卡,11,二、中间协议层,中间协议层的一系列协议构成了蓝牙协议体系:,蓝牙协议体系中的协议按,SIG,的关注程度分为四层:,1.,核心协议:,BaseBand,、,LMP,、,L2CAP,、,SDP,;,2.,电缆替代协议:,RFCOMM,;,3.,电话传送控制协议:,TCS-Binary,、,AT,命 令 集;,4.,选用协议:,PPP,、,UDP/TCP/IP,、,OBEX,、,WAP,、,vCard,、,vCal,、,IrMC,、,WAE,。,除上述协议层外,规范还定义了主机控制器接口(,HCI,),位于蓝牙系统的,L2CAP,(逻辑链路控制与适配协议)层和,LMP,(链路管理协议)层之间的一层协议。,12,HCI,协议的作用,其他高层协议,HCI,驱动,物理总线(串口,,USB,等)驱动,主机,物理总线,物理总线固件,HCI,Firmware,LM,RF,蓝牙控制器,HCI,协议提供了统一访问蓝牙控制器的能力。主机控制器以,HCI,命令的形式提供了访问蓝牙硬件的基带控制器、链路管理器、硬件状态寄存器、控制寄存器以及事件寄存器的能力,所有这些功能都要通过内置于蓝牙硬件内部的,HCI,Firmware,来实现。主机通过,HCI,接口向主机控制器内的,HCI,Firmware,发送,HCI,命令,,HCI Firmware,再通过基带命令、链路管理器命令、硬件状寄存器、控制寄存器以及事件寄存器完成该,HCI,命令,从而实现对蓝牙硬件的控制。,13,模块及应用程序接口,14,1,、核心协议,基 带 协 议(,BaseBand,),基带和链路控制层确保各蓝牙设备之间的物理连接。基带协议使用查询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供面向连接(,SCO,)和无连接(,ACL,)两种物理连接方式,而且,同一射频上可实现多路数据传送。,ACL,适用于数据分组,,SCO,适用于话音以及话音与数据的组合,所有的话音和数据分组都进行前向纠错(,FEC,)或循环冗余校验(,CRC,),且可加密。此外,对于不同数据类型(包括连接管理信息和控制信息)都分配一个特殊通道。,可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达,L2CAP,。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。,15,连接管理协议(,LMP,),该协议负责各蓝牙设备间连接的建立。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。,逻辑链路控制和适配协议(,L2CAP,),L2CAP,协议是一个为高层协议屏蔽基带协议的适配协议,位于基带协议之上,属于数据链路层,为高层提供面向连接和面向无连接的数据服务,完成协议复用、分段和重组、服务质量,QoS(Quality Of Service),传输以及组抽象等功能。虽然基带协议提供了,SCO,和,ACL,两种连接类型,但,L2CAP,只支持,ACL,。,16,(1),协议复用:由于基带协议不能识别任何高层协议,所以,L2CAP,必须支持上层协议复用,它能区分诸如服务发现协议、,RFCOMM,协议、电话控制协议等高层协议。,(2),分段与重组:蓝牙基带协议数据包的大小是有限的。发送方需将较大的,L2CAP,包必须分解成小的基带包来发送。在接收方,必须将多个基带包重组为一个完整的,L2CAP,数据包。,(3),服务质量:在,L2CAP,建立连接的过程中允许改变两台蓝牙设备间的服务质量,每个,L2CAP,实体必须监视协议使用的资源并保证服务质量的实现。,(4),组管理:蓝牙的基带协议支持微微网,,即一组设备使用同一时钟同步跳频,,L2CAP,协议的组提取功能可以有效地将,协议的组映射为基带的微微网,以避免,高层协议为了有效的管理组而必须与,基带协议以及链路管理器直接联系。,High Layer,L2CAP,Low Layer(BB or HCI),request,confirm,request,confirm,response,response,17,服务发现协议(,SDP,),服务发现在蓝牙技术框架中起着至关紧要的作用,它是所有用户模式的基础。使用,SDP,可以查询到设备信息和服务类型,从而在蓝牙设备间建立相应的连接。服务发现协议由服务发现代理(,SDA,)、服务发现服务器(,SDS,)、服务数据库管理器(,SDM,)三个模块组成。,2,、电缆替代协议,(RFCOMM),RFCOMM,是基于,ETSI-07.10,规范的串行线仿真协议。它在蓝牙基带协议上仿真,RS-232,控制和数据信号,为使用串行线传送机制的上层协议(如,OBEX,)提供服务。,18,RFCOMM,提供对,RS-232,串口的仿真,包括对数据信号线和非数据信号线的仿真。它既可以仿真两个设备之间的多个串口,也可以支持多个设备之问的多串口仿真,同时,RFCOMM,中还提供了对空调制解调器的仿真。,1,RFCOMM,对九针,RS-232,串口的仿真包括数据信号线和非数据信号线。,2,多串口仿真两个数据终端设备之间通过,RFCOMM,通信,可以打开多达,60,个仿真串口,但是实际打开串口数还要视设备生产商的具体实现以及实际需要而定。,19,3,、电话控制协议,该协议又分为:,1.,二元电话控制协议(,TCS-Binary,或,TCS BIN,),该协议是面向比特的协议,它定义了蓝牙设备间建立语音和数据呼叫的控制信令,定义了处理蓝牙,TCS,设备群的移动管理进程。基于,ITUTQ.931,建议的,TCS Binary,被指定为蓝牙的二元电话控制协议规范。,2.AT,命令集电话控制协议,SIG,定义了控制多用户模式下移动电话和调制解调器的,AT,命令集,该,AT,命令集基于,ITU TV.250,建议和,GSM07.07,,它还可以用于传真业务。,20,4,、选用协议,1.,点对点协议(,PPP,),在蓝牙技术中,,PPP,位于,RFCOMM,上层,完成点对点的连接。,2.TCP/UDP/IP,该协议是由互联网工程任务组制定,广泛应用于互联网通信的协议。在蓝牙设备中,使用这些协议是为了与互联网相连接的设备进行通信。,3.,对象交换协议(,OBEX,),IrOBEX(,简写为,OBEX),是由红外数据协会(,IrDA,)制定的会话层协议,采用简单的和自发的方式交换目标。,OBEX,是一种类似于,HTTP,的协议,它假设传输层是可靠的,采用客户机,/,服务器模式,独立于传输机制和传输应用程序接口(,API,)。,4.,无线应用协议(,WAP,),该协议是由无线应用协议论坛制定的,它融合了各种广域无线网络技术,其目的是将互联网内容和电话传送的业务传送到数字蜂窝电话和其他无线终端上。,21,蓝牙协议结构体系,22,23,三、高层应用,高层应用层具有一套框架,它在蓝牙协议栈的最上部,其中较典型的有拨号网络、耳机、局域网访问、文件传输等,它们分别对应一种应用模式。各种应用程序可以通过各自对应的应用模式实现无线通信。,拨号网络应用可通过仿真串口访问微微网(,Piconet,),数据设备也可由此接入传统的局域网;,用户可以通过协议栈中的,Audio,(音频)层在手机和耳塞中实现音频流的无线传输;,多台,PC,或笔记本电脑之间不需要任何连线,就能快速、灵活地进行文件传输和共享信息,多台设备也可由此实现同步操作。,24,常用应用模式,1,文件传输模式,文件传输模式提供两终端间的数据通信功能,可传输后缀为,.xls,、,.ppt,、,.wav,、,.jpg,和,.doc,的文件(但并不限于这几种),以及完整的文件夹、目录或多媒体数据流 等,提供远端文件夹浏览功能。文件传输协议栈如图,2,所示。,25,2,因特网网桥模式,这种用户模式可通过手机或无线调制解调器向,PC,提供拨号入网和收发传真的功能,而不必与,PC,有物理上的连接。拨号上网需要两列协议栈(不包括,SDP,),如 图,3,所示。,AT,命令集用来控制移动电话或调制解调器以及传送其他业务数据的协议栈。传真采用类似协议栈,但不使用,PPP,及基于,PPP,的其他网络协议,而由应用软件利用,RFCOMM,直接发送。,26,3,局域网访问模式,该用户模式下,多功能数据终端,(DTs),经局域网访问点,(LAP),无线接入局域网,然后,,DTs,的操作与通过拨号方式接入局域网的设备的操作一样,其协议栈如图,4,所示。,27,4,同步模式,同步用户模式提供设备到设备的个人资料管理,(PIM),的同步更新功能,其典型应用如电话簿、日历、通知和记录等。它 要求,PC,、蜂窝电话和个人数字助理,(PDA),在传输和处理名片、日历及任务通知时,使用通用的协议和格式。其协议栈如图,5,所示,其中同步应用模块代表红外移动通信(,IrMC,)客户机或服务器。,28,5.,一机三用电话模式,手持电话机有三种使用方法:,第一,接入公用电话网,作为普通电话使用;,第二,作为不计费的内部电话使用;,第三,作为蜂窝移动电话使用。无线电话和内 部电话使用相同的协议栈;语音数据流直接与基带协议接口,不经过,L2CAP,层。如 图,6,所示。,29,6.,头戴式设备模式,使用该模式,用户打电话时可自由移动。通过无线连接,头戴式设备通常作为蜂窝电话、无线电话或,PC,的音频输入输出设备。头戴式设备协议栈如图,7,所示,语音数据流不经过,L2CAP,层而直接接入基带协议层。头戴式设备必须能收发并处理,AT,命令。,30,Android Bluetooth,架构,31,32,33,BlueZ,介绍,BlueZ,是,Linux OS,开放的,bluetooth,协议栈。协议栈主要包,括,IBM,公司的,BlueDrekar,Nokia,公司的,Affix,Axis,公司的,OpenBT,和官方的协议栈,BlueZ,。,Bluetooth,协议栈,BlueZ,分为两部分:,内核代码:,由,BlueZ,核心协议和驱动程序组成。内核源代码,kernel/net/bluetooth,中。包括,HCI,L2CAP,HID,RFCOMM,SCO,SDP,BNEP,等协议的实现。驱动程序放在,/driver/bluetooth,中,包含,Linux kernel,对各种接口的,Bluetooth device,的驱动。例如:,USB,接口,串口等。,34,用户态程序及工具集:,包括应用程序接口和,BlueZ,工具集。,BlueZ,提供函数库以及应用程序接口,便于程序员开发,bluetooth,应用程序。,BlueZ utils,是主要工具集,实现对,bluetooth,设备的初始化和控制。,参考,www.bluez.org/,35,蓝牙协议层映射到,Bluez,内核模块,PAND user,bnep.ko kbnepd,l2cap.ko,Logical linker control and adaption layer,bnepX,TCP/IP,Hci_uart.ko Hci_usb.ko,Host control interface layer,Bluetooth ChipSet,telnet/app/ftp/ssh,User space,Kernel space,Transport layer,Network layer,Bluetooth.ko,(core socket sysfs),rfcomm.ko,krfcommd,PPP,dund,pppX,Hidp.ko,Hidd,Mice app,sdpd,hciX,rfcomm,/dev/rfcommX,sco.ko,Audio,app,Hci_vhci.ko,Bluetooth socket app,Serial app,36,Bluez,内核空间代码,37,Linux,蓝牙驱动,net/hci_core.c,HCI,在主机端的驱动主要是为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。,HCI,在硬件中的固件与,HCI,在主机端的驱动通信方式有多种,比如像,UART,、,USB,和,PC Card,等等。,hci_core.c,相当于一个框架,用于把各种具体通信方式胶合起来,并提供一些公共函数的实现。,hci_cmd_task,是负责发送,CMD,的任务,它从,hdev-cmd_q,队列中取,CMD,,然后调用,hci_send_frame,把,CMD,发送出去,,hci_send_frame,又会调用实际的,HCI,驱动的,send,函数发送数据。,hci_rx_task,是负责接收数据的任务,它从,hdev-rx_q,队列中取数据,然后根据数据的类型调用上层函数处理。数据包有三种类型:,HCI_EVENT_PKT:,用于处理一些通信事件,比如连接建立,连接断开,认证和加密等事件,这些事件控制协议状态的改变。,HCI_ACLDATA_PKT:,异步非连接的数据包,通过,hci_acldata_packet,提交给上层的,L2CAP,协议处理(,hci_protoHCI_PROTO_L2CAP,)。,HCI_SCODATA_PKT:,同步面向连接的数据包,通过,hci_scodata_packet,提供给上层的,SCO,协议处理(,hci_protoHCI_PROTO_SCO,)。,hci_tx_task,是负责发送数据的任务,发送所有,connection,中的,ACL,和,SCO,数据,以及,hdev-raw_q,中的数据包,。,38,Linux,蓝牙驱动,HCI,为上层提供的接口主要有:,hci_send_sco,:发送,SCO,数据包,把要发送的数据包放入,connection,的发送队列中,然后调度发送任务去发送。,hci_send_acl,:发送,ACL,数据包,把要发送的数据包放入,connection,的发送队列中,然后调度发送任务去发送。,hci_send_cmd,:发送命令数据,把要发送的数据包放入,hdev-cmd_q,队列中,然后调度命令发送任务去发送。,hci_register_proto/hci_unregister_proto,:注册,/,注销上层协议,,HCI,会把接收到的数据转发给这些上层协议。,hci_register_dev/hci_unregister_dev:,注册,/,注销设备,,HCI,会把要发送的数据通过这些设备发送出去。,其它一些公共函数。,39,Linux,蓝牙驱动,net/hci_conn.c,提供了一些连接管理,论证和加密的函数。,net/hci_event.c,事件处理函数,负责状态机的维护,这些事件通常会使连接从一个状态转换另一个状态。,hci_si_event:,用于发送事件。,hci_event_packet:,用于处理底层上报的事件,从,hci_rx_task,处调用过来。,net/hci_sock.c,给上层提供一个,socket,接口,应用程序可以通过,socket,的方式来访问,HCI。hci_sock_init:,中注册了,BTPROTO_HCI,类型,family。,hci_sock_create:,创建,sock,的函数,它的,sock,的,ops,指向,hci_sock_ops。,hci_sock_setsockopt/hci_sock_getsockopt:,设置,/,获取,sock,的一些选项。,hci_sock_sendmsg:,发送消息,根据消息的类型把消息放到适当的队列中。,hci_sock_recvmsg:,接收消息,从接收队列中取消息。,hci_sock_recvmsg:ioctl,函数。,40,Linux,蓝牙驱动,net/hci_sysfs.c,提供一些,sysfs,文件系统接口。,net/l2cap.c,L2CAP,是,HCI,之上的协议,提供诸如,QoS,,分组,多路复用,分段和组装之类的功能。通过,bt_sock_register,为上层提供一个,sock,接口:,l2cap_sock_create:,创建,sock,的函数,它的,sock,的,ops,指向,l2cap_sock_ops。,l2cap_sock_setsockopt/l2cap_sock_getsockopt,设置,/,获取,sock,的一些选项。,l2cap_sock_sendmsg:,发送消息,通过,HCI,提供,hci_send_acl,函数把消息传递给下层的设备。,bt_sock_recvmsg:,接收消息,从接收队列中取消息。,通过,hci_register_proto,向其下的,HCI,注册协议:,l2cap_connect_ind:,处理连接请求。,l2cap_connect_cfm:,确认连接。,l2cap_disconn:,处理断开请求。,l2cap_auth_cfm:,认证确认。,l2cap_encrypt_cfm:,加密确认。,l2cap_recv_acldata:,处理来自,HCI,的数据。,41,Linux,蓝牙驱动,net/sco.c,SCO,也是运行在,HCI,之上的协议,它是面向连接的可靠的传输方式,主要用于声音数据传输。通过,bt_sock_register,为上层提供一个,sock,接口:,sco_sock_create:,创建,sock,的函数,它的,sock,的,ops,指向,sco_sock_ops。,sco_sock_setsockopt/sco_sock_getsockopt,设置,/,获取,sock,的一些选项。,sco_sock_sendmsg:,发送消息,通过,HCI,提供,sco_send_frame,函数把消息传递给下层的设备。,bt_sock_recvmsg:,接收消息,从接收队列中取消息。,通过,hci_register_proto,向其下的,HCI,注册协议:,sco_connect_ind:,处理连接请求。,sco_connect_cfm:,确认连接。,sco_disconn_ind:,处理断开请求。,sco_recv_scodata:,处理来自,HCI,数据。,42,Linux,蓝牙驱动,rfcomm,rfcomm,是基于,l2CAP,之上的协议,它在蓝牙协议之上封装传统的,RS232,串口。,drivers/bluetooth,前面我们介绍的都是,HCI,及其上层的协议,,HCI,下层的实现就是,HCI,驱动程序,这些驱动程序用于与蓝牙硬件通信,通信的方式常见的有,USB,UART,和,PC card,等几种。这里我们看看,USB,的方式:,drivers/bluetooth/hci_usb.c,hci_usb_probe:,调用,hci_register_dev,向前面说的,hci_core,注册,HCI,设备。,hci_usb_send_frame:,用于提供给,HCI,去发送数据包。它把数据包放到传输队列,_transmit_q(husb,bt_cb(skb)-pkt_type),之中,然后调用,hci_usb_tx_process,去传输数据。,hci_usb_tx_process:,根据数据的类型去调用,hci_usb_send_ctrl/hci_usb_send_isoc/hci_usb_send_bulk,把数据通过,USB,发送给硬件。,43,
展开阅读全文