DWM1001 TDoA tags Programming board


I’m trying to develop small tags (using just a DWM1001 module + a battery) to use with a TDOA-based system. I just need the tags to emit a UWB blink. I have a few DWM1001 modules as well as a couple DWM1001-DEV boards. The goal was to use these to test that the DWM1001 would work as a tag before committing to buying the rest of the system (which is from another manufacturer).

How do I flash the provided TDOA blink example (which I’m assuming is code I could use for a tag) to the DWM1001 in a way that I can just use that module as a tag, rather than using the whole dev board?

Please let me know if I have any misconceptions about how this works!


The DWM1001-DEV has a J-Link built-in. You just need to use Segger Embedded Studio or J-Flash-Lite to program the TDoA Blink hex file image. That’s it!

Thanks for the reply! Once it has been flashed, would I be able to remove the DWM1001 module (without the board) and use it on its own?

How could I get code onto a DWM1001 (without the dev board) without having to unsolder and resolder on the dev board?


Of course, assuming you have the appropriate carrier board for the module.

Regarding your second query,

option 1: If using PANS, it supports OTA updates
option 2: Assuming custom firmware, make your own board,
option 3: we are making a programming board that allows easy insertion of the DWM1001C into a socket making it easier to program individual modules. Available Q4…


1 Like

To clarify, what do you mean by an appropriate carrier board? I was under the impression one could just attach a battery to the DWM1001 and it would run.

Very exciting! Looking forward to the new release (and will try to cobble something together in the meantime).

Carrier board - at a minimum, you will need a DC-DC and battery

1 Like

Thank you @Kenneth_Dwyer_DW for your help! It’s made it a lot easier starting up this project.

A couple follow-up questions on the TDOA tags:

  1. Is there any sample code to set up a TDOA anchor to test if my tags properly work? (As I understand it, multiple anchors are necessary to locate position; however, I just want to make sure the signals are being properly received and that there are distinct IDs.)
  2. How does instancereaddeviceid() work? (From the sample code on the DWM1001 page entitled “DWM1001 TDoA Tag Software.”)


1: For Anchors you will need hardware that supports TCXO’s
2: AFAIK, this simply reads the DW1000 device ID register over the SPI.

Our TDoA system uses DWM1001 as Tags but not for Anchors, we have special hardware for the Anchors that has Ethernet backhaul, PoE, TCXO and then a PC running a Location Engine solver. The timestamps from each anchor, resulting from tag blinks, are sent via Ethernet back to the LE. In addition the Anchors need to be sync’ed so we use UWB clock calibration packets that Tx every 150ms.


1 Like

Would it be useful to use our DWTAG as your tag? Already has battery, enclosure, charging means.


The DWTAG design predates the DWM1001 but is remarkably similar using the same exact processor, DW1000, etc. The differences are:

  • DWTAG includes battery, charger (micro USB connector), enclosure.

  • DWTAG uses a 9 axis accel/gyro/mag sensor (MPU-9250) instead of 3 axis accel (LIS2DH12), this provides orientation.

  • nRF52832 pin outs vary between DWTAG and DWM1001, but easily remapped using nRF GPIO/PPI system.

  • DWTAG has an RGB LED which can make any color.

  • DWTAG 1.1 and earlier lacks 32 KHz crystal (1.2 and later has 32 KHz crystal).

It seems like it would be fairly simple to port any code that runs on a DWM1001 to a DWTAG. We have ported our CUWB system to the DWM1001 and that was not difficult so the reverse should be true. Fundamentally, it is an nRF with a DW1000. You use a Tag-Connect cable with a J-Link to program the nRF processor directly, or if your code has over the air updating, then that will work, too, once you get your first binary image loaded.

If there is sufficient interest, we can see about documenting the DWTAG programmer’s model so that someone could port their code to it from a DWM1001.

If a DWTAG is not appropriate, we could design a specifically customized tag for your needs based on the DWM1001 (carrier board, battery, and enclosure), or a full custom design. We do a lot of custom tag designs (about 1 per month lately) as that is the part of the system that is most application specific and/or client specific.

Mike Ciholas, President, Ciholas, Inc
3700 Bell Road, Newburgh, IN 47630 USA
+1 812 962 9408

1 Like

Hi @Kenneth_Dwyer_DW, I had a follow-up question about setting up the carrier board. I checked the battery life estimator (pinned post), which suggests that you use a 3.7V battery with a 3.4V DC-DC converter; I had been thinking of just using a 3V battery and wiring it straight to supply. Would this work / would this have significant performance issues?

@mciholas, thanks for the information! I’m actually trying to customize a tag myself and am in the process of learning how to do it :slight_smile:

The DWM1001 power supply is 2.8V minimum. Going to 3V will leave you with very little margin.
For DC-DC we recommended a Torex XC9258 or TI TPS62743

Hi @Kenneth_Dwyer_DW ! Has this programming board been manufactured / is there a projected time that this will be released?


Production units have been approved. We hope we can have some on Disti shelfs before the end of the year.

1 Like

Great, thank you very much!


I have a bit of bad news to share on the DWB1001-4. The production run showed up quality issues such that we cannot sell through distribution. It appears that the mechanical mechanism used is not mass producible, so the factory has stopped production.

This is a disappointment for us and I know some of you have been waiting a while for these boards. We are looking into an alternative that and will keep you posted on progress.

Thanks for your understanding,

1 Like

We keep the fingers crossed that the impact is low. All the best & cheers from CH