We are currently working on an application where we use Xbee 868 in Digimesh (API mode). We have couple identical devices, they all work as routers. At the beginning, then the MCU driving the Xbee starts we set the following parameters:
ID Network ID 0xFF
SM Sleep Mode Sleep mode 1
AP API Enable API mode without escapes (1)
BD Baud Rate 9600 (3)
NB Parity No Parity (0)
D6 D6 ( DIO6/RTS) RTS flow control (1)
D7 D7 (DIO7/CTS) CTS flow control (1)
API mode is turned ON in volatile memory.
Xbee sleep coordination is not used here. We put the module to sleep using the sleep pin. The flow is as fiollows (XM is the Xbee "master" and XS is the Xbee "slave"):
XM used ND in order to find all XS in the neighborhood. After he finds them all, he will use 0x10 (Transmit Request) addressed with the 64 bit MAC of each XS in order to send information to each one of them. At the end he uses 0x10 but in broadcast mode in order to send a manual sleep command. After the modules receive them, their MCU puts them to sleep using the pin of a certain amount of time.
This procedure in general works, but not always. The serious problem we are having is that the XS devices can "see" broadcast messages, but it cannot see the direct messages sent using 0x10. For example:
XM does ND. It finds the remote XS. He tries to send 0x10 message to him directly using his MAC address. He sends it, receives STATUS OK, but on the XS side there is no Receive Packet (0x90). XM then sends 0x10 as broadcast and the remote XS can see that.
In summary, why cant the remote Xbee see the 0x10 addressed to him but can see broadcasts? This situation does not always happen and that is why it is so painful and hard to debug for us. Is there a possibility that the digimesh network is getting corrupted somehow? Should the XM be configured as coordinator, even though we are not using sleep mode with Cyclic Sleep?
I would appreciate all help. This case is of critical matter for us.