DW3000 PLL Calibration Process

Hi everyone,

I am trying to calibrate the internal CELL of DW3000. I saw in section 10.4 of its user manual the process of calibration. I follow these stpes, but the PLL does not get locked after calibration. I do the following steps:

  1. Set device in state IDLE_RC: reset AINTIT2IDLE, set FORCE2INIT, establish SYSCLK to 3, clearing FORCE2INIT, restoring SYSCLK to 0.
  2. Set CAL_EN in PLL_CAL register and set AINTIT2IDLE.
  3. Wait until PLL is locked. But it does not happen.

Is there any other step before waiting for PLL to get locked?

That part works as documented for me. What happens when you take those steps?

I’m waiting for the PLL to lock, but it does not happen. I’m not using the pre-build library
I write and read registers directly.

You’re pretty confident in your register read write logic?

You can compare with my code: gadget_play/dw3k.cpp at edd54dfb1af32f78f74877a8ff2b206ed83b0dbd · egnor/gadget_play · GitHub (and gadget_play/dw3k.cpp at edd54dfb1af32f78f74877a8ff2b206ed83b0dbd · egnor/gadget_play · GitHub).

One difference is that I do this straight out of reset so don’t have to force it back into INIT_RC.

– egnor

Yes, I’m pretty confident, until now I was capable of doing ranging measurements. I will check your code and see if there are any differences

Thank you.

It works correctly!!! It was my fault, when I retry to force it back into INIT_RC. But my measures, do not improve too much.