Fenix 6 - Bluetooth5 - Link Layer - Channel Selection Algorithm implementation issue

I've found an issue during the BLE connection of the Fenix 6 watches.  When I try to connect to my custom Bluetooth 5 device, I'm not able to connect to device due to the wrong  BT Link Layer Channel Map. When I turn watches on and try to connect Garmin Fenix6 watches in CONNECT_IND packet sends Channel map value 0x18 which allows communication only on BT RF channels 37, 38. When I connect these watches to my Android mobile phone via BT and then try to connect to my custom BT device, then is CONNECT_IND Channel Map correct and I'm able to connect.

  • BluetoothLowEnergy on Garmin devices is a minimal implementation.  If you've not seen it, here's the breakout from when it was first announced.  Little has changed since then:
    https://forums.garmin.com/developer/connect-iq/b/news-announcements/posts/adding-bluetooth-connectivity-to-your-connect-iq-projects

    I do have an app that will show you what the watch can see as far as BLE, so you may want to try that.

    https://apps.garmin.com/en-US/apps/9bcc8b66-8385-4afb-b93e-f69e01422284

  • Hi Jim, thank you for your answer. I'm using your app for a long time, and it's perfect for debugging and testing BLE devices.  Thank you for that. Anyway, it works exactly in the same way with your app, and it's obvious due to the usage of the same functions in the Connect IQ SDK. It looks like a BUG in BLE implementation.

  • So you see your sensor with bleScan?  Do you see the UUID with blescan?  With blescan, can you connect?

    if you use nRfConnect from Nordic on your phone, what flags are you seeing?  How far do you get in scanning and pairing with your app, blescan, and nRfConnect?

  • Yes I see my BLE sensor with bleScan and when I try to connect, I've got the same scenario. Garmin watches reply with CONNECT_IND packet and in the Link Layer Data is Channel Map set to 0x18 so my sensor can connect only on RF channels 37 and 38. Hop is set to 9, so there is only a low probability of connecting, or it takes really long time to connect (more than 5 min).

    The only difference between my new sensor (based on Ublox NORA B100 BLE module) and the previous version with BM71, which works successfully in all cases, is the flag in the advertising packet in the packet header.

    BM71 - Packet Header: 0x1200 (PDU Type: ADV_IND, ChSel: #1, TxAdd: Public)

    B100 - Packet Header: 0x1460 (PDU Type: ADV_IND, ChSel: #2, TxAdd: Random)

    So there is a different channel selection algorithm and Tx Address.

    BUT when I first connect my Garmin Fenix6 watches to my mobile via BT and then I run the bleScan the CONNECT_IND packet contains Channel Map: ffffffff1f and my BLE sensor is connected immediately.

    So there is a different response/behaviour of the Fenix6 watches when connect to the other BT device.

  • As I've said, the BLE in CIQ is a minimal implementation (for memory, etc).  What I'd look at is why the BM71 and B100 are different and if the B100 can be made to look like the BM71.

    Are you saying that blescan sees and can connect with the B100?  If so, your CIQ app should do the same, as I'm only using the basic calls in blescan.  Is the ble profile the same for both (I don't use one in blescan), as nothing is learned over the connection as far as services and characteristics with the CIQ version.  You must define everything in your code.

  • My app and bleScan have exactly the same output when I analyze BLE communication between Garmin watches and NORA B100. Now I'm trying to set the same flags to ADV packet from NORA B100 as it has BM71. This should solve the problem. What I don't understand is the different behaviour when I have connected the mobile phone or not. There is not any trouble with GAP profile or services etc., but only on the BT link layer when BT hops across frequencies (RF channels) as it has a spread spectrum, and Garmin Watches limits connection possibilities only to 2 RF channels at the end of the frequency spectrum.

  • How many BLE channels does the B100 support?  Could be when the phone is connected, Garmin uses a 2nd one, which is configured differently.

    For example, the HRM-PRO supports two BLE channels, but there, both are the same.

  • The question is not how many channels the B100 supports but how are used. The Garmin Watches, via implemented BT Adaptive Frequency Hopping mechanism, propose to advertising device (my BLE sensor) on which channel can communicate. When Garmin watches limits RF channels only to RF channels 37 and 38 (which are used primarily for advertising), then there is only a small chance of creating successful communication. A nice description of Adaptive Frequency Hopping is here: Bluetooth® Low Energy Channels 

  • If you're looking for a change to this on devices, it's in the FW, so if it's done, you're probably looking at 4 months for devices that have quarterly updates and some it maybe be longer.  Your best bet is to see what can be done on the b100 end.

  • Thank you for your effort and support. You are right its bug in the FW and I have to hope that it will be fixed soon. In the meantime I will tune my B100 sensor. Don't you know if there is any option (except this forum) where can be this bug reported?