How to sync dwm1000 timer?


I`m working on the implementation of TDoA algorithm and faced with syncronization problems. I am using DWM1000 modules.
There is no possibility to directly reset timer from external signal using SYNC pin according to the datasheet. Am I correct?
By the way, why?

So I`m trying to use external wired sync signal to read dw1000 time at the moment of syncronization and finding difference between this value and timestamp of the received blink from the tag. All anchors receive a signal at the same time.
But I have a huge variance of the results (the calculated time of blink receiving since receiving the sync signal).
What I am doing wrong?

I have tried to use softreset function, but it doesn`t work.
How to reset the DWM1000 timer correctly?

Best regards,

As per DWM1000 Datasheet the DW1000 SYNC pin functionality cannot be used with the module. You could potentially use “Wireless Sync Algorithm”. Can be obtained from Decawave under a license.

Thank you, for you answer.
Is it possible to fast reset the dw1000 timer with software function?

This isn’t technically correct.
The sync pin is available, it’s GPIO7, pin 4 of the module. If you configure the registers correctly you will get the sync functionality exactly as you would with a DW1000 chip.

Hardware sync is normally only of use if you can run multiple receivers from the same 38.4 MHz clock. The DWM1000 has an internal clock and doesn’t work with an external clock source. Why reset your clocks at the same time when they are running at different rates?

The datasheet for the module lists hardware sync as unavailable for this reason, they didn’t want to get into supporting people trying to do hardware syncs and finding things didn’t work because they hadn’t allowed for the clocks running at different speeds. But the pin and functionality are there if you can live with that limitation.

1 Like

Thank you.
Maybe I don’t quite understand exactly what this SYNC input is doing.
According DW1000 User manual:

In paragraph “c” there is no information about the need to supply external 38.4 MHz clock on the EXTCLK.
It also says that it is synchronise receive time stamping.
I am interested in synchronizing timestamps after receiving an external SYNC. But I`m not quite understand, what is the “synchronise receive time stamping” meaning in that case? Zeroing the timestamp?
Is it possible to reset timestamp in DWM1000 using external input?

Rx timestamp is the clock value when the packet was received. “synchronise receive time stamping” means that all of your receivers set the clock to zero at the same time so that the differences in the rx timestamp accurately reflect the differences in the arrival time.

So yes it is possible to reset the timestamp using an external input.

But be very careful.

Firstly your reset will not be synchronous to the 38.4 MHz clock which gives you a 26 ns ambiguity as to when the reset actually happens, this will be different on every module.
And then after being reset the timestamp will count up based on the 38.4 MHz clock. Since each module has a different clock each one will count at a slightly different rate. Assuming the crystal trimming has been done well and each clock is +/- 0.5 ppm then 1 second after the reset your worst case timestamp difference between two modules is 1026 ns.

This is why use of the sync pin on a module isn’t encouraged. It is there and in certain special cases it may be of use. But if you want to use it to reset the timebase for a TDoA system it’s useless.

Thank you, now I see.
I just tried a rough sync via UWB and it works about 1000 times more accurately than my previous attempt. So I’ll switch my attention to wireless synchronization, and come back to the wired solution later. I have to change the PCB design.

Hi Karim, I’m interested in your results. Will send you a PM, thanks!


I am working on the same problem. Can you share your results and resources regarding synchronization. It would be very helpful if you did.

Thank you

Hi Karim,

I am also working on some wireless synchronization algorithm. can you tell me, how to read the DW1000 time. For me, we can read the timestamp of either transmission or reception of message signals.


Hi, sorry for late reply.
I made a simple solution where one of the anchors works like sync device. It sends sync messages.
Other anchors receiving blinks from tags and sync messages from the master anchor.
Then you need to calculate time differance from sync and TDoA blink, so you are get rough time of arrival of blink calculated from sync. It works quite precise in one sync segment.
One problem that DWM1000 clocks has different biases. And the clock errors of each anchor increase with different speeds and directions, as time passes from the moment of synchronization. You have either increase sync frequency, either implement algorithm that calculates biases with every sync and corrects measured time of arrival.
I prefer the second.
Another problem in that algotithm, if you have many anchors, you cant sync them all from one master. Yoo need to define several sync zones and describe procedure how to sync these zones. Its not easy.
There is another way, it`s possible to make intersectioning sync zones without sync with each other. You just have to select time of blink arrival form anchors corresponding one sync zone. This solution is simpler than first one. But it takes more of the channel bandwidth.
Hope it will be useful.

1 Like

Hi Karim, please describe the wireless synchronization procedure in more detail. What information does the main anchor transmit? if the main anchor transmits its time (5 bytes of the counter), is it possible to set this time in dependent anchors?