BLE不绑定【至急】



  • 想问下,如果希望BLE只是进行配对连接,不进行绑定的话,应该如何进行设置呢?



  • gap_security_param_t param =
    {
    //just work
    .mitm = false,
    .ble_secure_conn = false,
    .io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT,
    .pair_init_mode = GAP_PAIRING_MODE_WAIT_FOR_REQ,
    .bond_auth = false,
    .password = 0,
    };

        gap_security_param_init(&param);
    

    这样配置哦



  • @刘流鎏
    我现在的代码就是按照上述这么写的,但是还是会出现绑定的情况:
    代码:

    uint8_t local_name[] = "XXXXX";
    gap_set_dev_name(local_name, sizeof(local_name));
    os_timer_init( &update_param_timer,param_timer_func,NULL);

    gap_security_param_t param =
    {
    .mitm = false,
    .ble_secure_conn = false,
    .io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT,
    .pair_init_mode = GAP_PAIRING_MODE_WAIT_FOR_REQ,
    .bond_auth = false,
    .password = 0,
    };
    // Initialize security related settings.
    gap_security_param_init(&param);

    gap_set_cb_func(app_gap_evt_cb);

    random_data_init();
    ts_dev_reg_init();
    ts_adv_init();

    //enable bond manage module, which will record bond key and peer service info into flash.
    //and read these info from flash when func: "gap_bond_manager_init" executes.
    gap_bond_manager_init(BLE_BONDING_INFO_SAVE_ADDR, BLE_REMOTE_SERVICE_SAVE_ADDR, 8, false);
    gap_bond_manager_delete_all();

    mac_addr_t addr;
    gap_address_get(&addr);
    co_printf("Local BDADDR: 0x%2X%2X%2X%2X%2X%2X\r\n", addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], addr.addr[4], addr.addr[5]);

    ts_dev_conn_init();

    Log:

    Adv Data: 0x17 0x16 0xEE 0xFD 0x01 0x01 0x0D 0x04 0x00 0x11 0xF0 0x12 0x32 0x4A 0x55 0x47 0xFF 0x17 0x01 0x15 0x14 0x02 0x35 0x61 0x00 0x00 0x00 0x00
    Data lens: 28
    Resp Data: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    Data lens: 31
    Resp Data: 0x1A 0x09 0x48 0x69 0x2D 0x54 0x61 0x69 0x6C 0x47 0x54 0x61 0x69 0x6C 0x47 0x2D 0x31 0x32 0x4A 0x55 0x47 0x30 0x30 0x61 0x35 0x35 0x61 0x00 0x00 0x00 0x00
    Data lens: 31
    Local BDADDR: 0x415D393734D5
    GAP_EVT_NO: 0x00
    All service added
    Start advertising...

    GATT_EVT_NO: 0x07
    GATT_EVT: GATTC_MSG_LINK_CREATE
    link_created

    addr_type:1
    GAP_EVT_NO: 0x01
    slave[0],connect. link_num:1
    GAP_EVT_NO: 0x09
    adv_end,status:0x00
    b_r

    GAP_EVT_NO: 0x17
    GAP_SEC_EVT_BOND_START
    [SEC]:peer,auth_req:d
    GAP_EVT_NO: 0x19
    GAP_SEC_EVT_BOND_SUCCESS【这里通知了BOND成功】


    我这边业务场景不能有bond,出现bond success就走不下去了。



  • @zhaoxiuchengBLE不绑定【至急】 中说:

    GAP_SEC_EVT_BOND_SUCCESS

    GAP_SEC_EVT_BOND_SUCCESS 就是表示配对成功的意思, 是在协议栈收到GAPC_PAIRING_SUCCEED, 通知应用层配对成功
    case (GAPC_PAIRING_SUCCEED):
    {
    gap_event_t evt;
    evt.type = GAP_SEC_EVT_BOND_SUCCESS;
    evt.param.bond_success_conidx = KE_IDX_GET(src_id);
    if(app_env.gap_evt_func)
    app_env.gap_evt_func( &evt );
    ...



  • 我这边目前出现bond success之后流程就走不下去,但是如果没有bond success就可以走,概率性会出现没有bond success返回的情况

    这种情况下一般是什么原因呢

    我看文档:.bond_auth = false,这个只是代码是否发送Key,不涉及是否进行绑定操作呢
    @刘流鎏



  • @zhaoxiuchengBLE不绑定【至急】 中说:

    bon

    就是这样配的. 走不下去的原因是什么?log 报什么异常吗?



  • @刘流鎏 目前我们测试的状况:
    没有收到GAP_SEC_EVT_BOND_SUCCESS:
    可以接收到GATT write的消息

    接收到GAP_SEC_EVT_BOND_SUCCESS:
    手机侧发送GATT write消息就会收不到



  • @zhaoxiucheng
    拿nrf connect App 测一下. 一般情况配对不影响gatt write.



  • 接收到Bond成功,没有反映:
    freqchipfreqchipfreqchipfreqchipBLE Peripheral
    Local BDADDR: 0x415D393734D5
    GAP_EVT_NO: 0x00
    All service added
    Start advertising...

    GATT_EVT_NO: 0x07
    GATT_EVT: GATTC_MSG_LINK_CREATE
    link_created

    addr_type:1
    GAP_EVT_NO: 0x01
    slave[0],connect. link_num:1
    GAP_EVT_NO: 0x09
    adv_end,status:0x00
    b_r
    GAP_EVT_NO: 0x17
    GAP_SEC_EVT_BOND_START
    [SEC]:peer,auth_req:d
    GAP_EVT_NO: 0x19
    GAP_SEC_EVT_BOND_SUCCESS

    未接收到Bond Success:
    freqchipfreqchipfreqchipfreqchipBLE Peripheral
    Local BDADDR: 0x415D393734D5
    GAP_EVT_NO: 0x00
    All service added
    Start advertising...

    GATT_EVT_NO: 0x07
    GATT_EVT: GATTC_MSG_LINK_CREATE
    link_created

    addr_type:1
    GAP_EVT_NO: 0x01
    slave[0],connect. link_num:1
    GAP_EVT_NO: 0x09
    adv_end,status:0x00
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:9,latency:0,timeout:500
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:6,latency:0,timeout:500

    GATT_EVT_NO: 0x01
    GATT_EVT: GATTC_MSG_WRITE_REQ
    GATT_IDX_READ_CFG:0x02,0x00,

    GAP_EVT_NO: 0x06
    Link[0]param update,interval:9,latency:0,timeout:500
    GAP_EVT_NO: 0x10
    mtu update,conidx=0,mtu=247

    GATT_EVT_NO: 0x01
    GATT_EVT: GATTC_MSG_WRITE_REQ
    write_recv:
    0x00,0xD8,0x01,0x00,0x00,0x00,0x00,0x11,0x09,0x6E,0x65,0x74,0x43,0x66,0x67,0x56,0x65,0x72,0x00,0x00,
    GATT_EVT: gatt_write_req

    GATT_EVT_NO: 0x06

    GATT_EVT_NO: 0x08
    GATT_EVT: GATTC_MSG_LINK_LOST
    link_lost

    GAP_EVT_NO: 0x03
    Link[0] disconnect,reason:0x13
    Start advertising...



  • @刘流鎏
    学习一下这个资料docs\Application Notes\Fr801xH 如何构建多从机工程.pdf, 芯片不熟悉引起的若干问题



  • @刘流鎏
    目前通过nRF connect测试结果如下:

    1. 先进行Bond,然后在Bond页面点击连接无法连接成功
    2. 进入nRF connect直接点击连接,可以正常连接并且收发数据
    3. 进入nRF connect点击连接(without bond),进行连接,连接后点击bond进行绑定,此时进行收发数据,设备端没有任何返回,无反应状态,显示【connect/bonded(左上角)】的位置一直在转圈

    关于3的log为:
    addr_type:1
    GAP_EVT_NO: 0x01
    slave[0],connect. link_num:1
    GAP_EVT_NO: 0x09
    adv_end,status:0x00
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:9,latency:0,timeout:500
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:6,latency:0,timeout:2000
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:9,latency:0,timeout:500
    b_r
    GAP_EVT_NO: 0x17
    GAP_SEC_EVT_BOND_START
    [SEC]:peer,auth_req:d
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:6,latency:0,timeout:2000
    GAP_EVT_NO: 0x19
    GAP_SEC_EVT_BOND_SUCCESS



  • 要bond 完成再收发数据



  • @刘流鎏

    GAP_SEC_EVT_BOND_START
    [SEC]:peer,auth_req:d
    GAP_EVT_NO: 0x06
    Link[0]param update,interval:6,latency:0,timeout:2000
    GAP_EVT_NO: 0x19
    GAP_SEC_EVT_BOND_SUCCESS
    这个log走完,并且nRF connect上面显示了Bonded之后我才发送的数据,发送完数据就会出现
    【此时进行收发数据,设备端没有任何返回,无反应状态,显示【connect/bonded(左上角)】的位置一直在转圈】
    发送数据之前,左上角没有转圈,发送之后才开始转圈的



  • 此回复已被删除!