Status delay after sending multicast frame


I’m using an S2C module (firmware 4060) in API mode as a coordinator, to control HA-profile devices. I use the explicit addressing command frame (0x11) to send frames and wait for the transmit status frame (0x8b).

When sending unicast frames, this is almost immediate – the status frame arrives with no perceptible delay. For some reason when sending multicast frames, even though the devices respond immediately, there’s a ~900ms delay before the status frame.

In the TX frame, I’m setting the 64-bit addr to 0xffffffffffffffff, the 16-bit addr to the group ID (as configured using the HA group clusters), setting the multicast option (options |= 0x08) and disabling retries (options |= 0x01).

All the devices are receiving the message immediately (for example, the group of light bulbs turn on with no perceptible delay), so I’m not sure what the xbee is waiting for before sending the status frame. This causes problems because other frames queue up behind them if I send a series of multicast messages, and if enough are in flight then additional frames get dropped.

Other relevant info about the network: there’s a second S2C module acting as a router, approximately 35 always-on non-sleeping devices (they show up as routers in XCTU’s scan, but I don’t know if they actually are acting as routers), and 12 sleeping end devices. I’m only sending multicast frames to the non-sleeping devices. I have SP=0x20 (default) and SN=0x2000 (deliberately set high because the sleeping devices have 5 minute sleep intervals). I’m talking to the XBee over SPI, not UART.

Here’s an example showing ~millisecond timing. It even receives all the attribute reporting frames from the end devices almost immediately.

0.050 (send 0x11) Send multicast frame to group 3
0.081 (recv 0x91) Report_attr from 2
0.121 (recv 0x91) Report_attr from 4
0.140 (recv 0x91) Report_attr from 6
0.147 (recv 0x91) Report_attr from 3
0.173 (recv 0x91) Report_attr from 5
0.178 (recv 0x91) Report_attr from 1
0.978 (recv 0x8b) status frame from xbee

here’s an equivalent for sending a unicast message to device 5

0.295 (send 0x11) Send unicast frame to 5
0.363 (recv 0x91) Report_attr from 5
0.365 (recv 0x8b) Status frame from xbee

Any hints on how to debug this would be much appreciated!