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

High Latency Mesh nRF52840

Hi community !
I'm testing Mesh characteristics by using debugger. Currently, i send messages through nodes and waiting for acknowledge, and I put a timer to get latency. And I think, there is a problem cause in usual case i got 50 ms or less and sometimes (when signal has to go through a wall) it raise at 6000 ms (or multiple of 6000, if there is multiple nodes in the path). Is that a known issue ?

Sincerely
PG

Parents
  • Hi,

    When the radio communication is unreliable, such as for instance when communicating through solid walls, you may experience that some packets get lost and need to be resent. This can happen both on the transport layer (with segments not getting ACKed, leading to timeout on the sender side and retransmission) and in the access layer (reliable message was not ACKed on the access level and the message as a whole needs to be resent.) What you see as multiples of 6 seconds may be that the message is attempted to be sent, the application does not get any acknowledgement within a timeout, then resends. However, 6 seconds does sound a bit high. Maybe there is a timeout on the application level? That is, that the application tries to send a message, but it never gets acked and the message transfer times out, then a new message is attempted sent from the application?

    For the access layer, in access_reliable.c there are some calculations for setting the interval for transmitting a message. See the function calculate_interval() at around line 254 in that file. The main contribution to longer interval would be TTL, as (TTL * 20 ms) makes up part of the interval. Message length also increases the interval. If the parameters used does not make that interval add up to 6000 ms then I would say it is likely the delay happens because the message as a whole does not get through and it has to be resent from the application.

    Regards,
    Terje

Reply
  • Hi,

    When the radio communication is unreliable, such as for instance when communicating through solid walls, you may experience that some packets get lost and need to be resent. This can happen both on the transport layer (with segments not getting ACKed, leading to timeout on the sender side and retransmission) and in the access layer (reliable message was not ACKed on the access level and the message as a whole needs to be resent.) What you see as multiples of 6 seconds may be that the message is attempted to be sent, the application does not get any acknowledgement within a timeout, then resends. However, 6 seconds does sound a bit high. Maybe there is a timeout on the application level? That is, that the application tries to send a message, but it never gets acked and the message transfer times out, then a new message is attempted sent from the application?

    For the access layer, in access_reliable.c there are some calculations for setting the interval for transmitting a message. See the function calculate_interval() at around line 254 in that file. The main contribution to longer interval would be TTL, as (TTL * 20 ms) makes up part of the interval. Message length also increases the interval. If the parameters used does not make that interval add up to 6000 ms then I would say it is likely the delay happens because the message as a whole does not get through and it has to be resent from the application.

    Regards,
    Terje

Children
No Data
Related