Hi, everyone. I am interested in programming the MDEK1001 tags that I have purchased, to perform my own custom anchorless Mesh-ranging method while attached on different RPi’s. Since my background is more theoretical and less of practical, I would like to ask for some hints on that. I need basically to have access to low-level features so that I can perform the ranging on my own along with access to CIR amplitude, Harmonic amplitudes, FP/RX, etc. I need to setup my own communication protocol (and its orchestration) of the UWB modules and the final cooperative localization shall be performed in a distributed way from the RPi swarm.
For that, I am trying to identify the correct documentation and I am unfortunately a bit lost because I see various things with possible overlaps (e.g. DW100 USER MANUAL / DWM1001 Firmware User Guide / DWM1001 FIRMWARE APPLICATION PROGRAMMING INTERFACE (API) GUIDE, etc.). Which guide corresponds to my case?
If you want to write your own ranging protocol then you have two options:
You use the decawave firmware API, this gives you a set of drivers and function calls using those drivers to configure the radio and send and receive data. For basic functions you should be able to use these functions e.g. to transmit a message call the transmit function passing it the message to send. The api firmware pack includes examples of how to perform various operations using these function calls.
Depending on what exactly you are doing you may need to do something that doesn’t have a nice abstracted API call in the drivers. In that situation you can also use the register read/write commands to directly read and write registers in the DW1000 chip to achieve the required functionality. The DW1000 user manual details all of these registers but is not exactly light reading.
The other option is you ignore the API completely and use the DW1000 manual to create your own drivers. e.g. you create your own read/write register functions. Then you create a transmit message function that performs the appropriate reads and writes to send a message etc… Everything you need to do this is in the user manual but this is somewhat re-inventing the wheel. This has benefits over the decawave drivers if performance is absolutely critical or if your hardware is significantly different from the ones the drivers were written for but in your case it probably isn’t worth the effort.
The MDEK1001 includes DWM1001 development boards.
The DWM1001 module is based on Decawave’s DW1000 Ultra Wideband (UWB) transceiver IC.
It integrates UWB and Bluetooth antenna, all RF circuitry, Nordic Semiconductor nRF52832 and motion sensor.
Documentation should be in the link below.
If you want to flash DWM1001, you’ll need to flash the nRF52832.
This can be done with J-Flah Lite which you can download from here:
Indeed, I want to reinvent as little as possible. To be more specific, I want to end up with a decentralized system of 40 UWB nodes doing concurrently Alt-DS-TWR towards every other node. The ranging results need to be offloaded to the RPi’s because the localization engine will be executed there. Although I am ok with having each node performing a ranging only once per second, I guess I will still have to implement some highly custom TDMA functionality for the DWM1001 modules. Do you think that the DWM1001 Firmware API Guide would suffice for this task? Or does the DW1000 manual sound inevitable?
In theory the only calls you will need outside of initial setup are transmit now, transmit at a fixed time and receive, these care all part of the API. Everything else will be in your code that implements the radio protocol. However being at least partly familiar with the user manual will help you understand how the radio works, what it’s limitations are, and what the API is doing. Knowing this will help you create a better system.
I would also recommend looking through the application notes, they give a lot of good details on how to create and calibrate real world systems and how to improve their accuracy.