I am attempting to validate compatibility between DWM1001 and DWM3000 evaluation boards as part of our plan to migrate from DW1000 to DW3000 in an existing product we have built. My test setup is fairly straightforward:
DWM3000 + nRF52832 board running ds_twr_initiator example code using channel 5, PRF64, 64 length preamble, PAC length 8, 850K data rate, non-standard SFD, normal PHY header; note that these boards are shipped without any TX power calibration in the OTP so are transmitting above regulatory limits but I don’t believe this should be a factor for lab testing.
DWM1001 running ex_05b_main example code using channel 5, PRF64, 64 length preamble, PAC length 8, 850K data rate, non-standard SFD, normal PHY header; these boards are shipped with OTP calibration settings so should be running at -41.3 dBm/MHz.
The crystal has been manually trimmed on the DWM1001 to be within 1 KHz of the DWM3000 XTAL using a CW tone test. However, the DWM1001 never successfully receives any frames transmitted by DWM3000. I see the status register always indicates successful preamble detection and SFD detection. But in 90% of cases the PHY header error bit is set and in the remaining 10% of cases, the RS sync error bit is set.
I’ve verified that the two way ranging 850K configuration should work in principle, in that I can successfully range between 2 x DMW3000 boards (running dw_twr_initiator and dw_twr_responder) and also between 2 x DMW1001 boards (ex_5a_main and ex_5b_main). So this does point to some sort of configuration/compatibility issue.
I am aware that DM3000 does not support 110K, but we are using 850K for this test so this should not be a factor. I’ve also tried running DWM1001 as initiator and DWM3000 as responder but see exactly the same decode problems in reverse.
Hello, both ends use TX and RX preamble code of 9 which I understand to be correct for PRF64 and channel 5.
Also note that the status register indicates both preamble and SFD as detected which ought to rule out this as being an issue but I suppose shorter preamble lengths could correlate with noise.
The issue appears to be related to coded data symbols i.e., PHY header or RS coded payload.
For what its worth I did try longer preamble lengths as well but saw the same result.
I will go back and look at preamble 1024 but it is perplexing that the 64 length preamble works fine between 2xDWM1001 and 2xDMW3000 but not when we cross platforms.
I did wonder if somehow the DW3000 and DW1000 are not using the same SFD length. I checked the respective user manuals on this topic a bit more closely.
For DW3000 on pg 110:
In my configuration, I have been setting this to “1 to use non-standard 8 symbol”.
For DW1000 on pg 27:
In my configuration, I have been setting this to “1 to use non-standard SFD”. The user manual text states that the SFD length is fixed for a given data rate i.e., it can not be changed for 850K and is always 8 symbols long on DW1000. This means that the recommended SFD length of 16, as specified in the table you supplied for DW3000 RX Sensitivity, is not actually obtainable on DW1000.
Therefore what is the recommended Qorvo configuration for running 850K between DW3000 and DW1000? It seems that the only option is to use 8 length SFD.
Thanks. This register is set from a LUT (based on DR and SFD type) by the DW1000 driver to configure an SFD threshold. I think this shouldn’t be a factor unless you are writing your own driver.
Below is a table of results I have obtained by varying DR and SFD options between DWM1001 and DWM3000. In all cases, I am using channel 5, PRF64, PLEN64 and preamble code 9 (none of these settings are related to the issue I was seeing).
I’ve highlighted the columns as green for outcomes I would expect and yellow for outcomes that do not align with my expectations.
It seems that the respective implementations of DWM1001 and DWM3000 SFD=1 are different when DR=850K. When DR=6M8 then I see no such problem using SFD=0 or SFD=1. I can only get 850K to work by using SFD(DWM1001,DWM3000)=0,0 (expected) or SFD(DWM1001,DWM3000)=1,2 (unexpected). No other combinations work for 850K.
Note that SFD=2 maps to the 16 symbol DW SFD pattern on DW3000. The implication of this is that when DR=850K and SFD=1 on DW1000 then DW1000 is actually using an SFD length of 16 and not 8 for the non-standard SFD. This contradicts what the DW1000 datasheet says (see section 4.1.3 of the DW1000 datasheet, which I quoted in an earlier post).
Can Qorvo please confirm that this is an error in the DW1000 datasheet? I think if this is the case then the results all start to make sense.
Just to put the final nail in the coffin on this one, below are the GPIO5 output timings on DW1000 when using SFD=1 and SFD=0, we can clearly see that the frame length is ~8us longer in the case of SFD=1.