Pairing specific pairs among many

Hello, we're trying to make products using BLE with nRF52840(central) and nRF52833(peripheral).

We did make custom boards and also made a program that once paired(bonded), it won't connect with others.

(eg, once nRF52840 and nRF52833 is paired, it will not connect with others)

We were wondering is there a way to make specific central connect with specific peripheral?

Is there a way to make each central/peripheral unique so that pairing process can be done without interference?

We got concerned that wrongly paired(or bonded) devices might ship out.

At our current stage, pairing wrong central/peripheral is possible.

Other infos.

nRF52840-central has 2 buttons, while nRF52833-peripheral has none

We're using SDK 17.1.0 S140 Segger Studio

has NUS(communication) and BAS(battery check) BLE services

thanks

edit:

extra question: is there a way to write certain unique number/MAC address on flash during flash write and then read it during application?

How do I know which address of flash is used or not?(want to avoid  collision with bonded info)

Is there a download tool beside nRF Connect Programmer?

Parents
  • Hi,

    June20 said:
    I guess if I increase whitelist, the FDS part will increase too.

    The whitelist itself does not rely on FDS. But you need to store the information somewhere, and the most typical use case is to whitelist bonded peers. Those are stored in FDS (by the peer manager). The FDS pages are determined by sdk_config.h though, so this is static. It is just that the more data you have, the more of the allocated space you use. You can read more about FDS here if that is relevant.

    June20 said:
    About whitelist, I can't find much about whitelist create in SDK 17.1.0 version. Is there a way to create a whitelist without connection/pairing/bonding? (I have other address for connection)

    Yes, even though the SDK examples use bonding, you can do it with a raw address as well. Note one important point, though. Phones typically use resolvable addresses, and you only get the identity resolution key (IRK) via bonding. So whitelisting will not work properly with phones unless you bond with them. That said, to use whitelisting with specific addresses you build the whitelist yourself instead of using the peer manager (pm_whitelist_get()). So if you search for BLE_ADV_EVT_WHITELIST_REQUEST you can see where the whitelist is provided to the BLE stack, and this is where you need to insert your "manually" built whitelist instead.

Reply
  • Hi,

    June20 said:
    I guess if I increase whitelist, the FDS part will increase too.

    The whitelist itself does not rely on FDS. But you need to store the information somewhere, and the most typical use case is to whitelist bonded peers. Those are stored in FDS (by the peer manager). The FDS pages are determined by sdk_config.h though, so this is static. It is just that the more data you have, the more of the allocated space you use. You can read more about FDS here if that is relevant.

    June20 said:
    About whitelist, I can't find much about whitelist create in SDK 17.1.0 version. Is there a way to create a whitelist without connection/pairing/bonding? (I have other address for connection)

    Yes, even though the SDK examples use bonding, you can do it with a raw address as well. Note one important point, though. Phones typically use resolvable addresses, and you only get the identity resolution key (IRK) via bonding. So whitelisting will not work properly with phones unless you bond with them. That said, to use whitelisting with specific addresses you build the whitelist yourself instead of using the peer manager (pm_whitelist_get()). So if you search for BLE_ADV_EVT_WHITELIST_REQUEST you can see where the whitelist is provided to the BLE stack, and this is where you need to insert your "manually" built whitelist instead.

Children
No Data
Related