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

Packet loss in mesh network

I use the nRF OpenMesh from the GitHub. (https://github.com/NordicSemiconductor/nRF51-ble-bcast-mesh)

My mesh network just has two mesh node, node A and B. I made A node as a broadcaster, B node as a receiver. "MESH_INTERVAL_MIN_MS" setting to 20. And I send a mesh packet every 200ms from A node. But in this low broadcast speed, it still has packet loss issue. About 10~20s loss one mesh packet. What is the problem?

Is it possible that the scan interval and scan window size doesn't match the advertising interval? If so. How to modify the scan interval and scan window size?

And what is the default value on scan interval and scan window size?

  • Hi Cooper,

    What do you mean by "loss one mesh packet" ? Does that mean the new value of the handle you update on one node never get to the other node ? Or you mean there was a single advertising packet missing and the value was still updated after retransmission ?

    From my view, it's pretty normal that a broadcast packet can get corrupted or missing because of RF interference.

    How do you define a node as broadcaster and one node as receiver ? Make sure you disable all handles on the receiver (rbc_mesh_value_disable())

  • Hi Hung The "loss one mesh packet" is mean, the advertising packet sends from A node, but B node never receives. But the BLE sniffer can catch this advertising packet. Because I use only two nodes, A node gets the sensor data and send this data to B node by advertising. So, I define A node as broadcaster and B node as receiver.

  • How do you send the packet ? Did you use "rbc_mesh_value_set()" ? Do you see any retransmission ? As I said, it's normal to have a RF packet missing as there could be interference, or if node B was not listening at the time.

  • I send packet like you said, use "rbc_mesh_value_set()". And setting "MESH_INTERVAL_MIN_MS" to 20. And I send a packet every 200ms. I use the setting above, and I use sniffer can see there has retransmission twice after each packet sent.

    If node B was not listening at right time. Is it possible to change the scan setting? Like scan interval and scan window size. Or we can't modify it?

  • The Openmesh doesn't use Softdevice, so there is no scan interval or scan window. The device stay in scanning mode all the time. But of course there could be chance that it might catch other packet from other peer, or a corrupted packet or interference that it can't detect a packet.

    Again, it's RF. It's impossible to guarantee on 100% packet delivery. That's why we need the trickle algorithm to re-transmit broadcast data in a power efficient way.

    Why it's important for you that all the packets should be received ? and re-transmission is not OK ?

Related