What's possibly wrong with this diagnostic information?

Hi all, our tag using DW3210 is not working with our firmware, but our firmware works perfectly fine on the EVB.

When we pair our device (as TX) with an EVB device (as RX), we get four different rxData->status on the RX device in the rx error callback:

        10000000000001001100000111 (33559303) missing 10,11,13,14; 12 set
        10000000010000111100000111 (33623815) missing 13,14; 16 set
     110000000000000000100000111 (100663559)missing 9,10,11,13,14; 26 set
100010000000000000111100000111 (570429191) missing 13,14; 29 set
100010000000000000101100000111  (570428167) missing 10,13,14; 29 set

The relevant bits are:
bit 9: RXSFDD Receiver SFD Detected. This event status bit is set to indicate that the receiver has detected the SFD sequence and is moving on to decode the PHR.
bit 10: CIADONE This event status bit is set to indicate the completion by the CIA algorithm of the leading edge detection and its other adjustments of the receive timestamp information.
bit 11: RXPHD Receiver PHY Header Detect. This event status bit is set to indicate that the receiver has completed the decoding of the PHR
bit 12: RXPHE Receiver PHY Header Error.
bit 13: RXFR Receiver Data Frame Ready. This event status bit is set to indicate that the completion of the reception process
bit 14: RXFCG Receiver FCS Good. This event status bit reflects the result of the frame CRC checking. It is set (or not) at the end of frame reception coincidentally with the setting of the RXFR event status flag.
bit 16:RXFSL Receiver Reed Solomon Frame Sync Loss. The RXFSL event status bit is set to indicate that the receiver has found a non-correctable error during the Reed Solomon decoding of the data portion of the packet.
bit 26: RXSTO Receive SFD timeout.This event status bit is set when the SFD detection timeout occurs. The SFD detection timeout starts running as soon as preamble is detected
bit 29: ARFE. Automatic Frame Filtering rejection.

from dwt_readdiagnostics, we get following when the status is 33623815 or 570429191 (with other statuses, it seems that dwt_readdiagnostics does not even update anything)

after 33623815 status, the diagnostics looks like

{ipatovRxTime = “У\355”, <incomplete sequence \321>, ipatovRxStatus = 12 ‘\f’, ipatovPOA = 0, stsRxTime = “\000\000\000\000”, stsRxStatus = 0,
stsPOA = 0, sts2RxTime = “\000\000\000\000”, sts2RxStatus = 0, sts2POA = 0, tdoa = “\000\000\000\000\000”, pdoa = 0, xtalOffset = 482,
ciaDiag1 = 3950394, ipatovPeak = 488638143, ipatovPower = 0, ipatovF1 = 0, ipatovF2 = 0, ipatovF3 = 0, ipatovFpIndex = 64960,
ipatovAccumCount = 111, stsPeak = 0, stsPower = 0, stsF1 = 0, stsF2 = 0, stsF3 = 0, stsFpIndex = 0, stsAccumCount = 0, sts2Peak = 0, sts2Power = 0,
sts2F1 = 0, sts2F2 = 0, sts2F3 = 0, sts2FpIndex = 0, sts2AccumCount = 0}

or

{ipatovRxTime = "\211\377J\334m", ipatovRxStatus = 4 '\004', ipatovPOA = 5940, stsRxTime = "\000\000\000\000", stsRxStatus = 0, stsPOA = 0, 
  sts2RxTime = "\000\000\000\000", sts2RxStatus = 0, sts2POA = 0, tdoa = "\000\000\000\000\000", pdoa = 0, xtalOffset = 522, ciaDiag1 = 4275514, 
  ipatovPeak = 314575626, ipatovPower = 0, ipatovF1 = 2224, ipatovF2 = 2799, ipatovF3 = 2723, ipatovFpIndex = 24953, ipatovAccumCount = 107, 
  stsPeak = 0, stsPower = 0, stsF1 = 0, stsF2 = 0, stsF3 = 0, stsFpIndex = 0, stsAccumCount = 0, sts2Peak = 0, sts2Power = 0, sts2F1 = 0, sts2F2 = 0, 
  sts2F3 = 0, sts2FpIndex = 0, sts2AccumCount = 0}

after 570429191 status, the diagnostics looks like

{ipatovRxTime = "\313\302", <incomplete sequence \357\072>, ipatovRxStatus = 4 '\004', ipatovPOA = 3218, stsRxTime = "\000\000\000\000", 
  stsRxStatus = 0, stsPOA = 0, sts2RxTime = "\000\000\000\000", sts2RxStatus = 0, sts2POA = 0, tdoa = "\000\000\000\000\000", pdoa = 0, 
  xtalOffset = 494, ciaDiag1 = 4043321, ipatovPeak = 2086669174, ipatovPower = 1, ipatovF1 = 2946, ipatovF2 = 2311, ipatovF3 = 1599, 
  ipatovFpIndex = 48323, ipatovAccumCount = 107, stsPeak = 0, stsPower = 0, stsF1 = 0, stsF2 = 0, stsF3 = 0, stsFpIndex = 0, stsAccumCount = 0, 
  sts2Peak = 0, sts2Power = 0, sts2F1 = 0, sts2F2 = 0, sts2F3 = 0, sts2FpIndex = 0, sts2AccumCount = 0}

We notice that whenever ipatovF1, F2, F3 get updated, the value is usually only 1000-3000, much smaller than what we have seen on normal Rx events (20000-30000) at similar close range.
ipatovPower is always 0, occasionally 1 or 2.
Whenever ipatovF1, F2, F3 are 0, then ipatovFpIndex = 64960.

Does this information point us to some possible causes? what’s wrong with our tx device?

Hi @pansori
if your SW is working well on EVB but not working with your design then I would suggest to check your design. Did you perform Spectrum analyzer checks? Can you post schematic and layout?

Cheers
JK

Thanks for the reply. We are going to do some RF measurements this week. I can post the results here.

The schematic of our board could be found at socitrack/rev_i_v129.SCH.pdf at master · lab11/socitrack · GitHub

The board file is at

Hi @pansori
I don’t have a experience with DW3K QFN part and your RF switch. Is there a recommendation to remove GND below the IC?

Are you sure that your RF track are correct?
What king of antenna do you use?

Cheers
JK