DWM1000 custom data transfer with dwt_writetxdata dwt_starttx and dwt_readrxdata

Hello everyone,

It is possible to send custom data (delivered by a host device like STM32 or Raspberry) between two DWM1000 modules?

Reading DW1000 Device Driver API Guide this should be possible on DWM1000 module with dwt_writetxdata dwt_starttx and dwt_readrxdata etc. Have anybody tried to achieve such functionality with these functions?

I have two goals:

  1. create communication channel between DWM1000 modules via UWB link (data exchange, small packets)
  2. create my own, properly timestamped messages to implement custom ranging functionality

Any ideas? Experiences? I know that DWM1001 can exchange IoT data through gateway module, but that solution does not satisfy my needs. I want a driect connetcion.

Thanks in advance!

Hey there!
Well you can send data using the UWB communications. Then same way you use the messages to use on the ranging process you can send some data. Define your protocol to recognise the message from your module when the messages are “unpacked”. So in this case, you have to make your own firmware, if thats your case, you already know how the ranging protocol works.
1 - Now, knowing this, the amount of data that you want to send probably it is not much, but could be what you need.
2 - On sending messages, i dont use thoose messages for calculation of ranges. Just for the communication(my case).
Hope I could help.

Hello Rui,

Thanks for your clarification. Im glad that DWM1001 IoT is not the only way to transfer data.

Can I ask you for some guidance on how to achive this? Any tips or necessary steps to perform UWB communication. I just don’t want to deal with some problems for a week just to realize that it was in front of my face but I just didn’t see it :slight_smile:

For now, I don’t have any experience in writing DWM1000 firmware and I’m not sure what to include in my framework:(

Am I thinking right with using dwt_writetxdata dwt_starttx and dwt_readrxdata in this process? Are any other necessary functions to use (such as configuration and other stuff)?

Thank you very much!

Hey @PePe93,
So if saw the examples how to make the ranging protocol, the messages have to be filled with some different data and this messages are the ones that when a device recives and unpacked them you use the “dwt_readdata”(dont remenber well the api function to read messages) you can read the message. Some things that you have to take account like the message size and delays to send the messages. So in a simpler way, you can fill an array to send and respect the way that the array should be filled (User Manual explains how the messages formats should be). So changing the message size you can put more data there to send. But remeber that this system is not for the communication
In case that you want to use the atual firmware PANS_2.0 that comes with the devices i dont know if you have any api function to send data.
Sorry if i didnt help much.

I quite know how to build a protocol formally (more or less :)), ya know. I rather have problem with how to implement and properly handle transmission process - by the means of functions and steps required to phisically begin transmission and receive data on the other side.

Which peripherals should be neccessairly included, configured and initiaded? Which registers should I configure? Basically, how does this process look in terms of hardware?

Other problems like "I know how to parse received data (because I know my protocol) but how would I even know if the data has been properly sent or sent at all " :smiley:

If you have any experience or know some examples or guides, I would be very grateful if you would share :slight_smile:

Sorry, I’m getting a little confused, maybe. I don’t know if that is clear to you, but just as you do with ranging, you can send messages. (dwt_start and all other API needs).

I’m only saying this because I used the mdek1000 kit and programmed the devices with my own firmware. I didn’t have to change the registers directly and I only use the API to format and send / receive data.

If you want to know if the data sent was received, you can do a acknowledging message like A -> B -> A.
A being the device to send data and B being the receiving device, for example.

Sorry if didnt help.

Yeah, you did exactly what I’m going to do :D.

I currently have MDEK1000 kit. Flashing new firmware to STM32 microcontroller on DWM1001 dev board is really convenient, because there is no need to port provided DWM1001 libraries to another uC. But unfortunatelly Im not the only one who uses this MDEK1000 kit so Im not allowed to flash other firmware to it :(. Instead, I have a bunch of DWM1000’s, which I need to pair with another STM32 microcontroller host (via SPI). It’s a bit tricky but I managed to succesfully achive communication between SMT32 and DWM1000, which is only the first step :D.

As I can uderstand, you did have made two or more DWM1000’s speak to each other via UWB link, am I right? (actually DWM1001 but chip remains the same). And you were programming STM32 uC which was on DWM1001 dev board, right?

Yes, in my case i make my owm firmware for the uC STM32 working with the dwm1001 (mdek1001 devices from the kit) and did a broadcast message, something like that, so all anchors receive data using the same principle as the ranging process. On the anchors firmware should have the way to digest the message in the way you define it.
Well your case is kind tricky yes, btw i dont know the way you are connecting the devices but that connections could be a source of problem (noise, …).