This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/CC2541:BLE 扫描问题

Guru**** 1630180 points
Other Parts Discussed in Thread: CC2541, CC2540
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/833352/compiler-cc2541-ble-scan-issue

器件型号:CC2541
主题中讨论的其他器件: CC2540

工具/软件:TI C/C++编译器

您好!  
我使用 cc2541作为中央设备。 我面临以下问题:

我正在扫描设备、 我在扫描结果中有6个 cc2541 BLE 和1个 BLE 4.2芯片(不知道芯片编号)我找到了6个(BLE cc2541)设备、但无法扫描剩余的 BLE 4.2。 如何扫描所有设备?

2-I 还想连接另一个器件。 我正在使用此 API。 这种保存其他设备的 MAC 地址并进行连接的正确方法是不是?

uint8 addrType;

uint8 * peerAddr;

peerAddr ="0x78DB2FD19591";  

addrType = simpleBLEDevList[simpleBLEScanIdx].addrType;
simpleBLEState = BLE_State_Connecting;

GAPCentralRole_EstablishLink (default_link_high_Duty_cycle、
default_link_white_list、
addrType,peerAddr );

谢谢你  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果我正确地记得、会根据广播数据(即简化的 UUID)对特定设备进行筛选。 在简单的中央应用程序文件的顶部应该有一个可以设置为 false 的定义。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢  提出第一个问题。
    请建议解决第二个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果对地址进行硬编码、则还应对 addrType 进行硬编码。 但是、您只能出于测试目的进行硬编码。 中央系统应该真正扫描设备、然后检查您是否找到要查找的地址。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    我已将此设置为 false,但仍无法扫描设备:(

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID false

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    扫描时您得到了什么响应? 您确定设备正在广播吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的器件正在广播、我也可以在 NRF 应用程序中看到我的器件、但在 IAR 中看不到(显示0个找到的器件)


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    扫描持续时间是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    扫描持续时间为3000ms

    //扫描持续时间(以 ms 为单位)
    #define DEFAULT_SCAN_DURATION 3000

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可能希望尝试更长的持续时间、外围设备的广播间隔是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已设置这些设置。

    //扫描响应的最大数量
    #define DEFAULT_MAX_SCAN_RES 8.

    //扫描持续时间(以 ms 为单位)
    #define DEFAULT_SCAN_DURATION 5000

    //调查模式(有限、通用、全部)
    #define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL

    // true 使用活动扫描
    #define DEFAULT_DISCOVERY ACTIVE_SCAN TRUE

    // true 在发现过程中使用白色列表
    #define DEFAULT_DISCOVERY_WHICE_LIST FALSE

    // true 在创建链接时使用高扫描占空比
    #define default_link_high_Duty_cycle false

    // true 在创建链接时使用白色列表
    #define DEFAULT_LINK_WHICE_LIST FALSE

    //默认 RSSI 轮询周期,以 ms 为单位
    #define DEFAULT_RSSI_PERIOD 1000

    //在建立连接时是否启用自动参数更新请求
    #define DEFAULT_ENABLE_UPDATE_REQUEST FALSE

    //如果启用了自动参数更新请求,则最小连接间隔(单位为1.25ms)
    #define DEFAULT_UPDATE_MIN_CONN_INTERVAL 400

    //如果启用了自动参数更新请求,则最大连接间隔(单位为1.25ms)
    #define DEFAULT_UPDATE_MAX_CONN_INTERVAL 800

    //启用自动参数更新请求时要使用的从器件延迟
    #define DEFAULT_UPDATE_SLAVE_DELATCY 0

    //如果启用了自动参数更新请求,则监控超时值(10ms 的单位)
    #define DEFAULT_UPDATE_CONN_TIMEOUT 600

    //默认密码
    #define DEFAULT_Passcode 0 //19655

    //缺省 GAP 配对模式
    #define DEFAULT_Pairing_mode GAPBOND_Pairing_mode_no_paire//GAPBOND_Pairing_mode_wait_for_Req

    //默认 MIPTM 模式(配对时需要密码或 OOB)
    #define DEFAULT_MITM_MODE 错误

    //默认绑定模式,对绑定为真
    #define default_bonding_mode true

    //缺省间隙键合 I/O 功能
    #define DEFAULT_IO_Capabilities GAPBOND_IO_CAP_DISPLAY_ONLY

    //默认服务发现计时器延迟,以 ms 为单位
    #define DEFAULT_SVC_DISCOVERY_DELAY 1000

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID false



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这种配置主要用于 GAP Central。 我要求使用 GAP 外设、例如广播间隔。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我无法在  NRF 应用中看到外设器件的广播间隔。 它显示 N/A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     我还有另一个广播间隔为 546.25毫秒的 ibeacon 器件。 我的中央设备也不会扫描该设备。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我将此 DEFAULT_DEV_DISC_by_SVC_UUID 设置为 FLASE 时。 BLE 停止扫描所有器件并显示0结果。

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID FLASE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想您是指"false"。 当我定义 DEFAULT_DEV_DISC_BY_SVC_UUID false 时、我可以扫描其他设备。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    当我定义 FAULT_DEV_DISC_BY_SVC_UUID TRUE 时  、我可以扫描其他 cc2541器件。
    但是  
    当我 FAULT_DEV_DISC_BY_SVC_UUID 为 false 时、我无法扫描任何设备(甚至是 cc2541设备)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我无法再现您的诉求、因此我不确定正在发生什么情况。 你确定了;

    1.中央正在扫描

    2.外设正在广播

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    1.中央是扫描?

    是的、我确定 Central 正在扫描。 我打开了3个外设(2个 cc2541+1另一个 BLE 器件)。 我正在附加该扫描的屏幕截图。下图是何时  

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID true

    在这种情况下、中心只扫描2个 BLE 器件(仅 cc2541)。如屏幕截图所示。   


    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID  false

    在本例中、中央扫描0 BLE 设备。如屏幕截图所示。

    2.外设正在广播?

    是的、 所有3个外设都在广播。 我在图像中显示了签入 NRF 应用程序


    请向我推荐解决方案、以便我可以扫描全部3个设备。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  
    有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试以下操作:

    https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/p/284084/1000001#1000001

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好

    我已设置这些值,但仍无法扫描设备:(

    1 -

    // TRUE 以筛选所需服务 UUID 上的发现结果

    #define DEFAULT_DEV_DISC_BY_SVC_UUID false

    2 -

    //设置间隙
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_INT、16);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_WING、16);

    3 -

    HCI_EXT_HaltDuringRfCmd (HCI_EXT_HALT_During_RF_DISABLE);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TGAP_GEN_DISC_SCAN_INT 的单位为(n * 0.625msec)。

    尝试使用较大的值、例如160 (100ms)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已设置 TGAP_GEN_DISC_SCAN_INT 1000、但仍无法扫描器件(我可以在 NRF 中扫描)。

    我设置这些设置时、请检查这些设置、或者我在这些设置中犯错。


    // BD addr 作为字符串的长度
    #define B_ADDR_STR_LEN 15.

    /*********
    *常量
    *

    //扫描响应的最大数量
    #define DEFAULT_MAX_SCAN_RES 8.

    //扫描持续时间(以 ms 为单位)
    #define DEFAULT_SCAN_DURATION 10000

    //调查模式(有限、通用、全部)
    #define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL

    // true 使用活动扫描
    #define DEFAULT_DISCOVERY ACTIVE_SCAN TRUE

    // true 在发现过程中使用白色列表
    #define DEFAULT_DISCOVERY_WHICE_LIST FALSE

    // true 在创建链接时使用高扫描占空比
    #define default_link_high_Duty_cycle false

    // true 在创建链接时使用白色列表
    #define DEFAULT_LINK_WHICE_LIST FALSE

    //默认 RSSI 轮询周期,以 ms 为单位
    #define DEFAULT_RSSI_PERIOD 1000

    //在建立连接时是否启用自动参数更新请求
    #define DEFAULT_ENABLE_UPDATE_REQUEST FALSE

    //如果启用了自动参数更新请求,则最小连接间隔(单位为1.25ms)
    #define DEFAULT_UPDATE_MIN_CONN_INTERVAL 400

    //如果启用了自动参数更新请求,则最大连接间隔(单位为1.25ms)
    #define DEFAULT_UPDATE_MAX_CONN_INTERVAL 800

    //启用自动参数更新请求时要使用的从器件延迟
    #define DEFAULT_UPDATE_SLAVE_DELATCY 0

    //如果启用了自动参数更新请求,则监控超时值(10ms 的单位)
    #define DEFAULT_UPDATE_CONN_TIMEOUT 600

    //默认密码
    #define DEFAULT_Passcode 0 //19655

    //缺省 GAP 配对模式
    #define DEFAULT_Pairing_mode GAPBOND_Pairing_mode_no_paire//GAPBOND_Pairing_mode_wait_for_Req

    //默认 MIPTM 模式(配对时需要密码或 OOB)
    #define DEFAULT_MITM_MODE 错误

    //默认绑定模式,对绑定为真
    #define default_bonding_mode true

    //缺省间隙键合 I/O 功能
    #define DEFAULT_IO_Capabilities GAPBOND_IO_CAP_DISPLAY_ONLY

    //默认服务发现计时器延迟,以 ms 为单位
    #define DEFAULT_SVC_DISCOVERY_DELAY 1000

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID false

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来不错。

    您使用的是什么硬件?

    是否使用最新的 SDK? (v1.5.0)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是1.4.2。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请试用最新版本。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已更新堆栈(1.5.0.16)。

    我已打开2个 BLE 电源(1个 BLE、1个 iBeacon)。但仍无法扫描这些器件。 我忘记了任何内核设置吗?

    // TRUE 以筛选所需服务 UUID 上的发现结果
    #define DEFAULT_DEV_DISC_BY_SVC_UUID false

    //设置间隙
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_INT、16);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_WING、16);
    GAP_SetParamValue( TGAP_GEN_DISC_scan,DEFAULT_SCAN_DURATION );
    // GAP_SetParamValue( TGAP_LIM_DISC_scan,DEFAULT_SCAN_DURATION );
    GGS_SetParameter (GGS_DEVICE_NAME_ATT、GAP_DEVICE_NAME_LEN,(uint8 *) simpleBLEDeviceName);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  
    请提供任何建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Muqarab、

    我  在具有 IAR 10.30.1的 SmartRF05EB+CC2541EM 上测试了 BLE-CC254x-1.5.0.16的 simpleBLECentral 示例。

    扫描区域中的内容似乎效果不错、尽管我在这里没有要扫描的 iBeacon 器件、但它应该是相同的、因为只有负载与常规广播器不同。

    我只更改了以下内容:

    #define DEFAULT_DEV_DISC_BY_SVC_UUID      错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好
    设置"#define DEFAULT_DEV_DISC_BY_SVC_UUID    false "后是否能够扫描其他 cc2541器件(如果是)、请上传您的项目并发送"我"链接。 我将不胜感激。 因为每当我设置"#define DEFAULT_DEV_DISC_BY_SVC_UUID    false "时、我找到的器件结果为"0"。
    我迫切需要扫描所有设备。 谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我直接从 SDK 中使用了该示例。 是的、我将 DEFAULT_DEV_DISC_BY_SVC_UUID 设置为 false。

    我在 EM+EB 上运行它:

    http://www.ti.com/tool/CC2541EMK

    http://www.ti.com/lit/ug/swru210a/swru210a.pdf

    您可以尝试重新安装 SDK。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在尝试但仍然无法扫描设备。 :(
    我可以使用  SimpleBLEObserver  扫描所有器件吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好
    我有 CC2540。 使用 CC2540、我已成功扫描器件。 )
    但是、对于使用 cc2541的 cc2541中的同一项目、我无法扫描器件?
    cc2541是否有任何设置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这很奇怪。 有一些微小的差异、但这就是 CC2540和 CC2541有不同示例项目的原因。 在应用级别上不应有任何差异。 您是否尝试过不同的 CC2541器件?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我已经尝试过3个其他 cc2541。但当我在    SimpleBLECentral_Init  cc2541中注释此部件时、也会开始扫描设备。

    P0SEL = 0;//将端口0配置为 GPIO
    P1SEL = 0;//将端口1配置为 GPIO
    P2SEL = 0;//将端口2配置为 GPIO

    P0DIR = 0xFF;  
    P1DIR = 0x13;  
    P2DIR = 0x1F;

    P0 = 0;  
    P1 = 0xE6;  
    P2 = 0;

    在 CC2541和 CC2540中、如果我在  SimpleBLECentral_Init  CC2540中取消压缩这些设置、则也会提供0扫描结果。

    P0SEL = 0;//将端口0配置为 GPIO
    P1SEL = 0;//将端口1配置为 GPIO
    P2SEL = 0;//将端口2配置为 GPIO

    P0DIR = 0xFF;
    P1DIR = 0x13;
    P2DIR = 0x1F;

    P0 = 0;
    P1 = 0xE6;
    P2 = 0;

    这个问题是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何在中央启用广播?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您运行的是哪种硬件?

    在 调试模式下运行时、应在 simpleBLECentralEventCB -> Case GAP_DEVICE_INFO_EVENT 中设置断点、以验证是否正在接收广播。

    因此、如果您不手动配置 IO、它会起作用吗?