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.

CC2652R: More info on LL_CHANNEL_MAP_IND PDU

Part Number: CC2652R
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1

Hi Team,

This query has been raised to know extra info other than what is mentioned in the parent question. It is clear that the central, in case of a mobile, will decide when to send the PDU LL_CHANNEL_MAP_IND and I believe it depends on the mobile manufacturer. I want to know what is the situation in case if I have the scenario where both central and peripheral are CC2652R controllers, because I am working with this scenario. Especially I want answers for below questions.

1) How frequently the PDU LL_CHANNEL_MAP_IND is exchanged in my scenario ?.

2) Can I control how frequently the PDU LL_CHANNEL_MAP_IND shall be exchanged by the master CC2652R with slave CC2652R during connection?. If yes, please mention how can it be done ?.

This is very important consideration for our product development, because this channel update procedure introduces extra connection events involving empty PDU exchange as mentioned in the parent issue and it has huge impact on the products battery life.

Thanks in advance for your time and help.

Regards

Rahul Chowdary

  • Hi Rahul,

    I have assigned an expert to comment on this.

    Best Regards,

    Jan

  • Rahul,

    Since you have control over the central, the connection parameter is updated as often as you want. Although the spec says only the central can send this PDU, it says nothing about how often it must be sent. Also, the peripheral can send a request to change the connection parameters, which may increase the number of times this particular PDU is exchanged. 

    The Connections module of the Simplelink Academy contains some implementation details about the connection parameters.

    https://dev.ti.com/tirex/explore/node?node=AKui.0P6XA0Q2Q70ZaYksA__pTTHBmu__LATEST

    You can also check the HCI API reference, which contains some APIs about the channel map.

    https://dev.ti.com/tirex/content/simplelink_cc13x2_26x2_sdk_5_10_00_48/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___h_c_i.html

    Hope this helps,

    Rafael

  • Hi Rafael,

    Thanks for the update. The connections module of the simplelink academy tells how to set connection parameters such as min, max and timeout parameters, but not about channel selection algorithm. However, I have read the below information from the BLE stack user guide related to channel selection algorithm.

    https://software-dl.ti.com/lprf/simplelink_cc26x2_latest/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/channel-selection-algorithm-number-two.html

    The information in the above link gives an idea on how to disable CSA 2, which is enabled by default in the stack. When CSA 2 is disabled by the user then CSA 1 will be used by default. I totally get this point. But let me recall my question again.

    1) Can I completely switch off the channel map update (Both CSA 1 and CSA 2) during a connection ?. If yes please let me know how can it be done ?.

    2) If I cannot turn off channel map update during a connection then is it possible to control the frequency with which master device updates the channel map with slave during a connection ?. If yes then please let me know the procedure to do the same.

    Thanks for your time and help.

    Regards

    Rahul

  • Please find some additional information for your understanding.

    I have conducted a test case where master is a samsung note 20 ultra mobile and slave is LAUNCHXL-CC26x2R1 launchpad. Below connection parameters were set on the slave side.

    Connection Update Request Params

    Parameter Update Delay (ms)                  :             2000

    Requested Min Conn. Interval (ms)         :             50

    Requested Max Conn. Interval (ms)         :             100

    Requested Slave Latency                           :             140

    Requested Conn. Timeout (ms)                :             32000

    Conn. Int selected by master (ms)           :             87.5

    Actual conn. Int with slave latency (ms)  :             12250

    Notification interval (ms)                          :             12250

    Please find the below sniffer output captured using another LAUNCHXL-CC26x2R1 running sniffle_cc26x2r.out firmware. For example, the frame 736 corresponds to connection interval as well as notification interval since both are same in this case. Ideally I would expect just empty PDU at this instant from slave if there is no actual data. But, notification data was exchanged as we have notification data. Right after this in the frame pair 738-739 channel map update happened. Again we have empty PDU exchange in the frame pair 740-741. I understood from the parent issue that this additional empty PDU is due to some handshaking procedure. However, this empty PDU exchange did not stop here. Further, If we look at the next connection event at 38.270214 sec notification data has been exchanged. Again, two more empty PDU exchanges can be observed right after this in 882-883 and 888-889 message pairs. This scenario is really uncertain because slave latency is completely ignored and it is raising lot of concerns about the products battery life. Hope this explanation gives clear idea about our concerns. Sniffer output.zip 

  • Rahul,

    I consulted with colleagues that confirmed that you can arbitrarily send the channel map updates from a central device when requested by a peripheral - i.e., our implementation of central does not send periodic LL_CHANNEL_MAP_IND packets arbitrarily during a connection but only during its establishment.

    I think that solves both questions 1) and 2), right? If you want to issue a channel map update, you can use the HCI API as shown below:

    HCI_LE_SetHostChanClassificationCmd()

    I also send attached a simple_central file with the API call and some of the support code - just a test, but at every disconnect it arbitrarily sends a connection map update.

    As for the Android, I suspect there might be a way to configure that but a search could not return anything solid.

    Hope this helps,

    Rafael

    2210.simple_central.c

  • Hi Rafael,

    Thanks for the solid update. Now, I will conduct the test with two TI BLE boards and check the behavior. If it is not going to happen periodically as per your update then we would have good progress. However, I will come back with an update in a day. 

    Regards

    Rahul

  • Hi Rafael,

    I have conducted the test and there is no periodic channel map update between two LAUNCHXL-CC26x2R1 launchpads as you suggested. This is really helpful to us. I have another query on this. What would be the situation during BLE interference ?. Does the central perform automatic channel mapping (which I believe Adaptive frequency hopping (AFH)) when it observes interference during a connection with peripheral ?. If yes, please let me know how to enable this in the application or is it by default enabled in the TI BLE stack ?. 

    Regards

    Rahul Chowdary

  • Rahul,

    Although the radio core of the device will take care of any necessary retransmissions and our stack has the support to notify the PER per channel up to the user's application, no further action is performed. In other words, it is up to you to retrieve this information and trigger a channel map update. Also we do not support Adaptive Frequency Hopping (AFH).

    The PER can be obtained by the function HCI_EXT_PacketErrorRateCmd()

    https://dev.ti.com/tirex/explore/content/simplelink_cc13x2_26x2_sdk_5_10_00_48/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___h_c_i.html#gaf3ee3e4fc190bb0d226b83d76deb5c95

    Regards,

    Rafael

  • Hi Rafael,

    Thanks for your reply and it really helps. I have one final question. Using the command HCI_EXT_PacketErrorRateCmd() on my slave I can figure out good and bad channels. From master it is possible to send this channel information using  LL_CHANNEL_MAP_IND PDU and this PDU cannot be sent from slave as per specification. Therefore, I would like to know how can I send this channel information from slave to master ?. Is there a specific PDU to send channel information from slave to master or should it involve some user logic ?.

    Thanks for your reply.

    Regards

    Rahul

  • Rahul,

    There is no automated way to negotiate the channels; the application is responsible to perform this between the two nodes.

    I recall seeing a paper that talked about a strategy to improve BLE reliability through channel mapping but I can't find it.

    Regards,

    Rafael

  • Hi Rafael,

    Alright. Thanks for your support. This issue can be closed. 

    Regards

    Rahul Chowdary