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: How to enable frame_start, chirp_start and chirp_end pulses?

Part Number: AWR2944
Other Parts Discussed in Thread: , SYSCONFIG, DCA1000EVM

I want to enable the FRAME_START, CHIRP_START and CHIRP_END pulses on the AWR2944 on a custom board.

The custom board is already confirmed to work with TI examples from the SDK and the high-end corner radar lab example also.

I have already set up my PC for rebuilding the app images from source code, both high end corner radar lab example and the demos which are included in the SDK.

The custom board has almost identical layout to the AWR2944EVM and access to the R15, G15 and T17 are possible to measure signals.

I opened the TI sysconfig GUI tool to configure the mapping of pins and using this tool added FRAME_START, CHIRP_START and CHIRP_END signals to R15, G15 and T17 respectfully. I can see the modifications to the mss.syscfg file but all other files on the right are unchanged.

The tool throws an error when I try to save all files or the mss.syscfg file, complaining about a chrome extension.

Regardless of the error to save, I have modified the file manually and using this new mss.syscfg rebuilt the appimages from source. However, after flashing the new AWR2944 TDM demo image (now rebuilt), when I load a profile using the mmWave visualiser and see the sensor is running, there are no pulse signals being generated on these pins which I have configured. I am measuring with an oscilloscope but nothing is happening on these lines.

Additions to the mss.syscfg file:

/**
 * These are the reserved peripherals and settings in this configuration
 */
const iCHIRP_END1           = scripting.addPeripheral("CHIRP_END");
iCHIRP_END1.$name           = "MyCHIRP_END1";
iCHIRP_END1.$assign         = "CHIRP_END0";
iCHIRP_END1.END.$assign     = "ball.T17";
const iCHIRP_START1         = scripting.addPeripheral("CHIRP_START");
iCHIRP_START1.$name         = "MyCHIRP_START1";
iCHIRP_START1.$assign       = "CHIRP_START0";
iCHIRP_START1.START.$assign = "ball.G15";
const iFRAME_START1         = scripting.addPeripheral("FRAME_START");
iFRAME_START1.$name         = "MyFRAME_START1";
iFRAME_START1.$assign       = "FRAME_START0";
iFRAME_START1.START.$assign = "ball.R15";

Questions:

1. Is this expected that adding these 3 new pins to the mss.syscfg, all the files in the TI sysconfig GUI tool (i.e. mssgenerated) remain unchanged?

2. if this part of my configuration is correct, do I need to add something to the mss_main.c file to configure these pins to generate the output pulses?

Any guidance or help would be greatly appreciated,

Mark

  • Hi Mark,

    We will check on this with our team internally and get back to you in a couple of days with an update on this.

    Thanks,

    Pradipta.

  • Hi,

    Is there any update on support for this?

    I have since tried something which gives some kind of success but not completely what I want and not knowing if it's the correct way to do it.

    As I mentioned in my original post, adding the pins does not generate any changes to the source code files in SysConfig, However, if I open SysConfig and create a new design for a AWR294X (without selecting an SDK), I can see that code is generated in the AWR294X_pinmux_data.c file.

    For example, the following code is generated when I add the FRAME_START signal

    #include "AWR294X_pinmux.h"
    
    /** Peripheral Pin Configurations */
    
    
    static pinmuxPerCfg_t gMyframe_start0PinCfg[] =
    {
        /* MyFRAME_START1 -> FRAME_START -> R15 */
        {
            CSL_MSS_IOMUX_PADAY_CFG_REG, PIN_MODE(7) | \
            ((PIN_PULL_DISABLE) & (~PIN_PULL_DIRECTION))
        },
        {PINMUX_END}
    };
    static pinmuxModuleCfg_t gFrame_startPinCfg[] =
    {
        { 0, TRUE, gMyframe_start0PinCfg},
        {PINMUX_END}
    };
           
    
    pinmuxBoardCfg_t gAWR294XPinmuxData[] =
    {
        {0, gFrame_startPinCfg},
        {PINMUX_END}
    };

    Taking this as a base I tried two methods of adding this manually to the ti_pinmux_config.c (in mssgenerated).

    1. I took only the first part of the code generated and replaced the definition for the pin, adding the following:

    {
        PIN_PAD_AY, PIN_MODE(7) | \
        ((PIN_PULL_DISABLE) & (~PIN_PULL_DIRECTION))
    },

    2. I used what was previously in the ti_pinmux_config.c as a base and added the pins as follows:

    {
        PIN_PAD_AY,
        ( PIN_MODE(7) )
    },

    Results:

    1. CHIRP_END and CHIRP_START signals appear to be generated but I cannot measure or detect FRAME_START pulses.

    2. The same results as 1 - CHIRP_END and CHIRP_START pulses appear to be generated but not for FRAME_START.

    Questions:

    1. Is this a correct configuration or am I missing something?

    2. When I measure CHIRP_START with an oscilloscope, the pulse appears to be only a few nanoseconds. I'm not sure if this is a limitation of my scope or if this is expected. How long are generated pulses for these signals meant to be?

    3. Is there any reason why CHIRP_START and CHIRP_END appear to somewhat work but FRAME_START does not?

    Thanks,

    Mark

  • In addition to looking for confirmation on the above being the correct method, can you please help explain the following:

    Why am I seeing 16 additional pulses on the FRAME_START line for a single frame when I should be seeing one? See image below of FRAME_START line when loading a profile configuration to capture a single frame using LVDS and DCA1000EVM.

    Context for above image: this is a custom profile but for a modified version of the profile_LVDS.cfg where number of frames is set to 1 instead of 20, I see similar behavior - rather than 16 additional pulses I measure 12. Important to note, these measurements and results are repeatable.

    The additional pulses can also be measured on the CHIRP_END line. Additional pulses at the beginning when the profile is loaded before the correct number of CHIRP_END pulses.

    Also, to be clear, I have mux'd the FRAME_START line to PIN_PAD_AZ (G15) and the signal works on this line. However, it still does not work on PIN_PAD_AY (R15) and I have no explanation for this - if I'm missing some knowledge on why this is not working it would be greatly appreciated.

    Thanks,

    Mark

  • Hi Mark,

    I am checking on this with all the details shared by you. I will need some time to come up with an update for this. Will try to reply by the end of the week. 

    Thanks,

    Pradipta.

  • Hi Mark,

    Please find my comments below.

    1. Is this expected that adding these 3 new pins to the mss.syscfg, all the files in the TI sysconfig GUI tool (i.e. mssgenerated) remain unchanged?

    Comment) So the "Reserved Peripherals" tab is not linked to the SDK drivers or modules and hence it does not change any source files when you make changes in that tab.

    2. if this part of my configuration is correct, do I need to add something to the mss_main.c file to configure these pins to generate the output pulses?

    Comment) The complete process i will list down as below.

    For enabling say Chirp start signal you will need to make the following modifications. 

        A) In your application code you will need to define this array as below.

    static Pinmux_PerCfg_t gPinMuxMainDomainCfg[] = {
        /* Unused PAD registers configuration - Start */
        {
            PIN_PAD_AD,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_AE,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_AF,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_AG,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_AR,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_BU,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_BV,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_BW,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CT,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CU,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CV,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CW,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CX,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CY,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        {
            PIN_PAD_CZ,
            ( PIN_FORCE_INPUT_DISABLE | PIN_FORCE_OUTPUT_DISABLE )
        },
        /* Unused PAD registers configuration - End */
        {PINMUX_END, PINMUX_END}
    };

     B) Here all the pin mux details are to be mentioned. You can refer to the datasheet for the device and find out the PIN_PAD definition and mode requirements. Once it is enabled in the array you will need to call the  Pinmux_config() function will this new array. Once this API is called then your custom PIN will be configured with the required setting. 

    Adding a pin definition for DSS_UART for example reference.

     /* DSS_UARTA_RX -> PAD_DD (B14) */
        {
            PIN_PAD_DD,
            ( PIN_MODE(1) | PIN_PULL_DISABLE | PIN_SLEW_RATE_LOW )
        },
     

    Thanks,

    Pradipta.

  • Hi Mark,

    Please find my comments below for the pending queries.

    1. Is this a correct configuration or am I missing something?

    Comment) The correct method to configure this has been explained above. Let me know if you have any queries on it. 

    2. When I measure CHIRP_START with an oscilloscope, the pulse appears to be only a few nanoseconds. I'm not sure if this is a limitation of my scope or if this is expected. How long are generated pulses for these signals meant to be?

    Comment) It is expected behavior. The pulse width will be 5nanoseconds.

    3. Is there any reason why CHIRP_START and CHIRP_END appear to somewhat work but FRAME_START does not?

    Comment) Please check if the configuration is done correctly or not. 

    4. Why am I seeing 16 additional pulses on the FRAME_START line for a single frame when I should be seeing one? See image below of FRAME_START line when loading a profile configuration to capture a single frame using LVDS and DCA1000EVM.

    Comment) The device performs the boot time calibrations. In my understanding they are due to calibrations. Can you disable the run time and boot time calibrations and let us know if your observations change or remain the same. 

    5. Also, to be clear, I have mux'd the FRAME_START line to PIN_PAD_AZ (G15) and the signal works on this line. However, it still does not work on PIN_PAD_AY (R15) and I have no explanation for this - if I'm missing some knowledge on why this is not working it would be greatly appreciated.

    Comment) We will need to check this on the bench to confirm this behavior. As per my understanding if the pin is properly configured it should work. 

    Thanks,

    Pradipta.

  • Hi Pradipta,

    Thank you for the response, I have been testing out the proposed solutions on my hardware.

    1. The pinmux configuration is working to enable the pulses on FRAME_START, CHIRP_START and CHIRP_END. FRAME_START does appear to, sort of, work on pin R15. However, I measure a very small voltage on this pin in comparison to G15. Under 400mV measured vs approx. 1.7v on G15.
    2. I have disabled calibrations in the source code, in mss_main.c
      calibrationCfg.u.chirpCalibrationCfg.enableCalibration    = false;
      This appears to solve the additional pulses on FRAME_START line
    3. Point 2 above solves the additional pulses on FRAME_START from the 2nd load of a profile config on. However, I am getting a lot of additional pulses when I load for the first time a profile configuration after a reboot or reset of the AWR2944. Approx. 300+ pulses counted. If calibration is disabled in source code what could be causing these pulses?
    4. I tried modifying calibData in the profile configuration to 1 0 0 but this did not solve point 3 above.
    5. Some additional info for context, which may be important: I have an AWR2944 ES1.0 device and I'm using SDK version 4.03.00.01 (as latest SDK does not support ES1.0 but only ES2.0)

    In terms of priority, I can use FRAME_START on G15 for now so my highest priority is finding the cause of the additional pulses on FRAME_START for the first time load of a profile config after a reboot.

    FRAME_START pulse for 1 frame, no additional pulses - 2nd time loading profile config after a reboot:

    FRAME_START lots of additional pulses (many more not captured on oscilloscope time scale) on the first load of a profile config after a reboot:

    Many thanks,

    Mark

  • Hi Mark,

    As per my understanding when you call the Profile Config API

    you might be calling this with 0 value for PF_CALLUT_UPDATE filed. So this will lead to the RF analog parameters being readjusted via a calibration. 

    Can you confirm if this is 0 or 1 in your case and what is your observation if you make this 1( if it was 0 in your case).

    Thanks,

    Pradipta.

  • Hi Pradipta,

    Thanks for this info.

    I'm struggling to find where this parameter is configured / where I can set the value to 1. I am using the demo source code, focusing on TDM for now (located C:\ti\mmwave_mcuplus_sdk_04_03_00_01\mmwave_mcuplus_sdk_04_03_00_01\ti\demo\awr294x\mmw).

    In rl_sensor.h file I see rlProfileCfg which contains pfCalLutUpdate and this corresponds to the document snippet you shared above.


    I'm using SDK version 4.03.00.01 and I'm not sure where this can be configured. Can you help me find where this can be modified?

    Thanks,

    Mark

  • Hi Mark,

    So, in the demo application it is not feasible to make this change. In Demo application does not incorporate every single feature that the mmwavelink libraries offer. 

    Thanks,

    Pradipta.