Post Go back to editing

ARM timeout when calling TALISE_radioOff

Category: Software
Product Number: ADRV9009
Software Version: 2019_R2

Hello

I have custom hardware with three ADRV9009 devices. I control these ADRV9009 devices using the ADI IIO Linux device driver release 2019_R2. 

I have a situation where an ARM timeout occasionally happens when calling the TALISE_radioOff function. Initially I thought it was the setting of the LO frequency that was causing the problem but after adding extra print-outs to the ADRV9009 device driver code, I have been able to narrow it down to the point where the ADRV9009 is put into the radio off state before the LO frequency is set.

The following is the error message logged in dmesg:

[ 514.539322] adrv9009 spi1.1: ERROR: 247: TALISE_waitArmCmdStatus() failed due to thrown ARM error. ARM time out

Apart from this failure mode, the ADRV9009 devices are calibrating and work correctly.

I have tried the following:

1) I have increased the timeout to 10 seconds. The failure still happens. This makes me think that the ADRV9009 ARM must be in a hung state.

2) I can confirm that the issue only happens when a specific antenna signal is connected to the ADRV9009. Without any signal connected or with a fixed tone signal generator connected, the issue does not happen.

3) I reproduce the error by jumping around in LO frequencies between 170 and 430MHz. This results in many radio on / radio off function calls happening for each LO frequency change. There is no correlation between the LO frequency and when the ARM time out happens.

4) I have tried both ARM firmware version 6.0.2 and 6.2.1. The behaviour is the same on both.

Questions relating to the ADRV9009 ARM:

1) Is there a way to check if the ARM is running correctly?

2) What does the ARM do when the radio off command is received? Could any of this functionality cause the ARM to hang?

3) Is there any way that the input signal could affect what the ARM has to do when the radio off command is received? In other words, does the input signal affect what the ARM is doing?

I will post the profile in a separate post.

Since the ADRV9009 ARM is a black box to the end customer I am relying on ADI to please help diagnose what could be going wrong here. If this is the wrong forum for ADRV9009 ARM related questions, then please suggest a more appropriate forum. 

Thank you.

  • This is the profile which has been used to populate the Linux device tree. I use the profile and stream file generated by the ADRV9009 Filter Wizard. 

    <profile Talise version=1 name=Tx_BW160_IR204p80_Rx_BW160_OR204p80_ORx_BW160_OR204p80>
     <clocks>
      <deviceClock_kHz=204800>
      <clkPllVcoFreq_kHz=8192000>
      <clkPllHsDiv=2.5>
     </clocks>
    
     <rx name=Rx 160.00MHz, OutputRate 204.80MHz, TotalDecimation 8>
      <rxChannels=TAL_RX1RX2>
      <rxFirDecimation=2>
      <rxDec5Decimation=4>
      <rhb1Decimation=1>
      <rxOutputRate_kHz=204800>
      <rfBandwidth_Hz=160000000>
      <rxBbf3dBCorner_kHz=160000>
      <rxDdcMode=0>
    
      <rxNcoShifterCfg>
       <bandAInputBandWidth_kHz=0>
       <bandAInputCenterFreq_kHz=0>
       <bandANco1Freq_kHz=0>
       <bandANco2Freq_kHz=0>
       <bandBInputBandWidth_kHz=0>
       <bandBInputCenterFreq_kHz=0>
       <bandBNco1Freq_kHz=0>
       <bandBNco2Freq_kHz=0>
      </rxNcoShifterCfg>
    
      <filter FIR gain_dB=-6 numFirCoefs=48>
      -3
      -10
      16
      28
      -42
      -71
      97
      148
      -194
      -281
      353
      493
      -602
      -821
      983
      1327
      -1565
      -2142
      2500
      3590
      -4320
      -7239
      9270
      31252
      31252
      9270
      -7239
      -4320
      3590
      2500
      -2142
      -1565
      1327
      983
      -821
      -602
      493
      353
      -281
      -194
      148
      97
      -71
      -42
      28
      16
      -10
      -3
      </filter>
    
      <rxAdcProfile num=42>
      229
      168
      181
      90
      1280
      893
      1316
      83
      1190
      38
      829
      21
      48
      42
      30
      210
      0
      0
      0
      0
      53
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </rxAdcProfile>
     </rx>
    
     <obsRx name=Rx 160.00MHz, OutputRate 204.80MHz, TotalDecimation 8>
      <obsRxChannelsEnable=TAL_ORX1ORX2>
      <enAdcStitching=0>
      <rxFirDecimation=2>
      <rxDec5Decimation=4>
      <rhb1Decimation=1>
      <orxOutputRate_kHz=204800>
      <rfBandwidth_Hz=160000000>
      <rxBbf3dBCorner_kHz=225000>
      <orxDdcMode=0>
    
      <filter FIR gain_dB=-6 numFirCoefs=48>
      -3
      -8
      15
      25
      -39
      -64
      76
      101
      -206
      -245
      349
      437
      -583
      -733
      943
      1189
      -1497
      -1924
      2398
      3246
      -4149
      -6490
      9504
      30424
      30424
      9504
      -6490
      -4149
      3246
      2398
      -1924
      -1497
      1189
      943
      -733
      -583
      437
      349
      -245
      -206
      101
      76
      -64
      -39
      25
      15
      -8
      -3
      </filter>
    
      <orxLowPassAdcProfile num=42>
      229
      168
      181
      90
      1280
      893
      1316
      83
      1190
      38
      829
      21
      48
      42
      30
      210
      0
      0
      0
      0
      53
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </orxLowPassAdcProfile>
    
      <orxBandPassAdcProfile num=42>
      229
      168
      181
      90
      1280
      893
      1316
      83
      1190
      38
      829
      21
      48
      42
      30
      210
      0
      0
      0
      0
      53
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </orxBandPassAdcProfile>
    
     </obsRx>
    
     <lpbk>
      <rxFirDecimation=2>
      <rhb1Decimation=1>
      <outputRate_kHz=204800>
      <rfBandwidth_Hz=75000000>
      <rxBbf3dBCorner_kHz=225000>
    
      <filter FIR gain_dB=-6 num=48>
      -3
      -8
      15
      25
      -39
      -64
      76
      101
      -206
      -245
      349
      437
      -583
      -733
      943
      1189
      -1497
      -1924
      2398
      3246
      -4149
      -6490
      9504
      30424
      30424
      9504
      -6490
      -4149
      3246
      2398
      -1924
      -1497
      1189
      943
      -733
      -583
      437
      349
      -245
      -206
      101
      76
      -64
      -39
      25
      15
      -8
      -3
      </filter>
    
      <lpbkAdcProfile num=42>
      267
      168
      181
      90
      1280
      623
      1285
      51
      1137
      25
      727
      30
      48
      41
      27
      190
      0
      0
      0
      0
      48
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </lpbkAdcProfile>
     </lpbk>
    
     <tx name=Tx 160.00MHz, InputRate 204.80MHz, TotalInterpolation 8>
      <txChannels=TAL_TX1TX2>
      <dacDiv=1>
      <txFirInterpolation=1>
      <thb1Interpolation=2>
      <thb2Interpolation=2>
      <thb3Interpolation=2>
      <txInt5Interpolation=1>
      <txInputRate_kHz=204800>
      <primarySigBandwidth_Hz=75000000>
      <rfBandwidth_Hz=160000000>
      <txDac3dBCorner_kHz=187000>
      <txBbf3dBCorner_kHz=80000>
    
      <filter FIR gain_dB=0 numFirCoefs=20>
      26
      -73
      131
      -188
      232
      -209
      -31
      946
      -2961
      20082
      -2961
      946
      -31
      -209
      232
      -188
      131
      -73
      26
      0
      </filter>
     </tx>
    </profile>

  • This is for the benefit of anyone else who perhaps experiences the same problem:

    So we believe we have been able to track down the source of the problem. We were enabling the HD2 tracking correction. In the user guide there is a note which states that HD2 tracking correction must only be used with specific profiles (sample rate / bandwidth). We were not using one of these profiles.

    If we disable HD2 tracking correction, the problem no longer happens. With just the RX quadrature tracking enabled, it works as expected.