Carrier-sense multiple access with collision avoidance in DW1000


Does the DW1000 have the option for CSMA for avoiding collision?

Shijo Thomas

No. There is a pseudo-CCA example in the latest DW1000 API and examples package.


Thanks for your support.

I have gone through the pseudo-CCA example. In this example preamble timeout is configured as 3 PACs.and PAC size is configured as 8. So how to convert this into time units. I just want to know what is the time duration of 3 PACs if the PAC size is 8. How this can be converted into time units?

Shijo Thomas

PAC = 8 = 8 preamble symbols = ~8us; 3 PACs = ~ 24 us

Thanks for your support

I’m having trouble locating the pseudo-CCA code within the sample code.
I have download the latest example code from
Can you tell me the name of the C module that it is in?

A similar question was also asked at C Code user app for DWM1001 but I couldn’t find any mention of LBT or “Listen before talk” in the example code.

Any other pointers to carrier sensing and/or collision detection avoidance would also be useful.
My application has many radios that cannot be sync’d, so time/slotted solutions will not work for me.
I only need the ranges between devices, there is little other data being transmitted - ie lots of burst traffic.


You should see DW1000 API example code instead, where example-1e is about CCA.

Thanks for the reply.
I’ve looked through example 1e.
If I paraphrase, can you confirm that my understanding is correct?

We issue an rx command to the chip, then issue a tx command.
The chip will attempt to complete the rx command first.
We poll the chip until we see either an rx timeout or we got at least the preamble of an rx.

If we got an rx timeout then the chip thinks that the rx command has finished and then automatically starts the tx.

But if we got rx preamble, then we abort both the rx and the tx.
The chip transmitted nothing.
We wait a small random time and try again.

If we got unlucky and started listening for rx preamble bits when another device was already past the preamble stage, then we will see an rx timeout and then do our own tx - therefore corrupting the other device’s tx and our own.
This isn’t wonderful but at least it happens less often then plain old ALOHA.

There is a penalty in this scheme in having to always wait for preamble bits but at least I can choose the timeout (3 PAC intervals is suggested in the example).

Does this seem a reasonable paraphrasing?

Is there any way to know if our tx has been sent with a high chance of not being corrupted by a tx from another device?
Ie, does the chip watch its own transmissions?