This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AWR2944: AWR2944 Fault inject about txPsDacFault falied

Part Number: AWR2944

Hi,

I want to validate the fault injection about txPsDacFault. The way is that firstly to inject txPsDacFault fault use function rlRfAnaFaultInjConfig, and then detect the async event in mmwave eventFxn callback function MmwDemo_eventCallbackFxn

The SDK description about txPsDacFault is below:

    /**
     * @brief Primary Fault:  TX PS DAC fault injection. This field indicates which TX PS DAC \n
              should have fault injected. If the fault is enabled, the corresponding TX’s ANA \n
              DAC LDO would be turned off causing the PS DAC to fail. This fault can be seen \n
              in TXn_INTERNAL_ANALOG_SIGNALS \n
              Monitor. This fault injection is only applicable in AWR294x devices. \n
                Bit Channel \n
                 0  TX0 \n
                 1  TX1 \n
                 2  TX2 \n
                 3  TX3 \n
                 Others RESERVED \n
                 For each bit, 1 = inject fault, 0 = remove injected fault
     */
    rlUInt8_t  txPsDacFault;
According to "This fault can be seen in TXn_INTERNAL_ANALOG_SIGNALS", 
So I use function rlRfTxnIntAnaSignalsMonConfig to configure  TXn_INTERNAL_ANALOG:
:
static void BssFaultInject_SetConfig_txPsDacFault(void)
{
    rlReturnVal_t ret = 0;

    rlTxnIntAnaSignalsMonConf_t config1 = { 
        .profileIndx = 0,
        .reportMode = 1,
        .txPhShiftDacMonThresh = 0,  //Not applicable for AWR294x
        .txSelMask = 0x0F,
    };
    ret = rlRfTxnIntAnaSignalsMonConfig(RL_DEVICE_MAP_INTERNAL_BSS, &config1);
    if (ret != 0)
    {
        test_print("return:%d\n", ret);
        DebugP_assert(0);
    }  
}
But after inject the error and send frame ending, no async event will be reported.
The SDK description about param txPhShiftDacMonThresh of struct rlTxnIntAnaSignalsMonConf_t is below:
    /**
     * @brief  The TX phase shifter DAC monitor delta threshold when TX_PS_DAC_MON is Enabled \n
               (Not applicable for AWR294x) \n
               1 LSB = 1.8V/1024 \n
               Value 0: TX_PS_DAC_MON is disabled \n
               Valid Range: 1 to 1023 \n
     */
    rlUInt16_t  txPhShiftDacMonThresh;
According to "(Not applicable for AWR294x)", Then I use the function rlRfMontxPhShiftDacConfig to config TX_Phase_DAC:
static void BssFaultInject_SetConfig_txPsDacFault(void)
{
    rlReturnVal_t ret = 0;
    rlMonTxPhShifterDacConf_t config = { 
        .profileId = 0,
        .reportMode = 1,
        .txSelMask = 0x0F,
        .txPsDacMonThresh = {1023, 1023, 1023, 1023},  //1 LSB = 1.8V/1024
    };
    ret = rlRfMontxPhShiftDacConfig(RL_DEVICE_MAP_INTERNAL_BSS, &config);
    if (ret != 0)
    {
        test_print("return:%d\n", ret);
        DebugP_assert(0);
    }  
}

But after I configure this, the async event RL_RF_AE_MON_ADV_TX_PHSHIFTER_DAC_REPORT will be report repeatedly after frame ending if the fault is injected or not, and my handling code in callback fun is:
                case RL_RF_AE_MON_ADV_TX_PHSHIFTER_DAC_REPORT:
                {
                    BssFaultInject_ClearStatus(BssFaultInject_txPsDacFault_TX0);
                    BssFaultInject_ClearStatus(BssFaultInject_txPsDacFault_TX1);
                    BssFaultInject_ClearStatus(BssFaultInject_txPsDacFault_TX2);
                    BssFaultInject_ClearStatus(BssFaultInject_txPsDacFault_TX3);
                    test_print ("RL_RF_AE_MON_ADV_TX_PHSHIFTER_DAC_REPORT Occur\n", asyncSB);
                    memcpy(&reportInfo, payload, sizeof(rlMonTxPhShifterDacRep_t));
                    test_print ("statusFlags:0x%02x\n", reportInfo.MonTxPhShifterDacRep.statusFlags);
                    test_print ("errorCode:%d\n", reportInfo.MonTxPhShifterDacRep.errorCode);
                    test_print ("timeStamp:%d\n", reportInfo.MonTxPhShifterDacRep.timeStamp);
                    test_print ("psDacIDeltaMinTx0:%d\n", reportInfo.MonTxPhShifterDacRep.psDacIDeltaMinTx0);
                    test_print ("psDacIDeltaMinTx1:%d\n", reportInfo.MonTxPhShifterDacRep.psDacIDeltaMinTx1);
                    test_print ("psDacIDeltaMinTx2:%d\n", reportInfo.MonTxPhShifterDacRep.psDacIDeltaMinTx2);
                    test_print ("psDacIDeltaMinTx3:%d\n", reportInfo.MonTxPhShifterDacRep.psDacIDeltaMinTx3);
                    test_print ("psDacQDeltaMinTx0:%d\n", reportInfo.MonTxPhShifterDacRep.psDacQDeltaMinTx0);
                    test_print ("psDacQDeltaMinTx1:%d\n", reportInfo.MonTxPhShifterDacRep.psDacQDeltaMinTx1);
                    test_print ("psDacQDeltaMinTx2:%d\n", reportInfo.MonTxPhShifterDacRep.psDacQDeltaMinTx2);
                    test_print ("psDacQDeltaMinTx3:%d\n", reportInfo.MonTxPhShifterDacRep.psDacQDeltaMinTx3);
                    test_print ("\n\n");                    
                    break;
                }
And the print info is:
Please give some advice for it.
  • Hi,

    For DAC shifter monitoring you will also need to enable the  rlRfTxnIntAnaSignalsMonConfig for all the TX applicable. Thus, you need to enable both the monitors and then look for the report. Can you try this and let us know your observations. 

    Thanks,

    Pradipta.

  • In my code, I already use function rlRfTxnIntAnaSignalsMonConfig to configure all TX.

    After inject DAC fault and frame end, AWR2944 will not report anything about DAC shifter, and will report RL_RF_AE_MON_RX_GAIN_PHASE_REPORT, the error code:291.

    Could you describe it in more detail?

    My monitor enable configuration param is below:

    const rlMonAnaEnables_t BssFaultInject_MonitorEnableConfig = 
    {
        /* Do in mmwDemo_cfgAnalogMonitor function by parameter MMWDEMO_ANALOG_MONITOR_RX_SATURATION_DETECTOR=24, MMWDEMO_ANALOG_MONITOR_RX_SIG_IMG_BAND=25(mss_main.c) */
        .enMask1 =  (1u << 0 ) |  /*TEMPERATURE_MONITOR_EN */
                    (1u << 1 ) |  /*RX_GAIN_PHASE_MONITOR_EN */
                    (0u << 2 ) |  /*RX_NOISE_MONITOR_EN (Reserved in AWR294x) */
                    (1u << 3 ) |  /*RX_IFSTAGE_MONITOR_EN */
                    (1u << 4 ) |  /*TX0_POWER_MONITOR_EN */
                    (1u << 5 ) |  /*TX1_POWER_MONITOR_EN */
                    (1u << 6 ) |  /*TX2_POWER_MONITOR_EN */
                    (1u << 7 ) |  /*TX0_BALLBREAK_MONITOR_EN */
                    (1u << 8 ) |  /*TX1_BALLBREAK_MONITOR_EN */
                    (1u << 9 ) |  /*TX2_BALLBREAK_MONITOR_EN */
                    (1u << 10) |  /*TX_GAIN_PHASE_MONITOR_EN */
                    (1u << 11) |  /*TX0_PHASE_SHIFTER_MONITOR_EN */
                    (1u << 12) |  /*TX1_PHASE_SHIFTER_MONITOR_EN */
                    (1u << 13) |  /*TX2_PHASE_SHIFTER_MONITOR_EN */
                    (1u << 14) |  /*SYNTH_FREQ_MONITOR_LIVE_EN */
                    (0u << 15) |  /*EXTERNAL_ANALOG_SIGNALS_MONITOR_EN (Reserved in AWR294x) */
                    (1u << 16) |  /*INTERNAL_TX0_SIGNALS_MONITOR_EN */
                    (1u << 17) |  /*INTERNAL_TX1_SIGNALS_MONITOR_EN */
                    (1u << 18) |  /*INTERNAL_TX2_SIGNALS_MONITOR_EN */
                    (1u << 19) |  /*INTERNAL_RX_SIGNALS_MONITOR_EN */
                    (1u << 20) |  /*INTERNAL_PMCLKLO_SIGNALS_MONITOR_EN */
                    (1u << 21) |  /*INTERNAL_GPADC_SIGNALS_MONITOR_EN */
                    (1u << 22) |  /*PLL_CONTROL_VOLTAGE_MONITOR_EN */
                    (1u << 23) |  /*DCC_CLOCK_FREQ_MONITOR_EN */
                    (1u << 24) |  /*RX_IF_SATURATION_MONITOR_EN */
                    (0u << 25) |  /*RX_SIG_IMG_BAND_MONITORING_EN (Reserved in AWR294x) */
                    (0u << 26) |  /*RX_MIXER_INPUT_POWER_MONITOR (Reserved in AWR294x) */
                    (0u << 27) |  /*RESERVED */
                    (0u << 28) |  /*SYNTH_FREQ_MONITOR_NON_LIVE_EN */
                    (1u << 29) |  /*TX3_POWER_MONITOR_EN (AWR294x only) */
                    (1u << 30) |  /*TX3_BALLBREAK_MONITOR_EN (AWR294x only) */
                    (1u << 31),   /*INTERNAL_TX3_SIGNALS_MONITOR_EN (AWR294x only) */
        /**
         * @brief  LDO short circuit monitoring enable. There are no reports for these monitors. \n
                   If there is any fault, the asyncevent RL_RF_AE_ANALOG_FAULT_SB will be sent. \n
                     Bit    Description \n
                     b0     APLL LDO short circuit monitoring \n
                            0 - disable, 1 - enable \n
                     b1     SYNTH VCO LDO short circuit monitoring \n
                            0 - disable, 1 - enable \n
                     b2     PA LDO short circuit monitoring(not applicable for AWR294x) \n
                            0 - disable, 1 - enable \n
                     b3     VMON circuit monitoring enable(not applicable for AWR294x) \n
                            0 - disable, 1 - enable \n
                     b15:4  RESERVED \n
                   @note 1: The VMON circuit monitoring is not supported in AWR2243/xWR6243 device. \n
                   @note 2: In AWR294x devices, there is a separate VMON monitoring configuration \n
                            and enable API - AWR_MONITOR_VMON_CONF_SB \n
                   @note 3: In AWR294x devices, APLL LDO Short Circuit and VMON faults are not \n
                            reported by the RSS firmware. Fault signals are mapped to the MSS ESM \n
                            and should be responded to by the MSS application. Please refer to the \n
                            TRM for more information. \n
        */
        .ldoVmonScEn = (1u << 0) | 
                       (1u << 1),    
        /**
         * @brief If any bit in this field is set to 1, the associated monitors are enabled. \n
                   Bit   Analog monitoring control \n
                    0    TX3_PHASE_SHIFTER_MONITOR_EN (only applicable to AWR294x) \n
                    1    TX_PHSHIFTER_DAC_MONITOR (only applicable to AWR294x) \n
                 15:2    RESERVED \n
         */
        .enMask2 = (1u << 0) | 
                   (1u << 1),    
        
    };

  • Hi,

    As per the first post posted above:

    With/ Without fault injection you are observing the async event RL_RF_AE_MON_ADV_TX_PHSHIFTER_DAC_REPORT. This is correct. 

    Reporting mode is 1 meaning Report is send only upon a failure (after checking for thresholds).

    What you are observing is normal monitoring failure as you are using the highest threshold 1023. Use a low value here like 3 or 4 then you will not face these async event again and again. 

     As per your 2nd response:

    You should enable only the required monitor to observe failure. Currently since the gain monitoring is done before it reports out the error. Disable it and then check your observations. 

    Thanks,

    Pradipta.

  • Thanks very much, the issue is resolved.