什么是低功耗蓝牙配对?

什么又是绑定?

配对和绑定有什么区别?

配对有什么好处?

如何删除绑定信息?

如何确定配对的安全等级?

just work的配对一定就不安全吗?

如何开发自己的配对应用?

本文将对以上问题进行论述。

本文涉及所有代码和脚本都已上传到百度云盘,云盘链接如下所示

  • 链接: https://pan.baidu.com/s/1FKTfY3Q_zBVvviO7KC7Gyg#list/path=%2Fblog   密码: y8fb

       Paring(配对)bonding(绑定)是实现蓝牙射频通信安全的一种机制,有两点需要注意:

一、paring/bonding实现的是蓝牙链路层的安全,对应用来说完全透明,也就是说,不管有没有paring/bonding,你发送或接收应用数据的方式是一样的,不会因为加了paring/bonding应用数据传输需要做某些特殊处理;

二、安全有两种选项:加密或者签名,目前绝大多数应用都是选择加密,后续我们也会以加密为重点进行讲述。实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。Paring/bonding则把上述过程标准化,放在了蓝牙协议栈中,并且其安全性得到了充分评估,用户可以 “无感的” 用上安全的蓝牙通信。

Paring/bonding是蓝牙security manager(SM)的一部分,SM定义了蓝牙通信的安全框架,里面涉及安全架构,密码工具箱,paring协议等,其中paring协议是关键,所以我们经常把paring和SM二者等价,下面将对paring进行详细阐述。

1. 基本概念解读

Paring(配对)配对包括配对能力交换设备认证密钥生成连接加密以及机密信息分发等过程,配对的目的有三个:加密连接,认证设备,以及生成密钥。从手机角度看,一旦设备跟手机配对成功,蓝牙配置菜单将包含该配对设备,如下所示:

  

       如果用户需要主动删除配对设备,点击配对设备右边的“设置”菜单,出现如下界面,选择“取消配对”或者“忽略该设备”,设备的配对信息即被手机删除。

Bonding(绑定)配对过程中会生成一个长期密钥(LTK,long-term Key),如果配对双方把这个LTK存储起来放在Flash中,那么这两个设备再次重连的时候,就可以跳过配对流程,而直接使用LTK对蓝牙连接进行加密,设备的这种状态称为bonding。如果paring过程中不存储LTK(不分发LTK)也是可以的,paring完成后连接也是加密的,但是如果两个设备再次重连,那么就需要重走一次paring流程,否则两者还是明文通信。在不引起误解的情况下,我们经常把paring当成paring和bonding两者的组合,因为只paring不bonding的应用情况非常少见。在不引起混淆的情况下,下文就不区分paring和bonding的区别,换句话说,我们会把paring和bonding两个概念等同起来进行混用。

SM(security manager,蓝牙协议栈的安全管理层,规定了跟蓝牙安全通信有关的所有要素,包括paring,bonding,以及下文提到的SMP。

SMP(security manager protocol,安全管理协议,SMP着重两个设备之间的蓝牙交互命令序列,对paring的空中包进行了严格时序规定。

OOB(out of band,带外),OOB就是不通过蓝牙射频本身来交互,而是通过比如人眼,NFC,UART等带外方式来交互配对信息,在这里人眼,NFC,UART通信方式就被称为OOB通信方式。

Passkey,又称pin码,是指用户在键盘中输入的一串数字,以达到认证设备的目的。低功耗蓝牙的passkey必须为6位。

Numeric comparison(数字比较),numeric comparison其实跟passkey一样,也是用来认证设备的,只不过passkey是通过键盘输入的,而numeric comparison是显示在显示器上的,numeric comparison也必须是6位的数字。

MITM(man in the middle,MITM是指A和B通信过程中,C会插入进来以模拟A或者B,并且具备截获和篡改A和B之间所有通信报文的能力,从而达到让A或者B信任它,以至于错把C当成B或者A来通信。如果对安全要求比较高,需要具备MITM保护能力,在SM中这个是通过认证(authentication)来实现的,SM中实现认证的方式有三种:OOB认证信息passkey以及numeric comparison,大家根据自己的实际情况,选择其中一种即可。

LESC(LE secure connections,又称SC,蓝牙4.2引入的一种新的密钥生成方式和验证方式,SC通过基于椭圆曲线的Diffie-Hellman密钥交换算法来生成设备A和B的共享密钥,此密钥生成过程中需要用到公私钥对,以及其他的密码算法库。LESC同时还规定了相应的通信协议以生成该密钥,并验证该密钥。需要注意的是LESC对paring的其他方面也会产生一定的影响,所以我们经常会把LESC看成是一种新的配对方式。

Legacy paring,在LESC引入之前的密钥生成方式,称为legacy paring,换句话说,legacy paring是相对LESC来说的,不支持LESC的配对即为legacy paring(legacy配对)。

TK(Temporary Key,临时密钥),legacy paring里面的概念,如果采用just work配对方式,TK就是为全0;如果采用passkey配对方式,TK就是passkey;如果采用OOB配对方式,TK就是OOB里面的信息。

STK(short term key,短期密钥),legacy配对里面的概念,STK是通过TK推导出来的,通过TK对设备A和B的随机数进行加密,即得到STK。

LTK(long term key,长期密钥),legacy配对和LESC配对都会用到LTK,如前所述,LTK是用来对未来的连接进行加密和解密用的。Legacy paring中的LTK由从设备根据相应的算法自己生成的(LTK生成过程中会用到EDIV(分散因子)和Rand(随机数)),然后通过蓝牙空中包传给主机。LESC配对过程中,先通过Diffie-Hellman生成一个共享密钥,然后这个共享密钥再对设备A和B的蓝牙地址和随机数进行加密,从而得到LTK,LTK由设备A和B各自同时生成,因此LTK不会出现在LESC蓝牙空中包中,大大提高了蓝牙通信的安全性。

IRK(Identity Resolving Key,蓝牙设备地址解析密钥),有些蓝牙设备的地址为可解析的随机地址,比如iPhone手机,由于他们的地址随着时间会变化,那如何确定这些变化的地址都来自同一个设备呢?答案就是IRK,IRK通过解析变化的地址的规律,从而确定这些地址是否来自同一个设备,换句话说,IRK可以用来识别蓝牙设备身份,因此其也称为Identity information。IRK一般由设备出厂的时候按照一定要求自动生成。

Identity Address(设备唯一地址),蓝牙设备地址包括public,random static, private resolvable,random unresolved共四类。如果设备不支持privacy,那么identity address就等于public或者random static设备地址。如果设备支持privacy,即使用private resolvable蓝牙设备地址,在这种情况下,虽然其地址每隔一段时间会变化一次,但是identity address仍然保持不变,其取值还是等于内在的public或者random static设备地址。Identity Address和IRK都可以用来唯一标识一个蓝牙设备。

IO capabilities(输入输出能力),是指蓝牙设备的输入输出能力,比如是否有键盘,是否有显示器,是否可以输入Yes/No两个确认值。

Key size(密钥长度),一般来说,密钥默认长度为16字节,为了适应一些低端的蓝牙设备处理能力,你也可以把密钥长度调低,比如变为10个字节。

 

2. Paring流程及命令

Paring包含三个阶段:

  1. 配对特性交换,即交换各自都支持哪些配对特性,比如支不支持SC,支不支持MITM,支不支持OOB,以及它的输入输出能力等
  2. 密钥生成阶段,legacy paring和LESC paring两者的区别就在这里,因此后续我们会分开阐述legacy paring和SC paring的阶段
    1. Legacy paring:STK生成(注:legacy paring的LTK生成跟配对流程无关,如前所述,其是由从机自己生成的)
    2. SC paring:LTK生成

     3. 通过蓝牙空中包分发一些秘密信息。Legacy paring需要分发LTK,IRK等,而SC paring只需分发IRK。秘密信息分发之前,必须保证连接已加密。

Paring流程如下所示:

 

2.1 阶段1:配对特性交换

配对特性交换涉及三条PDU命令:

  • Paring_Request

  

  • Paring_Response

 

  • Security_Request

  

IO Capability占一个字节,其定义如下所示:

  

AuthReq也是占用一个字节,其定义如下所示:

 

2.2 阶段2:密钥生成

根据阶段1的IO输入输出能力以及是否存在OOB,阶段2存在如下几种配对方式(或者说认证方式)

  • Just works
  • Numeric comparison(LESC才有)
  • Passkey
  • OOB

对于legacy paring,如果A和B都支持OOB,那么两者就会采用OOB方式进行配对,否则根据IO能力选择配对方式。对于SC paring,如果A或者B有一方支持OOB,那么两者就会采用OOB方式进行配对,否则根据IO能力选择配对方式。不同的IO能力对应的配对方式如下所示:


      注:粗略来说,有认证的配对方式就具备MITM保护功能,从IO角度看,有三种配对方式:just works,passkey和Numeric Comparison,其中just works没有MITM保护功能,而passkey和Numeric comparison具备MITM保护功能。换句话说,如果你要求你的设备具备MITM保护功能,那么它必须有一定IO能力,而不能是“NoInputNoOutput”。至于OOB方式有没有MITM保护,取决于OOB通信的安全性,如果OOB通信具备MITM保护,那么蓝牙也具备MITM保护,否则就不具备。

下面分legacy paring和sc paring对配对流程进行讲解。

2.2.1 legacy paring

       Legacy paring整个配对流程是围绕STK生成来做的,设备的认证是通过设备A和B经由TK生成一个确认数,如果这个确认数相同,则认证通过。

如前所述,legacy paring需要先生成TK,TK的生成方式取决于配对方式:

  • Just works。TK默认为全0
  • Passkey。TK由6位passkey扩展而来
  • OOB。TK直接由OOB数据提供

然后生成确认数,算法如下所示

生成STK的算法如下所示:

以passkey legacy paring为例,其第2阶段全工作流程如下所示:

   

Just works和OOB配对流程就不再赘述了,大家自己去看一下蓝牙核心规范的说明。

这里强调一下,配对完成之后,连接就会加密,而且加密的密钥是STK,而不是LTK

 

2.2.2 LESC paring

          跟legacy paring不一样的地方,LESC paring是通过Diffie-Hellman算法直接生成LTK,因此它不需要生成TK和STK。为了生成LTK,双方需要先交换公钥,流程如下所示:

  

公钥交换后,设备A和B就开始独自计算各自的DHKey,按照D-H算法,他们俩算出的DHKey会是同一个。而LTK和MacKey就是通过这个DHKey加密一系列数据而得到的。

Legacy paring在整个配对流程中只做一次认证,而LESC paring会做两次认证。LESC第一阶段认证的原理是,设备A和B各生成一个随机数,然后认证这个随机数对不对。LESC第二阶段认证过程是:设备A和B通过MacKey各生成一个检查值,对方确认这个值对不对。

以LESC Numeric comparison为例,其第一阶段认证流程如下所示:

  

我们还是以LESC Numeric comparison为例,其第二阶段全工作流程如下所示:

  

一旦LTK生成成功,主机端就可以发起加密连接流程,如下所示:

至此,LESC连接被LTK加密了,后面就可以分发秘密信息了。

2.3 阶段3:秘密信息分发

一旦连接加密了,主机和从机之间就可以分发一些秘密信息。如果是legacy paring,如下秘密信息必须分发:

  • LTK
  • EDIV
  • Rand

同时根据情况,legacy paring还需分发如下信息:

  • IRK
  • Identity address

对于LESC paring,秘密信息分发是可选,一般有可能分发如下信息:

  • IRK
  • Identity address

如下为legacy paring可能分发的最多秘密信息的一个例子:

  

2.4 绑定,重连和加密

如上所述,如果配对的两个设备生成了LTK及其他秘密信息,并且把LTK及其他秘密信息保存到Flash等永久化存储设备中,那么我们就可以说这两个设备绑定成功。换句话说,paring和bonding是两个不同的概念,paring更强调认证和密钥生成,而bonding更强调密钥保存。一旦两个设备bonding成功,那么这两个设备断开再次重连的时候,主机就可以发起加密流程,从而使用paring生成的LTK对后续的连接进行加密。主机发出加密连接流程如下所示:

这里说明一下,加密连接只能由主机发出,而不能由从机发起。不过从机可以发出加密请求,主机收到从机的加密请求后,可以发起加密连接也可以拒绝其请求。如下为主机同意从机的加密请求的工作流程:

2.5 配对命令一览表

如下为SM中用的PDU命令列表:(注:加密连接命令属于LL控制命令,所以没有包含在其中)

  

3. Nordic SDK配对流程

第2章是低功耗蓝牙通用配对流程,那么如何实现这个配对流程呢?也就是说,我该调用哪些API去实现配对流程,这些API调用的顺序又是如何,具体会产生哪些协议栈事件,该如何处理这些协议栈事件,这就涉及到协议栈的实现。Nordic蓝牙协议栈softdevice提供详细的工作流程图,以指导用户如何调用softdevice API去实现想要的配对流程,详细的配对流程图请参考infocenter如下界面:

  

比如S132协议栈,其从机端配对流程图链接为:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___s_e_c___m_s_c.html

以legacy paring,从机端显示passkey,主机端输入passkey为例,softdevice的配对流程图如下所示,链接为:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___b_o_n_d_i_n_g___p_k___p_e_r_i_p_h___m_s_c.html

  

上述配对流程图把用到的API,产生的softdevice事件,以及softdevice事件如何处理,都一一阐明,大家只要按照这个流程图来做,就可以完成期望的配对。更让人省心的是,Nordic SDK已经把几种典型的配对场景做成了例子,大家可以直接就拿过来用,连上面的配对流程图都不用看,就可以轻松完成自己的配对应用。Nordic提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc等,基本上囊括了蓝牙各种配对情况。后面会以ble_app_hrs为例来详细讲解如何实现低功耗蓝牙配对。                                    

4. 配对例程ble_app_hrs解读

nRF5 SDK把蓝牙配对做成了一个模块:peer_manager,也就是说,所有关于paring的工作都由peer manager自动完成,用户无需去了解softdevice底层API的使用方法,大家直接参考nRF5 SDK里面的例程就可以完成自己的配对应用开发。nRF5 SDK提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc等,基本上囊括了蓝牙各种配对情况,下面将和大家一起来解读ble_app_hrs配对相关代码。

如果你对Nordic nRF5 SDK和softdevice不是很熟的话,建议你先看一下这篇文章:手把手教你开发BLE数据透传应用程序,以建立Nordic开发的一些基础知识,然后再往下看。

跟没有paring的ble应用代码相比,有paring的ble应用只多了一个初始化函数:peer_manager_init(),peer_manager_init实现代码如下所示:

  

peer_manager_init里面注册了一个回调函数:pm_evt_handler,用来添加一些用户自定义的处理,例子代码pm_evt_handler的实现如下所示:

  

至此,一个just works的蓝牙配对例子就算完成了,是不是有点懵?感觉太简单了以至于有点接受不了。没关系,下面我们在这个例子上加一些额外的功能,以加深大家对它的理解。

5. ble_app_hrs配对方式改成LESC with numeric comparison

原始ble_app_hrs为just work方式的LESC配对,我们现在把它改成最高安全级别的numeric comparison LESC。我们的开发板没有显示器,因此我们将通过日志的方式把数字比较值输出,同时把button3的按下作为yes确认,button4的按下作为reject确认。

如何实现numeric comparison?前面我也提过,如果SDK有现成的例子,直接参考例子来;如果SDK没有现成的例子,那么就参考softdevice工作时序图。关于LESC numeric comparison,从机端的工作流程如下所示:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___l_e_s_c___b_o_n_d_i_n_g___n_c___m_s_c.html

这里要强调一下,时序图会把有可能需要用到事件和API都列出来,但不意味着列出来的事件和API都需要你去处理,因为大部分事件和API都被peer manager模块处理好了,只有哪些灵活的无法预先确定的事件和API才会留给用户自己去处理。那哪些事件和API需要用户自己处理呢?一个原则:全文搜索一下,只要peer manager已经调用过的API,你就不用处理;而流程图中剩下的API就需要你自己去处理了。比如上面这个例子,sd_ble_gap_sec_params_reply已经被peer manager模块处理了,所以你不用处理;而BLE_GAP_EVT_PASSKEY_DISPLAY和sd_ble_gap_auth_key_reply只在passkey和numeric comparison配对方式中才会出现,peer manager没有对其进行处理,因此需要用户自己处理。为此,我们在ble_evt_handler中加上分支:BLE_GAP_EVT_PASSKEY_DISPLAY,并按照流程图的要求加上相应的处理,代码如下所示:

复制代码

case BLE_GAP_EVT_PASSKEY_DISPLAY:
{char        passkey[BLE_GAP_PASSKEY_LEN + 1];memcpy(passkey, p_ble_evt->evt.gap_evt.params.passkey_display.passkey, BLE_GAP_PASSKEY_LEN);passkey[BLE_GAP_PASSKEY_LEN] = 0x00;NRF_LOG_INFO("=== PASSKEY: %s =====",   nrf_log_push(passkey));                NRF_LOG_INFO("Press Button 3 to confirm, Button 4 to reject");
}              
break;

复制代码

 

上面只是显示了passkey,如前所述,如果button3按下我们回复BLE_GAP_AUTH_KEY_TYPE_PASSKEY;如果button4按下我们回复BLE_GAP_AUTH_KEY_TYPE_NONE。相关代码如下所示:

复制代码

static void num_comp_reply(bool accept)
{uint8_t    key_type;ret_code_t err_code;NRF_LOG_INFO("m_conn_handle %d", m_conn_handle);if (m_conn_handle == BLE_CONN_HANDLE_INVALID) {return;}if (accept){NRF_LOG_INFO("Numeric Match");key_type = BLE_GAP_AUTH_KEY_TYPE_PASSKEY;}else{NRF_LOG_INFO("Numeric REJECT");key_type = BLE_GAP_AUTH_KEY_TYPE_NONE;}err_code = sd_ble_gap_auth_key_reply(m_conn_handle,key_type,NULL);APP_ERROR_CHECK(err_code);
}

复制代码

 

如前所述,配对方式是由IO输入输出能力确定的,而且numeric comparison是具备MITM能力的,为此我们还需要修改如下两个地方:

#define SEC_PARAM_MITM                1
#define SEC_PARAM_IO_CAPABILITIES     BLE_GAP_IO_CAPS_DISPLAY_YESNO

苹果手机是不能手动发起配对请求的,为了让苹果手机自动发起配对请求,我们将如下characteristic的安全级别提高:(注:除了这种方法,我们也可以通过从机主动发起安全请求来达到同样的目的)

hrs_init.hrm_cccd_wr_sec = SEC_MITM;

我这里以PCA10040/Keil5工程为例来编译,请编译工程:nRF5SDK160098a08e2\examples\ble_peripheral\ble_app_hrs\pca10040\s132\arm5_no_packs

将编译好的代码下载到开发板中,测试的时候,我们先连接开发板,然后使能CCCD,此时不管Android手机还是苹果手机,都会跳出配对对话框,同时显示出配对码,如下 :

开发板也把配对码打印出来了,如果两者一致,按下button3,整个配对流程顺利完成,开发板会打印如下信息:

  

上述代码已上传到百度云盘,大家可以去百度云盘下载:ble_app_hrs_nc.rar,然后解压缩到SDK根目录\examples\ble_peripheral,打开Keil5工程:SDK根目录\examples\ble_peripheral\ ble_app_hrs_nc\pca10040\s132\arm5_no_packs,就可以直接编译和运行。

6. 关于配对的一些小贴士

苹果手机的一点不同

安卓手机允许用户手动发起paring请求,而苹果手机则没有这个功能。因此,即使你的characteristic没有使能安全级别,安卓手机还是可以跟你的设备完成配对的,而苹果手机则不支持这个功能,苹果手机要不要跟设备进行配对,不能由人来控制的,只能由苹果iOS来控制。欲触发苹果iOS发起配对请求,有两种方法,一是将某个characteristic加上安全认证权限,这样iOS在服务发现过程中就会自动发起配对请求,以满足characteristic的安全认证级别;二是从机端主动发起安全请求,iOS收到从机的安全请求后,会等待用户的授权确认从而发起配对请求。这两种方法在ble_app_gls中都有体现,大家可以参考相关代码。

重连加密等级

绑定成功后,如果发生重连,那么主机应该自动发起加密连接请求,以对连接进行加密。一般来说,在连接没有成功加密前,主从机不要做敏感数据的交互,否则softdevice API会报NRF_ERROR_FORBIDDEN。对于有MITM保护的加密连接,在收到PM_EVT_CONN_SEC_SUCCEEDED这个事件后,设备应该去检测连接的安全等级是否符合要求,具体可参考ble_app_gls例子的做法。

Service changed(服务改变)

设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。但是,如果设备的服务改变了,此时手机再用之前的handle去操作设备,就会出问题。为了解决这个问题,在GATT主服务里面引入了service changed characteristic,如下所示:

有了这个characteristic,当设备的服务发生改变时,设备就可以通过这个characteristic发送一个indicate PDU给到手机,从而手机知道设备的服务已发生了改变,此时手机会重新发起service discovery流程,以重新获得service和characteristic最新的handle列表。欲添加service changed characteristic,你只需在sdk_config.h文件中打开如下两个宏:

#define PM_SERVICE_CHANGED_ENABLED  1
#define NRF_SDH_BLE_SERVICE_CHANGED 1

然后当服务发生改变时,调用pm_local_database_has_changed(),协议栈就会自动发起service changed indicate PDU给手机,从而引起手机重走服务发现过程。

删除主机端绑定信息

如果手机端删除了绑定信息,为了安全起见,设备端也需要跟着一起删除绑定信息,否则手机无法再次跟设备进行配对,这个是最理想的情况,但是我们有的设备没有任何输入接口,无法手动删除绑定信息,这个时候能不能有一种办法可以让手机跟设备进行二次配对呢?为此,Nordic提供了一种workaround,在蓝牙事件回调函数里面,加上如下代码即可:

复制代码

        if (p_evt->evt_id == PM_EVT_CONN_SEC_CONFIG_REQ){pm_conn_sec_config_t cfg;cfg.allow_repairing = true;pm_conn_sec_config_reply(p_evt->conn_handle, &cfg);} 

复制代码

这样,即使用户把手机端paring信息删掉,设备端paring信息没有删掉,手机还是可以跟设备进行二次配对的。

删除从机端绑定信息

跟上面相反,如果设备端bonding信息被删除了,而手机端bonding信息没有被删除,这种情况下如何实现二次配对?最安全的方式,让用户主动删除手机端绑定信息,但是很多开发者希望,用户体验好一点,也就是说,碰到这种情况希望手机能自动删除绑定信息,这个能不能实现跟手机有很大关系,首先我们确保协议栈返回LL_REJECT_IND or LL_REJECT_EXT_IND,错误码为“PIN or key missing”,一般而言,手机收到这个PDU后,都会自动删除bonding信息。如果上述方法行不通的话,那么发送完LL_REJECT_IND后再调用断开函数(sd_ble_gap_disconnect),同时将断开原因设为BLE_HCI_AUTHENTICATION_FAILURE即可。

同时绑定多个设备

Nordic SDK是支持一个设备同时跟多个主机绑定,只要设备存储空间足够大,那么可以绑定的设备数就不设限。nRF5 SDK中bonding信息也是通过fds来存储的,也就是说绑定信息和用户Flash数据共享同一块空间,如果需要绑定多个设备,那么FDS_VIRTUAL_PAGES这个宏的值必须进行修改,以保证分配的Flash空间可以同时容纳bonding信息和用户Flash数据。一般来说,如果需要绑定多个设备,请设置一个最大绑定数,比如8个,这样,一旦检测到绑定数达到8了,就可以把以前老的bonding设备删除,从而节省存储空间。那如何知道哪个设备是老设备哪个设备是新设备?这个是通过peer rank来实现的,大家只要使能PM_PEER_RANKS_ENABLED这个宏,就可以自动实现排序。

循环绑定测试

很多开发者喜欢做循环绑定测试,即同一部手机不断跟同一个设备进行配对,然后删除配对信息,然后再进行配对,他们测试下来发现:达到一定次数后,设备就工作不正常了,这个是由于当bonding信息不断累积而不进行删除的话,那么分配给fds的Flash空间就会耗尽,从而导致异常出现(最新的SDK会在Flash存储空间耗尽时,自动删除最老设备的绑定信息,但即使这样,对用户Flash数据的操作影响还是很大)。解决这个问题的方法就是设定一个最大bonding数,达到这个数目后,删除老bonding信息,从而达到循环利用Flash空间的目的。当然如果你的fds只是用来存储bonding信息而不做其他用户数据操作的话,那么就没有必要加上这个功能了。

白名单与绑定

虽然白名单和绑定二者没有任何联系,但是我们一般都把两者结合起来一起使用,以达到我们的使用期望。当两个设备绑定成功后,我们就可以将对方的mac地址或者IRK放入白名单中,同时开启白名单广播,这样设备只跟白名单中的主机进行连接,白名单以外的设备在controller层面就被过滤掉了,从而提高私密性以及连接效率。这种情况下,哪怕是合法的设备,如果之前没有跟设备绑定,那么它也无法跟设备建立连接。换句话说,如果你想把新设备加入到白名单中,那么首先需要禁止白名单广播而采用普通广播,然后跟新设备进行配对,成功后再把新设备身份信息加入到白名单中。白名单与绑定的例子具体可参考:ble_app_hids_keyboard

Authenticated payload timeout

大家都知道蓝牙连接有一个supervision timeout时间,也就是说,当建立连接的两个设备,任何一方在supervision timeout(比如4s)时间内,没有给对方发送任何蓝牙空口包,此时认为连接已断开,并触发supervision timeout事件。当设备双方建立加密连接后,不仅有上述的supervision timeout,还有一个authenticated payload timeout,authenticated payload timeout默认为30s,它的意思是,两个设备加密后,30s内必须有一个有数据的空口包交互,而不能一直发空包,否则认为authenticated payload timeout。Authenticated payload timeout是协议栈自动管理的,对软件开发来说是透明的,每30s时间到,如果期间没有任何有效数据包交互(一直在发空包),协议栈会自动发送一个ping request给对方,以避免authenticated payload timeout的出现(注:这里的协议栈既可以是设备的协议栈,也可以是手机的协议栈)。有时候不想等到30s超时到了再发送ping request,大家可以在connected事件中,调用如下API以提前发出ping request:

ble_opt_t opt;
memset(&opt, 0, sizeof(opt));
opt.gap_opt.auth_payload_timeout.conn_handle = m_conn_handle;
opt.gap_opt.auth_payload_timeout.auth_payload_timeout = 2000;  //20s timeout
err_code = sd_ble_opt_set(BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, &opt);   

当然,如果你能保证每30s时间内,手机和设备之间肯定会有有效数据包交互,或者手机端能及时准确地发出ping request,那么上述过程就完全没有必要了。 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. fortify SCA内置规则破解到简单工具开发使用

    摘要:前几天无意间有个小伙伴问我要fortify 内置最新规则,突然觉得内置规则既然能扫描代码缺陷,而他本质上是使用xml语言和内置源语言来编写的,心想能不能将其还原为xml文件,这样自定义规则的时候可以进行参考,少走弯路。说干就干,下面贴上具体步骤。1. 既然猜测是通过解…...

    2024/4/16 2:59:05
  2. 使用 strtok 提取 ip (点分十进制)网段

    struct net_addr_in {unsigned char sin_addr[4];//IP地址unsigned short sin_port;//端口unsigned char reserve[2]; };unsigned char *data; data = strtok(ipaddr, ".");if(data != NULL)server.sin_addr[0] = atoi(data);while(data = strtok(NULL, ".&quo…...

    2024/4/28 16:13:10
  3. java修改world中自定义位置的内容

    java修改world中自定义位置的内容 主要导入这个jar包,然后还要导入poi的jar包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.9</version> </dependency>将你想要修改的…...

    2024/4/16 2:59:52
  4. CRF条件随机场

    就是某点的随机变量y的值和该点关联的所有的点都有关系。一定是前后,可能是多维度的都有关系。 hmm,Y在i时刻状态与其前一时刻,即y(i-1) 相关。 CRF,Y在i时刻状态与其前后都有关系,即y(i-1)和y(i+1) 都相关。...

    2024/4/16 3:00:12
  5. 01.nodejs中commonjs的使用

    1.概述 1.Node 应用由模块组成,采用 CommonJS 模块规范。 2.每个文件就是一个模块,有自己的作用域。在每一个文件里面定义的变量、类、函数、都是私有的,对其他文件不可见。 3.如果想在多个文件分享变量,必须定义为globla对象的属性 globla.warning = true;上面代码的warni…...

    2024/4/16 2:59:15
  6. leetcode 第31题 下一个排列

    题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右…...

    2024/4/28 9:26:32
  7. 使用Maven+Spring+SpringMVC+MaBtis搭配一个简单SSM框架

    摘要 在学习ssm框架搭配的过程中,碰到一些问题,于是想记录下来… Maven项目的创建 1.勾选Create a simple project,点击next.2.输入Group Id,Artifact Id 以及选择packaging.点击finish.3.单击项目右键,选择properties for ssm之后,单击project facets,将java改成1.8(看自…...

    2024/4/27 22:04:24
  8. Win7系统怎样防止注册表被篡改【系统天地】

    win7是我们比较常用的系统,我们在使用电脑过程中,难免会遇到某恶意程序偷偷修改注册表数据,让用户的电脑设置发生了变化,那么Win7系统怎样防止注册表被篡改?下面小编带来预防系统注册表被恶意修改的方法,希望对大家有所帮助。 预防系统注册表被恶意修改的方法: 1、在键盘…...

    2024/4/28 9:05:24
  9. Qt学习(九)—— 布局管理器

    目录水平/垂直/网格布局水平布局垂直布局网格布局addWidget()addStretch()没有布局的界面不仅不美观,窗口中的内容也难以对窗口的大小进行自适应,因此我们还需要学习Qt中的布局管理。水平/垂直/网格布局Qt中的布局结构主要分为水平布局、垂直布局、网格布局三大类。水平布局布…...

    2024/4/28 14:53:21
  10. Flask工厂函数使用记录

    Flask工厂函数 官网 我的目录结构 flask_project-- config-- __init__.py-- config.py-- settings.py-- other_app...-- manage.py基本示例config.py定义工厂函数from flask import Flask from config.settings import config from api.views import apidef create_app(config_…...

    2024/4/28 15:06:42
  11. Nginx.conf配置文件中alias与root的区别

    他们都可以用来指定请求资源的路径 root: location /wap/ {root /wap_web/static; }假设访问的是http://localhost:8080/wap/test.html 那它实际访问的资源路径是:wap_web/static/wap/test.html alias: location /wap/ {alias /wap_web/static/; }实际访问的资源路径是:/…...

    2024/4/28 12:55:25
  12. typescript中的函数

    1.函数类型:我们可以为每个参数添加类型后再为函数本身添加返回值类型,ts能够根据返回语句自动推断出返回值类型,因此我们通常省略它; Function add (x: number, y: number): number{ Return x+y; } Let myAdd = function(x: number, y: number): number{ return x+y; }2.推…...

    2024/4/27 23:52:55
  13. JApiDocs将会是一个比Swagger更好的java文档

    JApiDocs的简单使用JApiDocs介绍swagger的缺点JApiDocs与Swagger的优势JApiDocs的中文官方文档地址JApiDocs的简单使用示例 JApiDocs介绍 JApiDocs功能与swagger类似,JApiDocs能生成各种格式的文档包括主要html,Markdown等等,它还支持你自定义自己的文档格式,你可以通过添加…...

    2024/4/28 16:37:49
  14. LeetCode 309. Best Time to Buy and Sell Stock with Cooldown

    原题目:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/思路:(本思路是参考题解写的)使用f数组,表示第i天操作以后的收益(买入用负收益表示,卖出用正收益表示),分析题目可以得到,第i天操作以后有三种状态f[i][0]表示持有一只股票(…...

    2024/4/28 5:30:44
  15. oracle not in exsits union all 等关键字使用

    1.一个监控点只能被一个运维企业使用,且如果运维企业删除后选择的监控点释放SELECT A.GUID, A.T_MONITOR_NAMEFROM ZTS_JKDXX A, ZTS_PFKJBXX BWHERE A.T_PWK_ID = B.GUIDAND B.T_QY_ID =6FC021DE44CE4CBA8E7EC2B49D1712EFAND A.GUID NOT IN(SELECT T_JKDIDFROM ZTS_YWJKDGL J…...

    2024/4/7 18:31:22
  16. Android 内置第三方apk

    1.不可卸载apk在源码的vendor目录用来存放第三方apk,新建文件夹名与apk名相同,并将文件夹放到mk文件中参与编译,使用过的mk文件路径(device/qcom/common/base.mk)PORDUCT_PACKAGES : = \ 继续添加文件夹名称在文件夹中放置好apk和Android.mk文件Android.mk内容:#全版本 L…...

    2024/4/16 2:59:00
  17. 序列Sequence的当前值修改

    Oracle序列Sequence的当前值修改增加减少 增加 增加序列当前值的方式: alter sequence seq_xxx increment by 10000; select seq_xxx.nextval from dual; alter sequence seq_xxx increment by 1; 主要修改完之后要increment by 1; 减少 只需要将步长换为负数即可。 alter se…...

    2024/4/18 6:21:32
  18. 【BlueZ Ble Slave】 如何用MGMT接口实现ble slave

    如何用BlueZ MGMT接口实现Ble Slave 一,关于MGMT接口 1,为什么有MGMT接口In short, it’s a new interface for user space Bluetooth components (like bluetoothd) to talk to the kernel and it aims to replace the existing raw HCI sockets.关于这部分信息可以访问:ht…...

    2024/4/16 3:00:12
  19. BOM / DOM(上)

    BOM / DOM(上)今天开始我们开始使用 js 去操作浏览器和页面中的 html 元素了BOMBOM(Browser Object Model): 浏览器对象模型 其实就是操作浏览器的一些能力 我们可以操作哪些内容获取一些浏览器的相关信息(窗口的大小) 操作浏览器进行页面跳转 获取当前浏览器地址栏的信…...

    2024/4/18 5:39:55
  20. antd Modal 里面嵌套form 表单赋值问题

    点击编辑弹出modal 模态框 , 为 FormItem赋值 initialValue, 当点击下一条表格的编辑时, FormItem内的值始终不变, 不能动态改变。 原因: 当我们第一次点开Modal的时候, FormItem会得到一个initialValue,但是这个值只在组件挂载的时候执行了一次, 当我们再次打开Modal窗…...

    2024/4/16 2:59:57

最新文章

  1. Git 常用命令大全

    &#x1f680; Git安装与基础知识学习 &#x1f310; &#x1f3af; Git作为一款全球开发者广泛使用的分布式版本控制系统&#xff0c;能够有效帮助团队协作并追踪项目历史版本。接下来&#xff0c;我们将详细展开Git的安装流程、基础命令操作、高级用法以及应对常见问题的方法…...

    2024/4/28 19:45:18
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理

    Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理 文章目录 Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理磁盘清理工具 使用“运行”命令访问磁盘清理利用存储感知自动管理空间清理WinSxS文件夹结合手动清理策略 小结删除临时文件总结&…...

    2024/4/28 13:37:24
  4. 如何转行成为产品经理?

    转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…...

    2024/4/22 16:14:13
  5. 【项目新功能开发篇】开发编码

    作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…...

    2024/4/27 12:02:13
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57