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.

[参考译文] AWR1843:毫米波 SDK CBUFF 单元测试项目不能在 AWR1843BOOST EVM 上生成 LVDS 流输出

Guru**** 2564565 points
Other Parts Discussed in Thread: AWR1843BOOST

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/857499/awr1843-mmwave-sdk-cbuff-unit-test-project-doesn-t-generate-lvds-stream-output-on-awr1843boost-evm

器件型号:AWR1843

各位专家、您好!

我们正在设计轻量级 HIL 板、并计划调用 CBUFF 驱动器来配置传感器、使其通过 LVDS 输出 ADC (和用户数据)。

我 正在使用 CCS 和 XDS110调试器在毫米波 SDK 目录中运行 CBUFF 单元测试项目:

C:\ti\mmwave_sdk_03_01_02\packages/ti\drivers\cbuff \test\xwr18xx

该项目在 AWR1843BOOST 上编译和运行、而不记录任何 MCPI (单元测试)故障。

但是、如果我使用300MHz 示波器在 J1 (HD_CONN)连接器中探测任何 LVDS 通道、则每个 CBUF_activateSession()只有单脉冲(T=11us)一次、而我假设时钟通道至少应输出150MHz-450MHz 的连续时钟波形。

当我更深入地调试软件时,我发现从未调用过 CBUF_ISR()或 CBUF_ErrorISR()。 单元测试项目似乎只是检查一些高级 API、而不是测试整个 IP。

我的问题:

这是 CBUFF 测试项目的预期行为吗? 或者我是否错过了任何内容? (EVM 上的跳线、编译选项...)

2.是否有启动器演示项目来准备 LVDS 在 AWR1843BOOST 上工作、以便我们的硬件工程师至少可以在示波器中捕获 LVDS 波形?

PS:DCA1000未考虑在内、因为捕获设备应安装在车辆保险杠上。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以下是基于 CBUFF 单元测试项目中现有测试用例的新测试用例、它也不会在总线上生成 LVDS 波形:
    Int32_t Test_UserSwBuffer
    (
        SoC_Handle      socHandle、
        EDMA_Handle     edmaHandle
    )
        CBUF_SessionCfg    sessionCfg;
        CBUF_Handle        cbuffHandle;
        CBUF_InitCfg       initCfg;
        int32_t             错误代码;
        CBUF_SessionHandle SessionHandle;
        字符                testMessage[256];

        /* 调试 消息: */
        System_printf ("系统_printf ")("---------------------------------------- \n");
        System_printf ("调试: 测试 无效 的数据 大小 故障\n");
        System_printf ("系统_printf ")("---------------------------------------- \n");

        /* 初始化  配置: */
        memset ((void*)&initCfg、 0、 sizeof (CBUFF_InitCfg));

        /* 填充  配置: */
        initCfg.socHandle                = socHandle;
        initCfg.outputDataFmt            = CBUF_OutputDataFmt_16位;
        initCfg.enableECC                = 0U;
        initCfg.crcEnable                = 0U;
        initCfg.enableDebugMode          = true;
        initCfg.MaxSessions              = 2U;
        initCfg.interface                = CBUF_Interface_LVDS;
        initCfg.u.lvdsCfg.crcEnable      = 0U;
        initCfg.u.lvdsCfg.msbFirst       = 1U;
        initCfg.u.lvdsCfg.ddrClockMode   = 1U;
        initCfg.u.lvdsCfg.ddrClockModeMux= 1U;

        // 设置  通道: 此 配置   是特定于平台 的*/
    #ifdef SOC_XWR14XX
        initCfg.U.lvdsCfg.lvdsLaneEnable = 0xFU;
    其他
        initCfg.U.lvdsCfg.lvdsLaneEnable = 0x3U;
    #endif

        /* 初始化  CBUFF 驱动程序: */
        cbuffHandle = CBUF_init (&initCfg、 &errCode);
        if (cbuffHandle == NULL)
        {
            System_printf ("错误: CBUFF 驱动 程序初始化 失败 [错误 代码 %d]\n"、 错误代码);
            返回 -1;
        }

        /* 初始化  配置 */
        memset ((void*)&sessionCfg、 0、 sizeof (CBUFF_SessionCfg));

        /* 创建  MCPI 测试 消息: */
        sprintf (testMessage、 "CBUFF: 无效 的最小 数据 大小 测试");

        int i;
        对于 (i = 0; i < sizeof (gLichPacketPayload); i++)
        {
            gLichPacketPayload[i] = I & 0x000000FFu;
        }

        /* 填充  配置: */
        sessionCfg.ExecutionMode                      = CBUF_SessionExecuteMode_SW;
        sessionCfg.edmaHandle                         = edmaHandle;
        sessionCfg.allocateEDMAChannelFxn             = Test_EDMAAllocateCBUFFChannel;
        sessionCfg.freeEDMAChannelFxn                 = Test_EDMAFreeCBUFFChannel;
        sessionCfg.datatype                           = CBUF_datatype_complex;
    #if 0  
        sessionCfg.u.swCfg.userBufferInfo[0].size     = sizeof (My_PacketHeader) /2U ;
        sessionCfg.u.swCfg.userBufferInfo[0].address  = (uint32_t)&gMyPacketHeader;
        sessionCfg.u.swCfg.userBufferInfo[1].size     = sizeof (gMyPacketPayload) /2U ;
        sessionCfg.u.swCfg.userBufferInfo[1].address  = (uint32_t)&gMyPacketPayload[0];
    其他
        /* 仅 发送  有效载荷 */
        sessionCfg.u.swCfg.userBufferInfo[0].size     = sizeof (gMyPacketPayload) /2U ;
        sessionCfg.u.swCfg.userBufferInfo[0].address  = (uint32_t)&gMyPacketPayload[0];
    #endif

        /* 打开  CBUFF 驱动程序: */
        SessionHandle = CBUF_createSession (cbuffHandle、 &sessionCfg、 &errCode);
        if (SessionHandle ==空 )
        {
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
            返回 -1;
        }

        /* 打开 失败: 验证  错误 代码 */
        if (错误代码 != 0)
        {
            System_printf ("错误: CBUFF 打开 失败 、错误    代码 %d\n"、 错误代码);
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
        }
        其他
        {
            /* 测试 通过 ,并显示  有效 的错误 代码 */
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_pass);
        }

        /* 激活  会话: */
        if (CBUF_activateSession (SessionHandle、 &errCode) < 0)
        {
            System_printf ("错误: 无法  激活  会话 [错误 代码 %d]\n"、 错误代码);
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
            返回 -1;
        }

        /* 睡眠   一段时间 */
        volatile int delay = 0;
        对于 (延迟 = 0; 延迟 < 1000000; 延迟++);

        /* 从       CBUFF 驱动程序获取当前活动会话: */
        IF (CBUF_CONTROL (cbuffHandle、
                           CBUF_Command_GET_CBUF_STATS、
                           (void*) gCbuffStats (&G)
                           sizeof (CBUF_Stats)、
                           错误代码) < 0)
        {
            System_printf ("错误: 无法  获取 CBUFF 统计数据 [错误: %d]\n"、 错误代码);
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
            返回 -1;
        }

        /* 取消激活  会话: */
        if (CBUF_deactivateSession (SessionHandle、 &errCode) < 0)
        {
            System_printf ("错误: 无法  停用  会话 [错误 代码 %d]\n"、 错误代码);
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
            返回 -1;
        }

        /* 删除  会话: */
        if (CBUF_deleteSession (SessionHandle、 &errCode) < 0)
        {
            System_printf ("错误: 无法  删除  会话 [错误 代码 %d]\n"、 错误代码);
            MCPI_setFeatureTestResult (testMessage、 MCPI_TestResult_FAIL);
            返回 -1;
        }

        /* 取消初始 化并 关闭  CBUFF: */
        if (CBUF_deinit (cbuffHandle、 &errCode) < 0)
        {
            System_printf ("调试: CBUFF 驱动 程序 deinit %s 失败 [错误 代码 %d]\n"、 错误代码);
            返回 -1;
        }
        返回 0;
    测试结果:
    EDMA 通道0按预期激活和完成、因为我可以看到在调用 CBUF_activateSession 后 IPR 寄存器位0有效。
    CBUFF 帧头和 ChirpDone 中断无效、因为我可以看到 ISR 未被调用、STAT_CBUFF_REG0始终为0x00000000
    CBUFF 的统计数据全部为零
    4.当 CBUFF 会话激活时、所有 LVDS 通道(CLK、FRCLK、D0、D1)输出单个脉冲(与 SDK 中的现有测试用例相同)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hawk

    是的、CBUFF 单元测试仅用于 API 检查。

    要在 LVDS 通道上获得输出、除了您在代码片段中编程的内容外、还需要通过 mmwavelink API rlDeviceSetHsik()启用高速时钟。 有关此 API 和 LVDS 的一般用法、请参阅 mmw 演示(在调用 API 之前、您至少需要初始化邮箱并初始化/同步/打开毫米波)。  

    如果您的设置允许、您可以按原样启动毫米波演示、并使用 CFG 文件仅传输 S/W 会话/数据。 此外,您还可以更新 MMW_LVDS_STREAM.c 中的函数 MmwDemo_LVDSStreamSwConfig()(适用于您的器件/演示),以传输具有已知模式的缓冲区而不是检测到的对象。

    -Madhvi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Madhvi、

    感谢您提供相关信息。

    根据您的反馈、我从 毫米波 SDK 2.0中合并了 MmwDemo_mssSetHsClk (称为 rlDeviceSetHsClk)、目前正在调试新应用。

    它是否起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Madhvi、

    是的、在 SDK3.0演示中初始化 DPC 后、我们通过调用 rlDeviceSetHsik()来获得 LVDS 通道上的输出。

    谢谢。