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

Switch GZLL stack frequently on/off

Hi all,

I try to reduce the power consumption of my GZLL host (RFDduino/nRF51822). I use the Arduino IDE to program my RFDuino. My Idea was to synchronize the host and the device so that the host is able to sleep between the receives. The host starts the GZLL stack and waits for an incoming message and after a period of time he ends the GZLL stack and sleeps until the next cycle.

I programmed such a synchronisation but I get some weird results. The message is received correctly by the host within the time window. But the message back (ACK) to the device is not received/send correctly. And sometimes the host receives more than one message.

  1. Could this work?
  2. Could this reduce the power consumption if I turn on the GZLL stack every 500ms for 50ms.
  3. What could cause these transmission problems?
  4. Does the host includes an income message buffer?
  • Q1: Yes, you should be able to put the host to sleep en between radio events, but you need to take clock and hence timing drift into account. So you might wake up too early and hence get the incoming packet, but the ACK might be lost due to the host going into sleep too early for the ACK. For debugging I would recommend you to try and verify the on/off cycles compared to the actual radio events. Perhaps you need to prolong the on periods in order to get a stable link.

    Q2: If you are able to fine tune the timing on the on/off you should see some improvement on average power consumption. But again, you need to have listening windows wide enough to send packet and receive ACK. If not, you will re-transmit more than needed and hence actually have worse power consumption than needed.

    Q3: It sounds like timing issues between the host and the device due to the sleep. Check the drift on your timing source and compare actual on-air-activity to you sleep cycles.

    Q4: Yes, there's a FIFO on the host. If the host receives a message, it will give the application an interrupt/event right away as long as it was received correctly.

Related