微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > BLE CC254X 主从机连接过程疑惑

BLE CC254X 主从机连接过程疑惑

时间:10-02 整理:3721RD 点击:

最近,在学校BLE 工程文件 SimpleBLEPeripheral.ewp

有几个问题:

1)连接

主从机连接过程

一个典型的低功耗蓝牙系统同时包含外设和核心(主机),两者的连接过程如下:

外设角色向外发送自己的信息(设备地址、名字等),主机收到外设广播信息后,发送扫描请求(scanrequest)给外设,外设响应主机的请求,连接建立完成。

问题:

连接完成的标志是什么?工程中的代码在哪里体现?外设相应主机的请求,相应的代码在哪里?整个的连接过程是怎样的,比较模糊,代码找了半天没看到?

2)加密处理

利用配对实现,利用密匙来加密授权连接。典型的过程是:外设向主机请求口令一个(passkey)以便进行配对,待主机发送了正确的口令之后,连接通信通过主从机互换密码来校验。

问题:关于 外设向主机请求口令一个(passkey)以便进行配对,相应的代码段在哪里体现? 谢谢!

1: 搜索GAPROLE_CONNECTED事件。

peripheralStateNotificationCB()函数处理各种状态变化。

最开始是simpleBLEPeripheral_HandleKeys() 处理按键操作启动广告。

2:配对操作是由如下回调函数来处理的,由于默认都是NULL,所以请求的密码是000000

static gapBondCBs_t simpleBLEPeripheral_BondMgrCBs =
{
  NULL,                     // Passcode callback (not used by application)
  NULL                      // Pairing / Bonding state Callback (not used by application)
};

配对鉴权操作是在Gapbondmgr.c中处理的,可以仔细看看

GAPBondMgr_ProcessGAPMsg()的处理

谢谢 TY!

请确认。新的问题可以重新发布

dear TY,

你好!关于添加密码

static gapBondCBs_t simpleBLEPeripheral_BondMgrCBs =
{
  NULL,                     // Passcode callback (not used by application)
  NULL                      // Pairing / Bonding state Callback (not used by application)
};

有没有参考代码提供?还有就是有哪些要注意的地方?

谢谢@

可以借鉴simplecentral工程 的例子,有passcode callback的处理。

static void simpleBLECentralPasscodeCB( uint8 *deviceAddr, uint16 connectionHandle,
                                        uint8 uiInputs, uint8 uiOutputs )
{
#if (HAL_LCD == TRUE)

  uint32  passcode;
  uint8   str[7];

  // Create random passcode
  LL_Rand( ((uint8 *) &passcode), sizeof( uint32 ));
  passcode %= 1000000;
 
  // Display passcode to user
  if ( uiOutputs != 0 )
  {
    LCD_WRITE_STRING( "Passcode:",  HAL_LCD_LINE_1 );
    LCD_WRITE_STRING( (char *) _ltoa(passcode, str, 10),  HAL_LCD_LINE_2 );
  }
 
  // Send passcode response
  GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passcode );
#endif
}

TY,

你好!

simpleBLECentralPasscodeCB( uint8 *deviceAddr, uint16 connectionHandle,
                                        uint8 uiInputs, uint8 uiOutputs );

这个函数是 Central 工程中的吧!BLE作为Central时,发送用函数!

而做为Peripheral的BLE应该是,申请Passcode才对吧?这个函数应该在Peripheral时不能用吧?

我不知道,我的理解对不对?请赐教!

再次谢谢TY的热心帮助!

关于Passcode callback ,simplecentral工程 的例子好像没有提到?

输入输出能力描述非常重要,哪一方显示Passkey,哪一方输入Passkey,由这个选项决定。举几个具体的例子(要求鉴权的情况下)。(1)如果A具备输入能力,B具备输出能力,则B显示Passkey,A输入Passkey。反之亦然。(2)如果A不具备输入输出能力,B也不具备输入输出能力,即使要求鉴权,也将采用Justwork的方式完成配对。3)如果A,B都具备输入输出能力,发起配对请求的一方显示Passkey,另一方输入Passkey。(4)如果双方不满足一端支持输入,一端支持输出,则采用Justwork的方式进行配对。

TY,

如果是连接的时候,想加密码呢? 比如说,central 申请连接外设A,外设A能否要求她发送连接密码,如果连接密码错误,不能连接?

如果可以,那么外设A的代码应该怎么修改呢?

谢谢

这是密码生成函数,如果主机是手机 可以输入可以显示,外设是2540 可以显示  那么这个函数是不是移植到外设工程里

// GAP Bond Manager Callbacks
static gapBondCBs_t simpleBLEPeripheral_BondMgrCBs =
{
  simpleBLECentralPasscodeCB,                     // Passcode callback (not used by application) 密码回调 
  NULL                      // Pairing / Bonding state Callback (not used by application) 绑定 配对 回调
};

是不是这样写? 为何还是在链接过程中外设并没有打印出要配对的密码 配对过程还是不需要密码来协助?

我就是想要一个 能够提供密码的例程和讲解,请IT 员工们回答问题的时候捉重点 ,不要一个回答一点,一个回答一点,

最终还是让读者很难看懂,谢谢!

这也是我的问题,请问您解决了吗,非常重要的一个问题,网上根本搜不到关于这个问题的教程。

请问如果是这种情况,我的设备作为从机要求鉴权(要求主机必须输入我的显示的PASSCODE才能完成配对连接),主机只要配为无输入输出不就可以绕过我的鉴权要求呢? 如果实现这样的功能呢?

学习。

你好:

     我是用CC2541裸板进行开发,将handle-key的程序移植到process-cb的GAP_DEVICE_INFO_EVENT事件里,就是无法建立establish-link。我的establish函数建立的条件是:

if( simpleBLEState != BLE_STATE_IDLE )       

    {                  if(simpleBLEScanRes > 0)      

 {                       peerAddr=bdAddr2Str(pEvent->deviceInfo.addr);       addrType=pEvent->deviceInfo.addrType;         //simpleBLEState =  BLE_STATE_CONNECTING;     

 if (*peerAddr== *NanningGuard)       {

        GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,                    DEFAULT_LINK_WHITE_LIST,                     addrType, peerAddr );

我想知道,为什么无法建立link,还有,那个simpleBLEState =  BLE_STATE_CONNECTING; 是什么意思!

这个应该可以通过配置MITM来实现。MITM要求双方只少有一端具有输入能力,CC2540作为从机没有输入能力,但是启用MITM机制,则会要求对方有输入能力,此时如果想通过将主机设备定为无输入无输出来绕过鉴权,配对应该会失败

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top