微波EDA网,见证研发工程师的成长!
微波EDA网
  • 首页
  • 微波射频
  • 射频和无线通信
  • 天线设计
  • 硬件设计
  • PCB和SI
  • 通信和网络
  • 测试测量
  • 应用设计
  • 研发杂谈
  • 研发问答
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540 配对密码问题

CC2540 配对密码问题

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

请各位指点一下,

在simpleBLEPeripheral.c里,有如下设置

uint32 passkey = 655355; // passkey "000000"   

uint8 pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ ;    

 uint8 mitm =TRUE;    

 uint8 ioCap = GAPBOND_IO_CAP_KEYBOARD_DISPLAY  ;    

uint8 bonding = TRUE;       

GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey );    

GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8 ), &pairMode );    

 GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm );    

GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap );    

GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding );

为什么我用LightBlue连设备的时候,还是不需要输入配对密码,直接就连上。是不是还要在什么地方作什么设置

配对绑定不影响连接的。 你处于等待配对请求状态(pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ),lightblue不发起配对过程,自然不会主动配对。

 

您好,TY,

   那请问您一下,我要怎么修改才能达到  输入密码才能使用设备提供的服务  的效果。我作了如下修改:

static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] = {  

 // Simple Profile Service  

 {    

        { ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */    

         GATT_PERMIT_AUTHOR_READ,                         /* permissions */    

         0,                                        /* handle */    

         (uint8 *)&simpleProfileService            /* pValue */  

},

。。。。

}

红字部分改成了GATT_PERMIT_AUTHOR_READ或GATT_PERMIT_AUTHEN_READ都不行。。

在哪个函数下添加发起配对的代码,求大神简述下具体怎么实现?

配对是自己管理的,你可以设置密码和模式来实现简单的授权:

// Setup the GAP Bond Manager
{
uint32 passkey = 0; // passkey "000000" 配对密码,俗称PIN码,六位数字
uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE; //GAPBOND_PAIRING_MODE_NO_PAIRING; 
uint8 mitm = TRUE;
uint8 ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
uint8 bonding = TRUE;
GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey );
GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8 ), &pairMode );
GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm );
GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap );
GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding );
}

请问,如果我把CC2541上的绑定信息清除了,为什么我已经配对的手机再次连接不需要密码,,,,怎样实现才能实现,CC2541绑定信息清除 再次连接需要密码?求

你好,请问这个问题有答案了吗? 就是cc2540这边擦除了绑定,ios上还是不需要输入密码,是否有了解决方案?

如果该了

GAPBOND_PAIRING_MODE_INITIATE; 为GAPBOND_PAIRING_MODE_NO_PAIRING;

else if ( gapBond_PairingMode == GAPBOND_PAIRING_MODE_NO_PAIRING )
        {
          // No Pairing - Send error
          VOID GAP_TerminateAuth( pPkt->connectionHandle, SMP_PAIRING_FAILED_NOT_SUPPORTED );
        }

直接就连接错误,还是无解,,,,,,

关于cc2541上面清除配对信息,但是ios设备上面连接的时候仍然可以连接上的问题我也碰到了。我是在修改配对密码时出现的,修改完配对密码之后就清除cc2541上面的配对信息。但是在iPhone上面仍然不用输入密码直接连上,并且我跟踪cc2541的流程来看的话密码管理的回调以及绑定过程的回调都没有跑,然后就直接连上了。而用iPod测试的时候密码管理的回调和绑定过程的回调都跑了,但是仍然走的是已经绑定的流程。

蓝牙4.0的配对与蓝牙2.0是不同的

蓝牙2.1的配对是连接之前做的,而蓝牙4.0的配对是连接之后做的,所以无论你是否配对都是可以连接上的,要么你就自己做个密码,连接上就需要输入密码,不然就断开连接。

static void ProcessPasscodeCB(uint8 *deviceAddr,uint16 connectionHandle,uint8 uiInputs,uint8 uiOutputs )
{
uint32 passcode=123456;
uint8 str[7];

//在这里可以设置存储,保存之前设定的密码,这样就可以动态修改配对密码了。-存于flash中
// Create random passcode
//LL_Rand( ((uint8 *) &passcode), sizeof( uint32 ));
passcode %= 1000000;

//在lcd上显示当前的密码,这样手机端,根据此密码连接。
// Display passcode to user
if ( uiOutputs != 0 )
{
HalLcdWriteString( "Passcode:", HAL_LCD_LINE_1 );
HalLcdWriteString( (char *) _ltoa(passcode, str, 10), HAL_LCD_LINE_2 );
}
// Send passcode response
GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passcode );
}

请问怎么动态修改密码

 可以将密码保存在其文件系统中(实际就是flash中),连接配对成功之后就可以通过给其发命令来修改密码了。有一个问题就是除非将手机端的配对信息给删除,否则新的密码对于已经配对成功过的手机是不起作用的,但是新密码对于未配对的移动设备是起作用的。

那我的产品换新用户了,岂不是老用户也可以用?这是CC2540的BUG?就没有解决办法吗?

如果老用户之前已经配对过的话新的密码对其实不起作用的。这个不是CC2540的bug,蓝牙协议就是这样的。解决方法有的,你可以绕开系统的输入密码这个过程,自己做一个密码校验功能,这样在任何时候你的修改密码功能均可以生效了

密码校验功能?不怎么理解,能再解释下吗?麻烦了,  问题在于怎么把原来绑定的给擦除呢?

跟擦除没关系的。就是你将cc2540设置成不需要密码就可连上,然后连上之后你做一个请求密码校验的功能就可以了。

pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ

PAIRING_MODE_NO_PAIRING                                        //!< Pairing is not allowed
GAPBOND_PAIRING_MODE_WAIT_FOR_REQ           //!< Wait for a pairing request or slave security request
GAPBOND_PAIRING_MODE_INITIATE                           //!< Don't wait, initiate a pairing request or slave security request

如果想上电就配对,就选择第三个GAPBOND_PAIRING_MODE_INITIATE                           

你的意思是不绑定?

不是不绑定,因为只要手机和cc2540连接之后手机端会自动绑定,cc2540中绑定信息根本没法做校验的,即使你删掉绑定信息但是手机端不删掉的话仍然是可以直接连上的。按之前那位哥们说的那样,选

  • GAPBOND_PAIRING_MODE_INITIATE,这样手机就可以直接和cc2540连接了。剩下你想怎么做密码校验就是你纯软件的流程了,跟蓝牙协议没关系了

我是通过直接连接,然后每次发送指令都验证一遍密码,解决问题了,整个过程不绑定。多谢hu ai的指导交流

你好,我现在初学这个,老师要交作业,我们都不会,能不能将您的例程发给我,让我学习学习。。。感激不尽

你好,CC2540中怎么绕过配对,在直接与手机相连后,每次发送指令都进行密码校验?能指导一下软件怎么实现吗?先谢谢啦!

每次发送指令都校验会很影响传输效率吧,一般来说,前期的密码验证就已经确定了双方的合法身份,请问是什么应用场景?

恩,也不是必须要这样做,只是手机端的蓝牙配对信息不清除的话,第一次连接成功后,之后都不用身份认证了就可以直接连接,换了密码也没用?请问这怎么解决?

你好,

如果你现在使用lightblue,你会看到对话框被弹出,需要你输入密码。

已经被验证过!希望对你有帮助。

上一篇:Ti CC2541最大的传输数据能否实现超过20byte?
下一篇:CC2541 IO口驱动能力
栏目分类
  • 移动通信
  • 微波和射频技术
  • 无线和射频
  • PCB设计问答
  • 硬件电路设计
  • 嵌入式设计讨论
  • 手机设计讨论
  • 信号完整性分析
  • 测试测量
  • 微电子和IC设计
热门文章
  • SimpleProfile_SetParameter(
  • 关于cc2564蓝牙连接间隔配置的
  • 谁可以给我IAR 8.30的下载地
  • CC2540 USB插入电脑提示:未
  • CC2541获取iOS设备的蓝牙MAC地
  • TI CC2650EM-7ID BLE求助
  • 请教如何在CCS中使用JLINK进行
  • cc2640 pwm例程

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

网站地图

Top