Skip to main content
VToma.11
Associate II
July 11, 2022
Solved

Xtalk calibration buffer

  • July 11, 2022
  • 6 replies
  • 5421 views

I need to find out what data does xtalk buffer provide to sensor. I know what some parts of it mean, but I need to know what is the meaning of all parts. Is there any documentation about it?

This topic has been closed for replies.
Best answer by Zhiyuan.Han

Hi WJLO

For multiple object detection, normally we have two cases, one is multiple target inside FOV, this is detected with multizone feature, and the 2nd one is multi target per zone, as our TOF sensor support maximum 4 targets per zone, I think you are talking the 1st case. 

For each zone ranging, it will use separate zone grid value plus the generic shape value for xtalk correction. so there will be 64 combinations for 64 zones. 

 

Br

Zhiyuan.Han

6 replies

Eleon BORLINI
ST Employee
July 18, 2022

Hi @VToma.1​ ,

Are you referring to this application guide (UM2923)?

If so, please have a look to it from page 15.

-Eleon

VToma.11
VToma.11Author
Associate II
July 19, 2022

Hi, @Eleon BORLINI​ ,

No, I'm asking for information that is carried by buffer itself. We found out some stuff from firmware, but it's still a pickle to find out how to work with it in our application.

Thank you for answering.

-Vitalii

Eleon BORLINI
ST Employee
July 21, 2022

Hi @VToma.1​ ,

better to let @John E KVAM​ answer, he is an expert in the ToF field.

-Eleon

John E KVAM
ST Employee
July 21, 2022

Well it depends on which sensor you are using. But basically the job of the Xtalk is to record how many photons hit the coverglass and bounce back. By knowing that, we can work out the math. The trick is the reflected light is not uniform. The geometry is such that there is an inner and an outer 'tilt' to the coverage.

So if you were using one of the VL53L1s (with the lens and Region of interest) that tilt is more important than on the L0, L3 or L4s.

If you calibrate the VL53L1X for instance using the Evaluation kit GUI you get:

[GENERAL_INFO]
RANGING_MODE=LowPowerAutonomous
VL53L1_DEVICE=Center
DEVICE_ID=01:03:CA
ROI=0 15 15 0
REF_SPADS_CALIBRATED=True
XTALK_CALIBRATED=True
OFFSET_CALIBRATED=True
[REF_SPADS]
REF_SPADS_CAL_STATUS=0
REF_SPAD_ENABLES=FF FD FF 6B CF 07
REF_SPAD_ENABLE_COUNT=13
REF_SPAD_LOCATION=1
[OFFSET]
OFFSET_CAL_STATUS=0
INNER_OFFSET=43
OUTER_OFFSET=43
REF_PEAK_SIGNAL_RATE=0
REF_ACTUAL_EFF_SPADS=0
REF_DISTANCE=0
REF_REFLECTANCE=0
COVERGLASS_TRANSMISSION=0
HISTO_GAIN_FACTOR=0
STD_RANGING_GAIN_FACTOR=0.981934
[XTALK]
XTALK_CAL_STATUS=0
XTALK_PLANEOFFSET_KCPS=54.6875
XTALK_XPLANE_GRADIENT_KCPS=0
XTALK_YPLANE_GRADIENT_KCPS=0
XTALK_SHAPE_ZONE_ID=0
XTALK_SHAPE_TIMESTAMP=0
XTALK_SHAPE_FIRST_BIN=0
XTALK_SHAPE_BUFFER_SIZE=0
XTALK_SHAPE_NUMBER_OF_BINS=0
XTALK_SHAPE_PHASE_CAL_RESULT_REF_PHASE=0
XTALK_SHAPE_PHASE_CAL_RESULT_VCSEL_START=0
XTALK_SHAPE_CAL_CONFIG_VCSEL_START=0
XTALK_SHAPE_VCSEL_WIDTH=0
XTALK_SHAPE_FASTOSC_FREQUENCY=0
XTALK_SHAPE_ZERO_DISTANCE_PHASE=0
XTALK_SHAPE_BIN_DATA=0 0 0 0 0 0 0 0 0 0 0 0

Notice that most of the XTALK shape data is blank. We simplified the data for the X version, only really needing the overall Xtalk.

If you look at the VL53L1CB on the other hand, more of the data was 'filled out' as in:

XTALK_CAL_STATUS=0

XTALK_PLANEOFFSET_KCPS=40.41797

XTALK_XPLANE_GRADIENT_KCPS=0

XTALK_YPLANE_GRADIENT_KCPS=0

XTALK_SHAPE_ZONE_ID=0

XTALK_SHAPE_TIMESTAMP=0

XTALK_SHAPE_FIRST_BIN=0

XTALK_SHAPE_BUFFER_SIZE=12

XTALK_SHAPE_NUMBER_OF_BINS=12

XTALK_SHAPE_PHASE_CAL_RESULT_REF_PHASE=5.39209

XTALK_SHAPE_PHASE_CAL_RESULT_VCSEL_START=6

XTALK_SHAPE_CAL_CONFIG_VCSEL_START=9

XTALK_SHAPE_VCSEL_WIDTH=2.5

XTALK_SHAPE_FASTOSC_FREQUENCY=11.81982

XTALK_SHAPE_ZERO_DISTANCE_PHASE=2.39209

XTALK_SHAPE_BIN_DATA=0 0.349609 0.444336 0.206055 0 0 0 0 0 0 0 0

And that has to do with the 'histograms', this gives the xtalk signal rate for each bin in the histogram.

By using this calibration file, you give names to the data.

And by using the GUI, you can edit the file and load it into the chip and see what your change does.

the most important value is the XTALK_PLANEOFFSET_KCPS. Try screwing around with that and see what you get.

But careful, this is a really deep hole, and you can spend a lot of time messing with it.

  • john

VToma.11
VToma.11Author
Associate II
July 29, 2022

Hi,

thank you for your reply and examples. I used L5 with Evaluation kit and got something like this:

[Xtalk]
Buffer=9fd800c0,04e00b54,0b08082c,08080803,9fe40140,00006798,00007013,0000783a,01e00001,00000020,9ff80040,2c2c2524,9ffc0404,0031fe6c,002fbe70,002d4b4a,0022495f,001649a9,00102c1d,000c2caa,0008e236,0033ee3b,002f7431,002924e8,001f9ba1,00179247,0010e6ac,000cabac,000a3338,0047986d,003cbe01,0032e2bb,0021ee58,001aef4b,00121a8b,000d9769,000b24e4,00668557,005aac3c,00367300,0027d7c4,001f0114,0013cc98,000fd41e,000d2c05,00684936,0063700f,003812c2,0027aacd,001fce2d,0014c567,00107088,000cb4d2,00503174,0038677a,002e324a,0020b3f2,001abb51,00123cb3,000e09fe,000b568e,0044c2eb,0035871b,002637e4,001d4bb9,0015a551,000ff345,000c6ffd,000a0eb7,0040b699,002c89b6,00286576,001f32ee,0013f93a,000dbd1d,000b0b4a,00087fe2,a0fc0100,00000000,00000003,00000000,00000000,a10c0100,00000080,00000003,00000000,00000000,a11c00c0,00007013,0c9001e0,0000002c,a1280902,00000000,00000000,00000000,00000000,00230000,01f60169,02360222,02460241,00f10228,001f004d,0006000e,00020003,00000001,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,a2480040,00000508,a24c0081,030c0103,00000003,a2540081,09010101,00000000,a25c0081,08010108,00000008,a2640081,01080808,00000001,a26c0084,0028a633,016afb0e,000bb003,001bb4ba,001dcecb,00000000,00000000,00000000,a28c0082,01000800,01000100,00000100,00000000,0000000f,00010304
Shape=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000023,00000169,000001f6,00000222,00000236,00000241,00000246,00000228,000000f1,0000004d,0000001f,0000000e,00000006,00000003,00000002,00000001,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
Grid=0031fe6c,002fbe70,002d4b4a,0022495f,001649a9,00102c1d,000c2caa,0008e236,0033ee3b,002f7431,002924e8,001f9ba1,00179247,0010e6ac,000cabac,000a3338,0047986d,003cbe01,0032e2bb,0021ee58,001aef4b,00121a8b,000d9769,000b24e4,00668557,005aac3c,00367300,0027d7c4,001f0114,0013cc98,000fd41e,000d2c05,00684936,0063700f,003812c2,0027aacd,001fce2d,0014c567,00107088,000cb4d2,00503174,0038677a,002e324a,0020b3f2,001abb51,00123cb3,000e09fe,000b568e,0044c2eb,0035871b,002637e4,001d4bb9,0015a551,000ff345,000c6ffd,000a0eb7,0040b699,002c89b6,00286576,001f32ee,0013f93a,000dbd1d,000b0b4a,00087fe2
Value=3337
[Device Identification]
Version=4536184D0C51FFDF
[Device Part]
Version=VL53L5CXV0GC/1$1
[Firmware]
Version=4.3.27156

We found that (using from 0 indexation) Grid part, that is Kcps/SPAD, is located in parts 13-76 of Buffer. But to get numbers right, you have to divide them by 2048. Value is maximum value in Grid. We also found some adresses/commands in it. But we have no idea what rest is supposed to represent.

Thank you for your time.

  • Vitalii
John E KVAM
ST Employee
July 29, 2022

It is very typical of our part to represent numbers in whatever units are handy and leave the PC to interpret the result. So your divide by 2048 just means that we stored the number in a 21.11 format.

(Where the 21 is the integer part and the 11 is the fractional part.)

Because we don't know how your MCU stores floating point numbers, this is the easist way.

Each zone gets a number of photons. And that's the 'grid' as some zones get more than others.

But we gather photons into bins. Each bin being the number of photons detected during a clock cycle.

And the 'shape' is how many photons can be expected during each clock cycle. (normalized)

So when we take a range, one multiplies the Grid value times the bin shape value for that bin to get the number of photons that have to be subtracted from the range data.

And that's now one removes the crosstalk.

0693W00000QMUBRQA5.pngSo for zone (0,0) one would multiply the 285 grid value times the 500 (in bin 10) and subract the result from the received data in bin 10 to get the target signal level. (Photon counts are ideally in the 20Million range, so the numbers are large.)

I hope that explains it.

VToma.11
VToma.11Author
Associate II
August 10, 2022

Hello,

Thank you for your time and effort. Is it right to assume that Xtalk value is the same as Xtalk margine? Or margine is different for every zone and should be calculated by the example you've provided?

Associate II
September 28, 2023

Hi,

285kcps & photon number range of about 20 million => integration time is about 4s?
Is this calculation correct?
Your kcps formula is (Signal photon count/(1/integration time))/ 16 SPAD/ 1000 = kcps ???

Zhiyuan.Han
Technical Moderator
November 24, 2023

Hi WJLO

Your formular is basically right, except the SPAD count, the SPAD cound will be adjusted by return signal, if return signal is high, then the SPAD number will decrease, if target signal is low, SPAD number will increase to collect more signal. 

 

Br

Zhiyuan.Han

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.
Zhiyuan.Han
Technical Moderator
November 28, 2023

Hi WJLO

When disable xtalk compensation, the total return signal rate will be merged signal which include xtalk and target return signal. Actually the shape is used to extract xtalk from the merged signal, if you visualize the xtalk shape, you will see the shap data are centered at the beginning of the bin, which means xtalk is come from short distance. 

For the real target, the histogram bin will be centered at different bins depend on target distance, if the target is far at around 3.8 meter, the center will be at the end of the bins. 

 

Br

Zhiyuan.Han

 

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.
Associate II
November 28, 2023

Hi Zhiyuan.Han,

  What I mean is 8x8 zone case. In the case of multiple object detection, how to use one shape and 64 Grids to distinguish the distance of different objects?

Zhiyuan.Han
Zhiyuan.HanBest answer
Technical Moderator
November 28, 2023

Hi WJLO

For multiple object detection, normally we have two cases, one is multiple target inside FOV, this is detected with multizone feature, and the 2nd one is multi target per zone, as our TOF sensor support maximum 4 targets per zone, I think you are talking the 1st case. 

For each zone ranging, it will use separate zone grid value plus the generic shape value for xtalk correction. so there will be 64 combinations for 64 zones. 

 

Br

Zhiyuan.Han

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.