Emmanuel Katto Dubai : Achieving Delayed Send and Receive in DW3000 with Only One SIFS Between GTS

Greetings all,

I’m Emmanuel Katto from Dubai, United Arab Emirates (UAE), working on implementing a beacon-enabled IEEE 802.15.4 stack and am trying to figure out how to handle delayed send and receive commands, specifically when transitioning between Guaranteed Time Slots (GTS) in the DW3000.

In beacon-enabled mode, I understand that strict timing is required due to the beacon frame, and delayed commands are crucial to meet these timing requirements. The minimal time between a receive and transmit process (or vice versa) is the Short Interframe Spacing (SIFS), specified as 12 µs.

Here’s the scenario: I have two GTS slots, with only one SIFS (12 µs) between them to transition. If the first GTS is for transmission (Tx), I can use the Tx-and-wait-for-response feature, but if the first GTS is for reception (Rx), the transmission for the following GTS must occur within the 12 µs window. This timing challenge has led me to explore delayed sends.

I wrote the following code to test the feasibility:

volatile int32_t success = -2;
volatile uint32_t sys_time;

__disable_irq();
write_to_tx_buffer();
dwt_write_reg(0x001C, 0); // clear SYS_TIME latch

sys_time = dwt_readsystimestamphi32();
dwt_setdelayedtrxtime(sys_time + offset);
success = dwt_starttx(DWT_START_TX_DELAYED);
__enable_irq();


In testing, I found the smallest successful offset was around 345 µs, which is much longer than the SIFS duration. I also noted that the DW3000 Errata suggests a minimum of 60 µs is needed to issue a delayed send, which is already more than the SIFS time.

So, my question is: how can I achieve transmission in a GTS that follows an Rx GTS, where only one SIFS duration (12 µs) is available for state transition? Is this scenario feasible, or is it fundamentally limited by the DW3000's timing constraints?

I’m relatively new to this, so any suggestions, corrections, or insights would be greatly appreciated!
Regards
**Emmanuel Katto**

Hi Emmanuel,

The way in theory to handle 12us is to check if there is any rx happening - is by setting the Preamble detection timeout.

So if you do not get the timeout, then probably you are receiving something (and need to continue rx).

However, the above is hard to do in UWB in principle.

Uwb is a pulse based radio which is using correlation patterns. You cannot use rssi info to detect in 12us because the uwb communication is on the noise level.

For dw3000 the practical uwb frames length are around 140-200us.
Out of which the SYNC preamble is practically 64us. So if you would set the preamble detection timeout say to 12us with PAC size of 4, then you have only 3 PAC to be accumulated in searching of the preamble (instead of 16 for this plen size).

What does it mean on the practice - your distance in between devices would be compromised. Your system may work on 1m, 2m but may stop working on 10m.

In any case experimenting would help you more.