蓝牙知识小结_第1页
蓝牙知识小结_第2页
蓝牙知识小结_第3页
蓝牙知识小结_第4页
蓝牙知识小结_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、蓝牙协议知识总结蓝牙设备和 主机进行连接和数据通信的流程如下:1外部设备发出广告(带有UUID信息等其他信息);2主机(集中器设备)收到广告信息,进而发送扫描请求;表示我扫描到你的信息;3外部设备收到扫描请求后,返回扫描回应,表示我知道你扫描到我的信息;4主机进而发送连接请求信息,表示主机要跟设备建立无线连接;5设备收到连接请求后,发送相应请求回应;表示已经建立连接;数据读写流程如下进一步(在建立连接的基础上):6主机发送主服务UUID (设备的广告UUID)给设备;服务发现7设备收到后回应服务信息;8主机发送特性UUID;特性发现9设备收到后回应特性值句柄;(类似于存储设备的地址)10主机发

2、送特性值句柄;读信息11设备收到后回应特性值;12主机发送特性值句柄和要写入值;写信息13设备回应写入成功响应;在睡眠状态,耗电只有1微安(uA),而在连接事件中最高的是10几个毫安连接建立之后,再进行安全密钥的交换配对,进而进行数据的读写;主机和从机绑定之后,断开连接后,可以快速的建立连接并进行加密读写,而不需要再次配 对;特点1低功耗蓝牙速度只有100bps,传统蓝牙有3Mbps2低功耗蓝牙不需要IOS的MFI认证,传统蓝牙必须;3低功耗蓝牙能纽扣电池能用1年多,传统蓝牙不行;频道:2.4G -2.48G总共40个频段,每2M 一个频段;其中37(2.40G) ,38(2.426G) ,3

3、9(2.48G)为3个广播频道;这3个频道避开了wifi常用的频道,与wifi可以共存;其他37个为连接频道;1、BLE中主从机建立连接,到配对和绑定的过程如下图StandbyStandbyrAdvertiserScanner一Initiator一SlaveMaster正如上图所示,最简单一次蓝牙通信需要以上相关步骤,包括discoverydevice,connect,pairing,bond 等 4 个主要部分。1)广播:广播包可以包含广播数据,广播包可以无指定或者对指定的设备发送。可以声明 该器件是可连接的还是不可连接的。在一次广播中,广播包可以在三个广播通道中同时 发送。广播类型:1未指

4、定可连接2指定可连接3未指定不可见4未指定不可连接#define GAP_ADTYPE_ADV_IND 0 x00 /! Connectable undirected advertisement#define GAP_ADTYPE_ADV_DIRECT_IND 0 x01 /! Connectable directed advertisement#define GAP_ADTYPE_ADV_DISCOVER_IND 0 x02 /! Discoverable undirected advertisement#define GAP_ADTYPE_ADV_NONCONN_IND 0 x03 /!

5、Non-Connectable undirected advertisement#define GAP_ADTYPE_SCAN_RSP_IND0 x04 /!pfnSimpleProfileChange )simpleProfile_AppCBs-pfnSimpleProfileChange( notifyApp );注意函数指针的用法,实际是在接收到主机数据发过来的数据后调用 simpleProfileChangeCB函数来处理接收到的数据。这个函数在初始化时注册, 下面会讲到。作为GATT的server和client,主要通过Attribute来进行交互,当client请求server读取

6、 数据时,通过如下注册的回调函数来进行访问。/ Register callback with SimpleGATTprofileVOID SimpleProfile_RegisterAppCBs( &simpleBLEPeripheral_SimpleProfileCBs )/给应用注册回调函数,这个函数非常重要在回调函数中对数据做出处理。static simpleProfileCBs_t simpleBLEPeripheral_SimpleProfileCBs =simpleProfileChangeCB / Charactersitic value change callback;在 Si

7、mpleProfile_RegisterAppCBs 函数中赋值。simpleProfile_AppCBs = simpleProfileChangeCB在simpleProfileChangeCB函数中可以启动定时器来给主机发送Notification数据 发送数据函数为 GATT_Notification(noti_cHandle,&pReport,FALSE);如下:static attHandleValueNoti_t pReport ;/声明 attHandleValueNoti_t这个结构体uint16 noti_cHandle; /存放 handlepReport.handle

8、= simpleProfileAttrTbl11.handle;/取 notification 对应的 handle GAPRole_GetParameter( 0 x30E, ¬i_cHandle);/获取 Connection Handle pReport.len = 1;/数据长度 pReport.value0 = 0 x03;/赋值 GATT_Notification(noti_cHandle,&pReport,FALSE);主机使能 Notification:这个 handle 应该是相应的 characteristic value 的 handle 的后面一个,就是 char

9、acteristic value 的 handle 加 1 .例子:attWriteReq_t writeReq;writeReq.handle =;writeReq.len = 2;writeReq.value0 = LO_UINT16(GATT_CLIENT_CFG_NOTIFY); 这里是 0 x01 writeReq.value1 = HI_UINT16(GATT_CLIENT_CFG_NOTIFY); 这里是 0 x00writeReq.sig = 0;writeReq.cmd = 0;GATT_WriteCharVhlue( simpleBLEConnHandle, &writeR

10、eq, simpleBLETaskId );这两个值目的是打开Notification功能.CCC的参数有两个,一个Notification, 一个 indication. value0就是打开关闭 notification, value1是打开关闭 indication.主机数据处理:simpleBLECentral.c 这个文件,里面有个函数:simpleBLECentralProcessGATTMsg()这个函数就是处理各种从peripheral过来的数据.但是在示例代码中并没有加入通知,就是notification的接收,所以你得自己添加代码.很简单,类似 if ( ( pMsg-me

11、thod = ATT_READ_RSP ) | ),添加 else if(pMsg-method = ATT_HANDLE_VALUE_NOTI ) |.)就可以处理从机Notification的数据。value被写的时候首先simpleProfile_WriteAttrCB()会被调到.最后才会调用 simpleProfileChangeCB()GAP通过在启动设备事件的任务处理中启动设备,其实主要是向GAP中注册回调函数,让 系统在发现自身运行状态变化时,调用该函数,方便应用层进行相关操作。if ( events & SBP_START_DEVICE_EVT )/ Start the De

12、viceVOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs );启动设备,注册回调函数,用于监督设备的状态变化:广播、连接、配对、绑定等。/ Start Bond ManagerVOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs );simpleBLEPeripheral_PeripheralCBs 函数定义如下static gapRolesCBs_t simpleBLEPeripheral_PeripheralCBs =peripheralStateNotif

13、icationCB, / Profile State Change CallbacksNULL/ When a valid RSSI is read from controller(not used by application);static void peripheralStateNotificationCB( gaprole_States_t newState )/传入参数由 GPA 自己输入,内部调用回调函数给用户,处理连接状态的改变simpleBLEPeripheral_BondMgrCBs 函数定义如下:static gapBondCBs_t simpleBLEPeripheral

14、_BondMgrCBs =ProcessPasscodeCB,/生成配对密码,发送给主机ProcessPairStateCB主机密码的校验处理。配对状态管理;一、修改广播功率0 / -23dbm功率最小0 / -23dbm功率最小1 / -6dbm2 / 0dbm3 / +dbm功率最大#define LL_EXT_TX_POWER_MINUS_23_DBM#define LL_EXT_TX_POWER_MINUS_6_DBM#define LL_EXT_TX_POWER_0_DBM#define LL_EXT_TX_POWER_4_DBMHCI_EXT_SetTxPowerCmd(gTxPo

15、wer);更新广播内容GAP_UpdateAdvertisingData( simpleBLEPeripheral_TaskID, TRUE, sizeof( advertData_Ex ), advertData_Ex );二、数据加密解密uint8 key16 = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;/需要加密的数据uint8 plaintextData16 = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;/加密后数据存放区uint8 encryptedData16;/ 解密后数据存放区uint8 deccryptedData16;/开始加密LL_Encrypt( key, plaintextData, encryptedData );/开始解密LL_EXT_Decrypt( key, encryptedData, deccryptedData );三、设置从机广播时间1)、广播模式必须是 Limited Discoverable mode在 advertData 中加入此 AD string:0 x02,GAP_ADTYPE_FLAGS,GA

温馨提示

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

最新文档

评论

0/150

提交评论