Post Go back to editing

Why LOL tracking calibration is not completed?

Category: Software
Product Number: ADRV9009

I tried to enable the LOL tracking calibration on my ADRV9009 project. I enabled both QEC and LOL tracking calibration.

I initially used TALISE_setArmGpioPins to tell ARM TX_GPIO_08 and TX_GPIO_09 are assigned to ORX_TX_SEL0 and ORX_TX_SEL1 respectively. And I toggled the TX_GPIO_08 and TX_GPIO_09 so ARM knows the Tx1/2 to Orx1 path is established, hence the ARM shall schedule the calibration. But the report only showed the QEC tracking calibration was complete. the LOL calibration has no errors but no complete either. In my case I used TX_GPIO_01-07 to map to GPIO3v3, so the TX_GPIO_01-07 output were level translated into 3.3v and available on TX_GPIO3v3_01-07 output. Also I allocate the enough time (5sec) to the LOL tracking calibration by keeping the  TX_GPIO_08 and TX_GPIO_09 in the same state during this 5 sec period.

Due to the above method didn't work. I then used TALISE_setTxToOrxMapping to tell ARM the the Tx1/2 to Orx1 path is established. I assume this will allow ARM to schedule the LOL tracking calibration but it still had the same outcome: no errors and no completion.

Any suggestion?

Parents
  • I used TALISE_setTxToOrxMapping(pd, 1, TAL_MAP_TX1_ORX, TAL_MAP_NONE) so ARM knows the Tx1 to Orx1 path is established

    Can you try setting the orx mapping to TAL_MAP_TX1_ORX and see if the cal runs?

    Are you using external LO or Internal LO calibration? Is the Tx fed back to Orx path?

    As the QEC cal is running , this seems to be mostly a mapping issue . 

    Can you please have a look at page 173 in UG  for running the calibrations.

Reply
  • I used TALISE_setTxToOrxMapping(pd, 1, TAL_MAP_TX1_ORX, TAL_MAP_NONE) so ARM knows the Tx1 to Orx1 path is established

    Can you try setting the orx mapping to TAL_MAP_TX1_ORX and see if the cal runs?

    Are you using external LO or Internal LO calibration? Is the Tx fed back to Orx path?

    As the QEC cal is running , this seems to be mostly a mapping issue . 

    Can you please have a look at page 173 in UG  for running the calibrations.

Children
  • That's I did. TALISE_setTxToOrxMapping(pd, 1, TAL_MAP_TX1_ORX, TAL_MAP_NONE). I was running external LOL calibration.

    My code is like this:

    static taliseArmGpioConfig_t armGpio =
    {
    	.orx1TxSel0Pin =
    	{ 
    		.gpioPinSel = TAL_GPIO_08,
    		.polarity 	= 0,
    		.enable		= 1
    	},
    	.orx1TxSel1Pin =
    	{
    		.gpioPinSel = TAL_GPIO_09,
    		.polarity 	= 0,
    		.enable		= 1
    	},
    	.orx2TxSel0Pin =
    	{
    		.gpioPinSel = TAL_GPIO_INVALID,
    		.polarity 	= 0,
    		.enable		= 0
    	},
    	.orx2TxSel1Pin =
    	{
    		.gpioPinSel = TAL_GPIO_INVALID,
    		.polarity 	= 0,
    		.enable		= 0
    	},
    	.enTxTrackingCals = 
    	{
    		.gpioPinSel = TAL_GPIO_INVALID,
    		.polarity 	= 0, 
    		.enable 	= 0
    	}
    };	
    
    uint32_t trackingCalMask =
    			TAL_TRACK_ORX1_QEC | TAL_TRACK_TX1_QEC | TAL_TRACK_TX2_QEC | TAL_TRACK_TX1_LOL ;
    		
    // TX_GPIO00-07 uses level translate and output at 3v3 GPIOs
    TALISE_setGpioOe(pd, 0x00, 0x3ff);
    TALISE_setGpio3v3Oe(pd, 0x0ff, 0xff);
    TALISE_setGpio3v3SourceCtrl(pd, 0x11); // translate mode
    
    // select TX_GPIO08 for orx1TxSel0 and TX_GPIO09 for orx1TxSel1
    TALISE_setArmGpioPins(pd, &armGpio);	
    TALISE_setTxToOrxMapping(pd, 0, TAL_MAP_TX1_ORX, TAL_MAP_NONE);	
    
    talAction = TALISE_enableTrackingCals(pd, trackingCalMask);
    if (talAction != TALACT_NO_ACTION) {
    	/*** < User: decide what to do based on Talise recovery action returned > ***/
    	printf("error: TALISE_enableTrackingCals() failed\n");
    	goto error_11;
    }
    
    {
    	uint32_t talAction = TALACT_NO_ACTION;
    	/* Function to turn radio on, Enables transmitters and receivers */
    	/* that were setup during TALISE_initialize() */
    	talAction = TALISE_radioOn(&tal[TALISE_A]);
    	if (talAction != TALACT_NO_ACTION) {
    		/*** < User: decide what to do based on Talise recovery action returned > ***/
    		printf("error: TALISE_radioOn() failed\n");
    		TALISE_closeHw(&tal[TALISE_A]);
    		exit(0);
    	}
    
    	talAction = TALISE_setRxTxEnable(&tal[TALISE_A], TAL_ORX1_EN, TAL_TX1TX2);
    	if (talAction != TALACT_NO_ACTION) {
    		/*** < User: decide what to do based on Talise recovery action returned > ***/
    		printf("error: TALISE_setRxTxEnable() failed\n");
    		exit(0);
    	}
    
    }


    Do I need to run the LOL initial for both external and internal initial LOL calibration? Currently only internal initial LOL calibration was done.

    Again, in case of using internal LO, do I need to run external LOL calibration? I assume it is only needed if the external observation loop is used in the system?