蓝牙通讯详细原理_第1页
蓝牙通讯详细原理_第2页
蓝牙通讯详细原理_第3页
蓝牙通讯详细原理_第4页
蓝牙通讯详细原理_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、、HCI在蓝牙软件协议模型位置的分析蓝牙系统的协议模型如图1所小。从图中可以看出,HCI是位于蓝牙系统的L2CAP逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间的一层协议。HCI为上层协议提供了进入LM的统一接口和进入基带的统一方式。在HCI的主机(Host)和HCI主机控制器(HostController)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。目前,蓝牙的SIG规定了四种与硬件连接的物理总线方式:USBRS232UARTWPC卡。其中通过RS232用口线方式进行连接具有差错校验。HCI层的底层层协议如图2所小。由图可看出,HCI层

2、屏蔽了基带,为协议层的上层提供了进入基带的统一方式。二、HCI与基带通信方式的研究与分析蓝牙系统的底层协议通信如图3所示。下面结合图3对蓝牙系统中HCI层与基带间的通信作一些分析研究。1.通信方式的分析时俺是喃I翩HCI是通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三种包,其中数据包是双向的,命令包只能从主机发往主机控制器,而事件包始终是主机控制器发向主机的。主机发出的大多数命令包都会触发主机控制器产生相应的事件包作为响应。命令包分为六种类型:* 链路控制命令;* 链路政策和模式

3、命令;* 主机控制和基带命令;* 信息命令;* 状态命令;* 测试命令。事件包也可分为三种类型:* 通用事件,包括命令完成包(CommandComplete和命令状态包(CommandStatus);* 测试事件;* 出错时发生的事件,如产生丢失(FlushOccured)和数据缓冲区溢出(DataBufferOverflow)。数据包则可分为ACL和SCO勺数据包。包的格式如图4所示。2.包的参数分析研究命令包:命令包中的OCF(OpcodeCommandField)和OGF(OpcodeGroupField)是OCTXIObits)OGF(5bits)Paiamdor*EvtriCodtF

4、iamderTotalLengthParanMer*FanmelcrsComectcnHaidle(l21xts)2Lengh(kbytes)g脸CommtianHani啖1急*)ResavisdLtiigtL(2bjtes)DataACL统用于区分命令种的。ParameterLength表示所带参数的长度,以字节数为单位,随后就是所带的参数列表。下面以Inquiry命令为例对HCI的命令包做具体说明。在Inquiry命令中,OGF=0x0俵示此命令属于链路控制命令,同时OCF=0x000侧表示此命令为链品&控制命令中的Inquiry命令。OCF与OG哄占2字节,又由于底位字节在前,则它们在命

5、令包为0x0104。在Inquiry命令中,参数ParameterLength为5。Inquiry命令带3个参数,第一个参数为LAP(lowaddresspart),它将用来产生Baseband中查询命令包的包头中的AccessCode。第二个参数为Inquiry_Length,它时表示在Inquiry命令停止前所定义的最大时间,超过此时间,Inquiry命令将终止。第三个参数为NUM_Response它的值为0X00表示设备响应数不受限制,只为0x00-0xff则表示在Inquiry命令终止前最大的设备响应数。因此,若LAP=0x9e8b00Inquiry_Length=0x05,NUM_R

6、esponse=0x05则协议上层调用Inquiry命令是HCI向基带发的明令包将为:0x010405008b9e0505。事件包:事件包的EventCode用来区分不同的事件包,ParameterLength表示所带参数的长度,以字节数为单位,随后就是所带的参数列表。以CommandStatusEvent事件包为例对HCI的事件包进行具体说明。当主机控制器收到主机发来的如上面所提到的Inquiry命令包并开始处理时,它就会向主机发送CommandStatusEvent事件包,此事件包为:0x0f04000a0104。0xOf表示此事件包为CommandStatusEvent事件包,0x04表

7、示此事件包带4字节长度的参数,0x00为此事件包的第一个参数即Status,表示命令包正在处理。0x0a为事件包的第二个参数NUM_HCI_Command_Packet表示主机最多可在向主机控制器发10个命令包。0x0104为第三个参数Command_Opcode表示此事件包是对Inquiry命令包的响应。数据包:ACL和SCOK据包中的ConnectionHandle即连接句柄是一个12比特的标志符,用于唯一确认两台蓝牙设备间的数据或语音连接,可以看作是两台蓝牙设备间唯一的数据通道的标识。两台设备间只能有一条ACL接,也就是只有一个ACL的连接句柄,相应L2CAP勺信道都是建立在这个连接句柄

8、表示的数据通道上;两台设备间可以有多个SCO勺连接,则一对设备间会有多个SCO勺连接句柄。连接句柄在两设备连接期间一直存在,不管设备处于什么状态。在ACL数据包中,Flags分为PBFlag和BCFlag,PBFlag为包的界限标志,PBFlag=0x00表示此数据包为上层协议包(如L2CAP&)的起始部分;PBFlag=0x01表示此数据包为上层协议包(如L2CAP&)的后续部分。BCFlag为广播发送的标志,BCFlag=0x00表示无广播发送,只是点对点的发送;BCFlag=0x01表示对所有处于激活状态的从设备进行广播发送,BCFlag=0x02表示对所有的从设备包括处于休眠状态的从设

9、备进行广播发送。ACL和SCO据包中的DataTotalLength都表示所载荷的数据的长度,以字节位单位。3 .通信过程的研究与分析当主机与基带之间用命令的方式进行通信时,主机向主机控制器发送命令包。主机控制器完成一个命令,大多数情况下,它会向主机发出一个命令完成事件包(CommandCompletePacket),包中携带命令完成的信息。有些命令不会收到命令完成事件,而会收到命令状态事件包(CommanStatusPacket),当收到该事件则表示主机发出的命令已经被主机控制器接收并开始处理,过一段时间该命令被执行完毕时,主机控制器会向主机发出相应的事件包来通知主机。如果命令参数有误,则会

10、在命令状态事件中给出相应错误码。假如错误出现在一个返回CommanComplete事件包的命令中,则止匕CommanComplete事件包不一定含有此命令所定义的所有参数。状态参数作为解释错误原因同时也是第一个返回的参数,总是要返回的。假如紧随状态参数之后是连接句柄或蓝牙的设备地址,则此参数也总是要返回,这样可判别出此CommandComplete事件包属于那个实例的一个命令。在这种情况下,事件包中连接句柄或蓝牙的设备地址应与命令包种的相应参数一致。假如错误出现在一个不返回CommandComplete事件包的命令中,则事件包包含的所有参数都不一定是有效的。主机必须根据于此命令相联系的事件包中

11、的状态参数来决定它们的有效性。4 .HCI流量控制(FlowControl)的分析研究HCI的流量控制是为了管理主机和主机控制器中有限的资源并控制数据流量而设计的,由主机管理主机控制器的数据缓存区,主机可动态地调整每个连接句柄的流量。对于命令包的流量控制,主机在每发一个命令之前都要确定当前能发命令包的数目,当然,在开机和重启动时发命令包可以不用考虑接收情况,直到收到命令完成事件包或命令状态事件包为止。因为在每个命令完成事件包和命令状态事件包中都有Num_HCI_Command_Packe燧项表明当时主机能向主机控制器发送的命令包的数目,而对于每个命令必然会有相应的命令完成事件包和命令状态事件包

12、,主机就能控制命令包不会溢出。对于数据包的流量控制,一开始,主机调用Read_Buffer_Size命令,该命令返回的两个参数决定了主机能发往主机控制器的AC5口SCO5种数据包的大小的最大值,同时两个附加参数则说明了主机控制器能接收的ACL和SCOWS包总的数目。而每隔一段时间,主机控制器会向主机发Number_Of_Complete_Packets事件,该事件的参数值表明了对每个连接句柄已经处理的数据包的数目(包括正确传输和被丢弃的)。主机根据一开始就知道的总数,减去已经处理的包的数目,则可计算出还能发多少数据包,从而控制数据包的流量。如有必要,HCI的流量控制也可由主机控制器来实现对主机

13、的控制,可以通过Set_Host_Controller_To_Host_Flow_Control命令来设置,其控制过程基本与主机控制过程类似,只是命令稍有不同。当主机收到断链确认的事件后,就认为所有传往主机控制器的数据包已经全部被丢弃了,同时主机控制器中的数据缓冲区也被释放了。三、HCI协议层软件开发我们在对HCI层进行全面的分析研究之后,提出了HCI协议层软件开发的方案,定出了HCI层提供给协议上层的接口。这些接口给蓝牙协议栈的上层提供了进入BaseBand的统一入口。整个接口按协议站的要求分为八大部分。下面介绍每部分的接口。整个软件层采用传递消息加函数调用相结合的机制来实现,即上层对HCI

14、层接口的调用采用函数调用的机制,HCI对上层的通信采用传递消息的方式。1.接口分类及举例说明(1)开始命令此命令接口是主机向HCI注册及并启动HCIo如启动HCI的函数接口为HCI_ReqStart(),HCI在启动后发向上层的消息接口为HCI_START_CNF。命令执行过程如图5所示。(2)链路控制命令主机主机控制接口般路层控制国,HC1吕劭及注明过程链路控制命令是允许主机控制器控制与其他蓝牙设备的连接。在链路控制命令运行时,LM控制蓝牙微微网与分布网的建立与维持。这些命令指示LM创建及修改与远端蓝牙设备的连接链路,查询范围内的其他蓝牙设备,及其他链路管理协议命令。以查找并发现周围设备为例

15、,HCI层为上层提供了函数接口HCI_ReqInquiry,消息接口为HCI_INQUIRY_RESULT_EVTHCI_INQUIRY_CNF命令执行过程如图6所示。主机首先调用HCI的HCI_ReqInquiry函数开始查询过程,在此过程中,如有蓝牙响应此查询,则会产生一HCIINQUIRYRESULTEVT事件通知主机。在此次查询过程结束时,会产生主机王机控制接口磁路层控制HCIINQUIRYCNF条消息通知主机,参数NrofResponse表示在此收到HCI_1附UIRYJ至$ULT_E肝次查询过程所响应的蓝牙设备数。收到HC】JMQUIRfJtESULTEVT(3)链路政策命令收到H

16、CIlUQUIRfCWF链路政策命令提供了一种影响LM怎样管理微微网的方法。当链路政策命令运行时,LM仍然以可调整的参数控制微微网及分布网的建立和维持。这些链路政策命令调整LM的行为,从尔导致与远端蓝牙设备的链路层连接的改变。已建立服务质量为例,HCI层为上层提供了函数接口HCI_ReqQoSSetup消息接口为HCI_QOS_SETUP_EVTHCI_QOS_SETUP_CNFHCI_QOS_SETUP_CNF_N疑执行过程如图7所示。主机首先调用HCI_ReqQosSetup请求建立Qos当Qos建立成HCI_QOS_SETUP_CN变与建立诸如声音设置,认证模式,加密模式的连接相联系的L

17、M的操作方式。已读取主机控制器所存储的LinkKey为例,HCI层为上层提供了函数接口HCI_ReqReadLinkKey消息接口为HCI_READ_LINK_KEY_RRESULT_EVTHCI_READ_LINK_KEY_CN命令执行过程如图8所示。这些信息命令的参数是由蓝牙硬件制造商确定的。它们提供了关于蓝牙设备及设备的主机控制器,链路管理器及基带的信息。主机设备不能更改这些参数。HCI层为上层提供了函主机A主机控制接口席数接口为:HCI_ReqCountryCodeHCI_ReqLocalAddressHCI_ReqReadLocalFeaturesHCI_ReqReadLocalVe

18、rsionHCI_ReqReadBD_ADDRHCI层提供的消息接口为:HCI_COUNTRY_CODE_CNFHCI_COUNTRY_CODE_CNF_NEG发出HCI.ReQReadLinkKey收到HCIREADLINKKEYRESILT收到HCI_READ_LINK_KE1_RESU-T_收到HCI_REA_LIHK_KEY_CN:图8HCI读取LinkKeyHCI_LOCAL_ADDRESS_CNFHCI_LOCAL_ADDRESS_CNF_NEGHCI_READ_LOCAL_FEATURES_CNFHCI_READ_LOCAL_FEATURES_CNF_NEGHCI_READ_LO

19、CAL_VERSION_CNFHCI_READ_LOCAL_VERSION_CNF_NEGHCI_READ_BD_ADDR_CNFHCI_READ_BD_ADDR_CNF_NEG(6)状态命令状态命令提供了目前HCI,LM,及BB的状态消息。这些状态参数不能被主机改变,除了一些参数可以被重置。HCI层为上层提供了函数接口为:HCI_ReqGetLinkQualityHCI_ReqReadFailedCounterHCI_ReqResetFailedCounterHCI_ReqRssiHCI层提供的消息接口为:HCI_GET_LINK_QUALITY_CNFHCI_GET_LINK_QUALIT

20、Y_CNF_NEGHCI_READ_FAILED_COUNTER_CNFHCI_READ_FAILED_COUNTER_CNF_NEGHCI_RESET_FAILED_COUNTER_CNFHCI_RESET_FAILED_COUNTER_CNF_NEGHCI_RSSI_CNFHCI_RSSI_CNF_NEG(7)测试命令测试命令能够测试蓝牙硬件各种功能,并蔚蓝牙设备的测试提供不同的测试条件。HCI层为上层提供了函数接口为:HCI_ReqEnableDutModeHCI_ReqReadLoopbackModeHCI_ReqWriteLoopbackModeHCI层提供的消息接口为:HCI_EN

21、ABLE_DUT_MODE_CNFHCI_ENABLE_DUT_MODE_CNF_NEGHCI_READ_LOOPBACK_MODE_CNFHCI_READ_LOOPBACK_MODE_CNF_NEGHCI_WRITE_LOOPBACK_MODE_CNFHCI_WRITE_LOOPBACK_MODE_CNF_NEG(8)数据传输命令:这些命令为蓝牙设备之间传输数据提供了所需要的接口。如分配所需内存的接口HCI_DataAlloc,传输数据的接口HCI_DataSend,提取数据的接口HCI_DataExtract。图9说明了在蓝牙系统中传输数据时对这些接口的使用。四、结论发的接口能将上层的数据

22、流匹配到基带,的事件。使基带能对之进行处理,并产生相应HCI为为蓝牙协议层的上层提供了进入基带的统一接口。经过测试,所开表1HCI包格式FirstByteLastBytePacketTypeIndicator(lbyte)HCIPacket(Variablelength)表2HCI包类型HCIPacketTypePacketTypeIndicatorHCICommandPacket0x01HCIACLDataPacket0x02HCISCODataPacket0x03HCIEventPacket0x04表3HCI命令包结构FirstLastOCFOGFLengthPara0Para1表4进入测

23、试模式的HCI命令命令操作码参数HCI_Write_PageScan_Activity0x001c0x0800,0x0012HCI_Write_InquireScan_Activity0x001e0x0800,0x0012HCI_Write_Scan_Enable0x0c1a0x03HCI_Write_Device_Under_Test_Mode0x1803无系统的软件实现测试软件在Labwindows/CVI软件开发在台下完成。Labwindows/CVI是由NI公司开发的半图形化的编程工具,该工具以标准C语言为基础.具有强大的库函数、提供了灵活的开发手段和良好的用户界面。该测试系统的软件从

24、功能角度可以划分为四部分:对综测仪的初始化、对蓝牙手机的初始化、建立连接和测试指标子程序。第一部分:对综测仪的初始化,步骤如下:步骤1.查找听者。函数原形为:ibln(intBoard/Device,intPrimaryAddress,intSecondAddress,shortFoundListener);查找听者的主要目的是为了确认听者的PrimaryAddress,由于一个总线上最多有30个听者,可以通过有限循环查找,如果确认只有一个听者,当找到一个听者时即可停止查找。步骤2.打开设备。函数原形为:ibdev(intBoard_Index,intPrimary_Address,intSe

25、condary_Address,intTimeout_Value,intEND_Message,intEOS_Character);函数返M值相当于一个分作句柄,当成功口开设备后,对仪器的读写操作均通过操作句柄完成。对于有些仪器,通过以上两个步骤就可以得到一个有效的操作句柄,但有的仪器,如R&镂司的CMU200不但有PrimaryAddress,还有SecondaryAddress,这就需要在得到总的操作句柄后,通过ibwrt函数对各子项(这里指向是bluetoothsignalling和bluetoothnon-signalling)设置次地址,当次地址设置完成后,可以通过ibdev函数得到

26、具体的针对子项的操作句柄。第二部分:对手机的初始化。对手机的初始化是通过串行通信端口(RS-232)实现的,步骤如下:步骤1.打开用口。函数原形如下:intOpenComConfig(intCOM_Port,charDevice_Name,longBaud_Rate,intParity,intData_Bits,intInput_Queue_Size,intOutput_Queue_Size);函数中的参数根据蓝牙模成所支持而方式进行设置一步骤2.发送HCI命令,使手机进入测试模式。通过函数ComWrtByte(intComPort,charByte)发送,发送时按照HCI命令标准包格式,选择

27、相应的参数,从高字节向低字节,以16进制的形式,逐字节发送。HCI包格式如表1所示。其中PacketTypeIndicator按照表2确定。而详细的HCI命令包组成见表3。其中OCF,OG的操作码,Length指的是参数长度,如果参数为一个,则Length值为1,参数为HCI命令自身所带的参数,因命令而异。以HCI_Write_Scan_Enable命令为例,因为是命令包,故PacketTypeIndicator应为0x01;又操作码为0x0c1a,打开扫描时参数为0x03,故参数长度为1,所以该命令的发送序列应为(16进制):011a0c0103。使手机进入测试模式,首先激活寻呼扫描和查询扫

28、描,然后才能发送进入测试模式的指令。主要通过发送表4中的HCI命令实现。第三部分:建立连接。在讨论蓝牙建立连接的过程之前,首先要了解蓝牙设备的组网过程。蓝牙根据网络的概念提出点对点和点对多点的无线连接,在任意一个有效通信范围内,所有设备的地位都是平等的。首先提出通信要求的设备成为主设备(Master),被动进行通信的设备成为从设备(Slave),利用TDMA一个Master可以最多和7个Slave进行通信。在本测试系统中,考虑到生产线上一般采用屏蔽箱防止干扰,所以认为系统中只有1个Master和1个Slave,同时,由于测试的需要,并考虑到实际情况(现在很多蓝牙综测仪在测试过程中并不能作为Sl

29、ave),一般将蓝牙综测仪作为Master,待测手机作为Slave。本测试系统软件中,通过ibwrt函数控制蓝牙综测仪发出查询指令,查找当前有效范围内的待测手机。当查找完成后,ibwrt函数继续控制蓝牙综测仪发出连接请求,当已经进入测试模式的待测手机收到连接请求后,将会返回接受或拒绝连接请求的信息,该信息通过发送HCI_Accept_Connection_Request指令完成,当蓝牙综测仪收到该信息后,即确认可以建立这样,双方的连接就建立成功第四部分:测试指标子程序。建立连接成功后,下一步就是测试手机的性能指标,这里测试的主要是蓝牙的发射机和接收机的性能指标。由于在蓝牙规范中对于每个测试指标都有相应的测试条件及测试标准的详细规定,而每项测试指标的测试条件相差很大,特别是对蓝牙综测仪的设置方面。因此,在本测试软件中,将每个测试指标封装成子函数,程序通过调用每个测试项的子函数来实现对指标的测试,这样也有利于程序的优化,使程序看起来一目了然,同时也利于在测试过程中根据需要选择测试项。这里以测试蓝牙发射机的输出功率为例来说明测试子项的软件实现。蓝牙规范中对蓝牙发射机的输出功率的测试条件和测试结果要求如下:Hop

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论