This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52840 - SDK16 - s140 - Data Rate vs Range

Hi everyone,

I am using a third party nRF52840 module and I have developed my own bluetooth application. I have implemented one characteristic for notifying data from the IMU. I have to notify data with a frequency of 100Hz (close to the 7.5s limit). For testing purposes, I am using the nRF52840 Donggle as central.

I've noticed that the range is proportional to the transmission frequency. For example, @100Hz the range is much less (and there is a disconnection in just a few meters) compare to e.g 50Hz. This is the case? Is it what I have to expect?

Thanks in advance

Nick

  • Hi Nick,

    In general, you could say that you would get longer range with lower data rate, if for instance using BLE long range (Coded PHY). In that case you would use more energy per data bit in order to increase range, using several techniques. That is not the case here, though.

    In your description you do not mention anything about PHY, so I assume you always use the same PHY. In that case, the only relevant factor is that the less data you send, the more time there is to send retransmissions. So essentially you can loose more packets before noticing it on the application layer, but that is all.

    Einar

  • Hi Einar and thank you for your answer!!

    I am not using coded PHY. My problem is that the higher the transmission frequency the less the range I achieve..  For example when notifying with a frequency of 100Hz (min and max connection interval are set to 10ms) I achieve around 4m range (before disconnection). When I downgrade the data rate, lets say to 10Hz  (min and max connection interval are set to 10ms) then the range is much much better (around 10m before disconnection). So, how is related the data rate with the range?

    P.S: When I say "notifying with a frequency of 100Hz" I mean calling sd_ble_gatts_hvx every 10ms Slight smile

  • Hi,

    Nikosant03 said:
    So, how is related the data rate with the range?

    Physically, the range is the same regardless of notification frequency. The only difference is that if you notify with a higher frequency using the same connection parameters, then there will be less time for retransmissions (fewer attempts to get the packet through) before it causes problems. Under challenging RF conditions this could result make it seem like the range is lower.

    You have both a connection interval of 10 ms and send notifications every 10 ms. In general I would expect you would get a corresponding improvement if reduce the connection interval to the half, but you already use a very short interval. If that had been possible, it would have given the same effect as reducing notification frequency. The key here is that with your configuration, you do not have any time for retransmissions. As your connection interval is the same as your notification frequency, any retransmission will cause a delay of the subsequent notifications, etc (retransmissions always happen on the next connection event). So your set of parameter cannot really work properly in a real world as it depends on never getting packet loss.

  • Thank you for your responce Einar,

    then there will be less time for retransmissions

    You mean to send more than one packet in the same connection interval? or in case that the packet is getting loss there is no time for retransmission? I want to send just one packet per conneciton interval.

    Given that I need to notify every 10ms what should be the connection parameters?

  • Hi,

    Nikosant03 said:
    You mean to send more than one packet in the same connection interval?

    No, not in this case. Even if you have time to send more packets per connection event, retransmissions always occur on the next connection event. 

    Nikosant03 said:
    or in case that the packet is getting loss there is no time for retransmission? I want to send just one packet per conneciton interval.

    Yes, that is the problem with your setup. As retransmissions occur on the next connection event, everything gets shifted. You must give some room for retransmissions.

    Nikosant03 said:
    Given that I need to notify every 10ms what should be the connection parameters?

    For this to work satisfactory in the real world you have to either use a shorter connection interval (not that much to go on, as 7.5 ms is the lowest possible), or buffer up notifications and send multiple per connection event after a retransmission to get back on track. This is up to you and which works best in your case, but you must design your system to handle packet loss as that will always happen from time to time, sometimes a lot, some times almost nothing (depending on factors such as distance, interference etc.).

Related