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.

AWR2944EVM: 传感器论坛

Part Number: AWR2944EVM
Other Parts Discussed in Thread: AWR2944

工程师,你好

最近在使用AWR2944EVM,想对AWR2944的Tx phase shifter进行校准。看过了相关的文档,如 SPRACV2, Cascade Coherency and Phase Shifter Calibration.pdf和2043.mmWave-Radar-Interface-Control.pdf,文档中提到了关于(1243、1642、1843以及2243)的校准方法,并提到了一些用于校准的API。其中2243和前者所使用的API不完全相同,那AWR2944的校准是否同2243呢?还有,在文档中提到的相关的的API,我在SDK的代码里面并不能找到相关的声明或定义,但是在有些函数的说明注释中可以看到如下所示的注释。请问AWR2944是否使用函数代替了上述文档中提到的API呢?能否提供关于AWR2944的Tx phase shifter 校准的相关文档呢?或者能否提供相关的校准流程。

/* Sub block ID: 0x0089, ICD API: AWR_RF_INIT_CALIBRATION_CONF_SB */
谢谢
  • 你好,

    关于自校准,请参考下面的文档:

    Self-Calibration of mmWave Radar Devices (Rev. B)

    mcu plus sdk的代码,请参考MMWave_openLink函数里rlRfInitCalibConfig相关代码。

  • 你好,

    我看了一下Self-Calibration of mmWave Radar Devices (Rev. B,这个文档里面主要讲了一些用于自校准的API,和相关的注意事项。对于Tx phase shifter的校准并没有很详细的流程(或者说详见Cascade Coherency and Phase Shifter Calibration application note)。想问一下AWR2944的Tx phase shifter的校准流程是不是和2243的校准流程相似。上述文档中提供了两种校准的方法,1.使用RF_INIT(),我在sdk里面找到的对应的函数为rlRfInit(),2.使用角反进行校准。有几个问题想要问一下,根据文档描述,Tx phase shifter的calibrate data应该包含3个chunk,对应TX0、TX1、TX2三个发射天线,在SDK的代码里面也是这么描述的,可是AWR2944有4个TX天线,请问是否需要做相应的修改? 2.在使用RF_INIT函数后,是否会自动存储Tx phase shifter的calibrate data,或者我需要去哪里读取相关的数据以及将相关的数据读取到什么地方。以及关于使用RF_INIT时的前端设置,最后的数据是每个TX天线对应phase shift index(0~63)的数据,请问我是否需要配置相应相移的chirp,以及配置多个Tx天线用于发送chirp,还是sdk有相关的算法。在RF_INIT执行结束后,并将相关的校准数据存入到flash后,在下次power up的时候,是否调用rlRfPhShiftCalibDataRestore函数将校准数据从flash中读取出来即可,后续的校准流程还需要我做什么吗?SDK里面将saveEnable和restoreEnable都设置为0,请问是默认没有进行校准吗?

    mcu plus sdk的代码,请参考MMWave_openLink函数里rlRfInitCalibConfig相关代码。

    这里面的相关代码是对校准的相关配置,即将rfInitCalib中相关校准的使能情况发送出去。

    RF_INIT方法的相关描述如下

    谢谢

  • 1.使用RF_INIT(),我在sdk里面找到的对应的函数为rlRfInit(),2.使用角反进行校准。有几个问题想要问一下,根据文档描述,Tx phase shifter的calibrate data应该包含3个chunk,对应TX0、TX1、TX2三个发射天线,在SDK的代码里面也是这么描述的,可是AWR2944有4个TX天线,请问是否需要做相应的修改?

    这个文档是在AWR2944芯片出来前写的,之前的毫米波芯片最多只有3TX。4个TX的AWR2944在原来是是一致的,用户不需要做修改,AWR2944的firmware会支持4个TX的相位校准。

    2.在使用RF_INIT函数后,是否会自动存储Tx phase shifter的calibrate data

    是的。

    或者我需要去哪里读取相关的数据以及将相关的数据读取到什么地方。以及关于使用RF_INIT时的前端设置,最后的数据是每个TX天线对应phase shift index(0~63)的数据,请问我是否需要配置相应相移的chirp,以及配置多个Tx天线用于发送chirp,还是sdk有相关的算法。在RF_INIT执行结束后,并将相关的校准数据存入到flash后,在下次power up的时候,是否调用rlRfPhShiftCalibDataRestore函数将校准数据从flash中读取出来即可,后续的校准流程还需要我做什么吗?

    如果你需要在工厂预先存储相关校准数据,芯片运行时不校准而是加载预先存储的校准数据,就需要在工厂调用save calibration data的函数。把相关数据存储在flash上,在芯片上电后通过restore来加载预先存储的校准数据。

  • 你好

       现在关于flash的读写正常了。在mmwave_link_mailbox.c中原来只调用了函数rlRfCalibDataRestore(),没有对Tx phase shifter calibrate data进行restore,我看到在另外一个文件mmwave_link_spi_22xx.c中调用了函数rlRfPhShiftCalibDataRestore(),我仿照mmwave_link_spi_22xx.c中的相关代码,在mmwave_link_mailbox.c中调用完rlRfCalibDataRestore()后执行函数rlRfPhShiftCalibDataRestore(),编译没有报错,但是在上电后板子就失去响应了,单独调用rlRfCalibDataRestore()可以正常执行,单独调用rlRfPhShiftCalibDataRestore(),在上电后板子初始化的过程中会出现exception。如何实现在板子上电后restore存放在flash中的Tx phase shifter calibratedata?

    exception

     if (ptrCalibrationData != NULL)
        {
    
            if (ptrCalibrationData->ptrCalibData != NULL)
            {
                /* YES: Restore the calibration data */
                retVal = rlRfCalibDataRestore(RL_DEVICE_MAP_INTERNAL_BSS, ptrCalibrationData->ptrCalibData);
                if (retVal != RL_RET_CODE_OK)
                {
                    /* Error: Calibration data restore failed */
                    *errCode = MMWave_encodeError (MMWave_ErrorLevel_ERROR, MMWAVE_ECALFAIL, retVal);
                    retVal   = MINUS_ONE;
                    goto exit;
                }
    
                /* As per the Link documentation; radarSS will consume the data and will send an
                 * asynchronous message to indicate the result of the calibration based on the
                 * calibration data which has been restored. So we need to wait on the status of
                 * the operation. */
               // CLI_write("wait for sync signal\r\n");
                MMWave_internalLinkSync(ptrMMWaveMCB, MMWAVE_RF_INITIALIZED | MMWAVE_RF_INIT_FAILED);  //wait for radarss to be calibrated
                //CLI_write("off wait\r\n");
                /* Was the calibration restored succesfully? */
                if (ptrMMWaveMCB->linkStatus[0] & MMWAVE_RF_INIT_FAILED)
                {
                    /* NO: Calibration was not restored. The asynchronous message has been
                     * passed to the application too. Setup the error code */
                    *errCode = MMWave_encodeError (MMWave_ErrorLevel_ERROR, MMWAVE_ECALFAIL, 0);
                    retVal = MINUS_ONE;
                    goto exit;
                }
    
                /* Calibration was restored successfully so we need to reset the link operational
                 * status again. */
                ptrMMWaveMCB->linkStatus[0] = 0U;
            }
    
             if (ptrCalibrationData->ptrPhaseShiftCalibData != NULL)
            {
                /* User should have set txIndex equal to PhShiftcalibChunk array index when calling
                   rlRfPhShiftCalibDataStore() so that data for all Tx are obtained regardless of
                   channels enabled in chCfg. However, phase shift data will be non-zero only
                   for Tx channels that are enabled in chCfg */
                if ((ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[0].txIndex != 0) ||
                    (ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[1].txIndex != 1) ||
                    (ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[2].txIndex != 2))
                {
                     // CLI_write("ERROR FLAG 10\r\n");
                    *errCode = MMWave_encodeError (MMWave_ErrorLevel_ERROR, MMWAVE_EPHASESHIFTCALDATARESTOREFAIL, 0);
                    retVal   = MINUS_ONE;
                    goto exit;
                }
                /* User should not set calibApply to 1 for any Tx. rlRfPhShiftCalibDataRestore() will take care of
                   it internally */
                if ((ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[0].calibApply != 0) ||
                    (ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[1].calibApply != 0) ||
                    (ptrCalibrationData->ptrPhaseShiftCalibData->PhShiftcalibChunk[2].calibApply != 0))
                {
                      //CLI_write("ERROR FLAG 11\r\n");
                    *errCode = MMWave_encodeError (MMWave_ErrorLevel_ERROR, MMWAVE_EPHASESHIFTCALDATARESTOREFAIL, 0);
                    retVal   = MINUS_ONE;
                    goto exit;
                }
                /* Basic validation passed: Restore the phase shift calibration data */
                //retVal = rlRfPhShiftCalibDataRestore(ptrMMWaveMCB->deviceMap, ptrCalibrationData->ptrPhaseShiftCalibData);
                retVal = rlRfPhShiftCalibDataRestore(RL_DEVICE_MAP_INTERNAL_BSS, ptrCalibrationData->ptrPhaseShiftCalibData);
                if (retVal != RL_RET_CODE_OK)
                {
                      //CLI_write("ERROR FLAG 12\r\n");
                    /* Error: Phase shift Calibration data restore failed */
                    *errCode = MMWave_encodeError (MMWave_ErrorLevel_ERROR, MMWAVE_EPHASESHIFTCALDATARESTOREFAIL, retVal);
                    retVal   = MINUS_ONE;
                    goto exit;
                }
                //CLI_write("TX phase shift calibrate data restore done\r\n");
            }

  • 你好,

    在你尝试restore calibration data的时候,你是否有使能useCustomCalibration,使用cali mask 0,也就是不做calibration。然后在rfinit前restore data?

  • 你好,

    我现在已经可以正常的对存在flash中的数据restore。接下来要获得Tx phase shift calibration data ,考虑在暗室中使用角反测量获得校准数据。有如下几个问题想要问您一下
    1.是否要将天线配置成单发,即只使能一个Tx;如果是,请问是不是需要在TDM模式下,对移相器的相移进行测量,DDM模式下要求配置的最少的天线的数量为2,有没有将TX数量配置为1的相关PROFILE?
    2.调用什么函数可以对chirp sequence 进行相移,是否需要一次配置(index :0~63)的64个chirp?
    3.在获得Tx phase shift calibration data 之后,在代码层面,是怎么实现对移相器进行校准的?即具体是怎么执行校准的。
    4.得到的校准矩阵的格式observedPhShiftData[128],每一个index对应着两位,是否表示实部和虚部,在文档中有提到关于TX1,TX2,TX3的数据存放格式,那对于2944的4个TX的顺序应该是什么样的
  • 我现在已经可以正常的对存在flash中的数据restore。

    能否分享一下之前问题是如何解决的么?

    对于TX phase shifter calibration,文档《 SPRACV2, Cascade Coherency and Phase Shifter Calibration》里给出了两种方法的建议。二选一。

    使用芯片内部校准获得的数据,后续代码不需要做特别处理。

    如果是使用角反(第二种)的方法,请参考4片级联的做法。请下载mmwave studio 3.0.0.14,查看matlab example下的相关文档。

  • 你好

    之前可能是我自己在别的地方加的宏定义的影响,导致restore失败。

    我现在在TDM模式下,将天线配置为1发4收,请问如何配置一个chirp sequence对应(0~360的相移),共64个chirp。还是一次只配置一个TX phase shift参数,分64次进行测量?

  • 你好,

    你是要尝试第二种方法对么?

    如果是,我之前提到的4片级联tx phase校正的文档和代码,你有参考过么?

    mmwave_studio_03_00_00_14/mmWaveStudio/MatlabExamples/AWRx_TX_Channel_Calibration_Script_User_Guide.pdf/signal_processing_4chip_cascade.pdf

    mmwave_studio_03_00_00_14\mmWaveStudio\Scripts\Cascade\Cascade_Phase_Shifter_Calibration_AWRx.lua

  • 你好

    是的,打算使用第二种校准的方法。我看了一下您提供的两篇PDF以及lua程序。参考Lua程序中的chirp配置,我将2944配置为TDM模式,同时使能4个Tx天线,配置4个同相的chirp分别在4个天线上发射。参考了一下您提供的文档,小结如下

    1.由ADC的原始数据,或1D FFT的结果得到每个虚拟通道上的角反所在的位置,得到4*4的包含相位信息的矩阵

    2.在文档AWRx_TX_Channel_Calibration_Script_User_Guide.pdf,取某TXn天线对应的虚拟天线上相移的平均值或取单虚拟天线上的相移作为该TX上的相移,并与相移为0的情况对比得到相对相移。

    3.在文档signal_processing_4chip_cascade.pdf中,将测量得到的16个虚拟天线上的相位信息和TX0RX0做归一化处理,得到校准矩阵。

    4。最后,在AWRx_TX_Channel_Calibration_Script_User_Guide中,使用matlab代码生成LUT文件,对此,2944的4个天线的LUT要怎么排部。文档中所说的是3个TX,

    5.存储到flash中

  • 将测量得到的16个虚拟天线

    是12根实际的发射天线,不是虚拟天线。

    2944的4个天线的LUT要怎么排部。文档中所说的是3个TX

    文中用的是12个发射天线。

  • 你好

    chirp的phase shift需要怎么配置呢?我现在想配置为TDM模式,同时使能4个Tx天线,配置4个chirp分别在4个天线上发送,chirp的相移相同。请问该如何配置chirp的相移呢?可以直接在profilecfg中的第八位<txPhaseShifter>配置TX的相移吗,还是自己定义四个rlRfPhaseShiftCfg_t类型的结构体并对其赋值,然后调用函数MMWave_addPhaseShiftChirp();如果是后者,应该在什么时候或函数里面对结构体的内容进行赋值,是否能在MMWave_configLink()函数中在调用函数MMWave_configPhaseShift()前对结构体进行赋值?

  • 你好,

    请问你的问题是获取TX相位校准数据的配置还是你实际应用的配置?

  • 你好

    获取TX相位校准数据的配置,还有一个问题,在绝对路径为C:\ti\mmwave_mcuplus_sdk_04_02_00_02\mmwave_mcuplus_sdk_04_02_00_02\ti\control\mmwavelink\include\rl_sensor.h中的结构体rlRfPhaseShiftCfg_t中没有tx3PhaseShift的相关定义,在绝对路径为C:\ti\mmwave_mcuplus_sdk_04_02_00_02\mmwave_dfp_02_04_03_01\ti\control\mmwavelink\include\rl_sensor.h中有相关的定义,但是demo里面使用的文件包含方式为相对路径包含,是否需要包含dfp路径下面的头文件

  • 你好,

    TI 4片级联获取TX相关校准使用的是MIMO配置,请再看看Cascade_Phase_Shifter_Calibration_AWRx.lua。

    第二个问题,目前sdk对TX3 phaseshift还没有很好的支持,你可以修改相关代码。