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.

[参考译文] AWRL1432BOOST:在 Kick_to_Open 示例代码中添加 CAN 总线功能问题

Guru**** 2463330 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1471227/awrl1432boost-add-can-bus-function-issue-to-kick_to_open-examples-code

器件型号:AWRL1432BOOST

工具与软件:

我们要参考示例代码 radar_toolbox_2_10_00_04-Kick_to_Open

添加了 MMWAVE_L_SDK_05_05_00_02 - drivers\mcan\mcan_external_read_write

但性能似乎不够、无法正常工作! 您是否有任何其他建议或参考资料?

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

    Johnny、

    能否详细介绍一下您遇到的性能问题? 您是否收到任何可以与我们分享的错误消息?

    我在我们的 CAN 专家中循环。  

    谢谢!

    Angie

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

    嗨、Johnny、

    您是否能够测量处理时间、如果可以、是多少? 当 guiMonSel 的第四个参数设置为1时、您应该能够通过 STATS TLV 获取该参数、或直接查看 gMmwMssMCB.outStats.interFrameProcessingTime

    您是否还可以共享您正在使用的配置文件?

    此致、

    Kristien

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

    下面是一个代码片段:

    char *radarCmdString[MAX_RADAR_CMD] = {
        "sensorStop 0 \n\r",
        "channelCfg 3 3 0 \n\r",
        "chirpComnCfg 21 0 0 128 1 34 0 \n\r",
        "chirpTimingCfg 8 20 0 102.98 77 \n\r",
        "frameCfg 2 0 200 128 70 0 \n\r",
        "sigProcChainCfg2 32 32 1 0.6 1.4 25 4 1 1 \n\r",
        "cfarCfg 2 8 3 3 0 7.5 1 0 1 1 0 0 \n\r",
        "aoaFovCfg -80 80 -45 45 \n\r",
        "rangeSelCfg 0.2 3.4 \n\r",
        "cfarMinorMotionCfg 2 8 3 3 7.5 1 \n\r",
        "adcDataSource 0 C:/ti/mmwave_lp_sdk/examples/datapath/common/testBench/gesture_recognition_adc_data/radar_data_35frames.bin \n\r",
        "adcLogging 0 \n\r",
        "boardTiltAngle 0 \n\r",
        "pointCloudEnable 1 \n\r",
        "guiMonSel 1 1 0 1 \n\r",
        "presenceDetectCfg 1 1500 9000 10 \n\r",
        "lowPowerCfg 1 \n\r",
        //"lowPowerCfg 0 \n\r",
        "factoryCalibCfg 1 0 40 0 0x1ff000 \n\r",
        "baudRate 1250000 \r\n",
        "sensorStart 0 0 0 0 \n\r",
    };

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

    嗨、Johnny、

    根据您的配置、手势模式下的处理时间不应超过6ms。 我强烈建议通过 STATS TLV 或检查  gMmwMssMCB.outStats.interFrameProcessingTime 来验证处理时间。 在后一种方法的情况下、您还必须使用 lowPowerCfg 禁用低功耗模式、以确保调试器不会断开连接。

    您是否还检查了通过 CAN 传输数据所需的时间?

    此致、

    Kristien

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

    您的意思是"frameIdleTime"吗?

    static int32_t CLI_MMWaveFrameCfg(int32_t argc, char *argv[])
    {
        /* Sanity Check: Minimum argument check */
        if (argc != 7)
        {
            CLI_write("Error: Invalid usage of the CLI command\n");
            return -1;
        }
    
        /* Populate the frame configuration: */
        gMmwMssMCB.frameCfg.h_NumOfChirpsInBurst = atoi(argv[1]);
        gMmwMssMCB.frameCfg.c_NumOfChirpsAccum   = atoi(argv[2]);
        gMmwMssMCB.burstPeriod                   = atof(argv[3]); // us
        gMmwMssMCB.frameCfg.h_NumOfBurstsInFrame = atoi(argv[4]);
        gMmwMssMCB.frameCfg.w_FramePeriodicity   = ((atof(argv[5])) * gSocClk) / 1000; // x crystal_clk_MHz x 1000
        gMmwMssMCB.frameCfg.h_NumOfFrames        = atoi(argv[6]);
    
        frameIdleTime = (gMmwMssMCB.frameCfg.w_FramePeriodicity * 0.025 - (double)(gMmwMssMCB.burstPeriod * gMmwMssMCB.frameCfg.h_NumOfBurstsInFrame)) / (1000 * 1.0);
        if (frameIdleTime < 16) // Check if the frame idle time is less than 16ms (assuming 5ms for processing and 10ms as set in syscfg for deep sleep)
        {
            flagConditionalSwitch = 1;
        }
    
        if (gMmwMssMCB.frameCfg.h_NumOfBurstsInFrame > 128)
        {
            CLI_write("Error:Max number of bursts supported for this demo is 128\n");
            return -1;
        }
    
        gMmwMssMCB.frameCfg.w_BurstPeriodicity = 10.0 * gMmwMssMCB.burstPeriod;
    
        return 0;
    }

    根据上述计算、 frameIdleTime = 44.4ms

    此外、根据原始样片程序、我将 lowPowerCfg 设置为0、而系统无法正常运行。

    我将测试捕获 CAN 传输所需的时间。

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

    嘿、Johny、

    请在下面查看我的回答:

    您的意思是"frameIdleTime"吗?

    否、frameIdleTime 是 线性调频脉冲之外花费的时间量的估算 这包括处理时间、但也包括可能在低功耗模式下花费的非活动时间。 帧间处理时间 是 测量的处理时间 不是估计值。

    此外、根据原始样例程序、我将 lowPowerCfg 设置为0、系统无法正常运行。

    要了解、在这种情况下、我建议使用下的雷达工具箱应用可视化工具 /tools/visualizers Applications_Visualizer / Body_And_Chassis_Visualizer /并启用将数据保存到文件的功能。 然后、您可以保持 lowPowerCfg 设置为1、但确保 guiMonSel 的最后一个参数设置为1、从而输出统计信息 TLV。 该值将保存到 binData 文件夹中。

    此致、

    Kristien

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

    如何计算处理时间= 6ms?

    通过 CAN 发送数据需要476 us。

    谢谢!

    ///========= //

    uint32_t i100,iProcessingTime; Stamp_Start
    iLAN Stamp_Start = Cycleprofiler_getTimeStamp();

    app_mcanTxRx();

    iProcessingTime =(Cycleprofiler_getTimeStamp ()- i441)/FRAME_REF_TIMER_CLOCK_MHZ Stamp_Start;
    CLI_WRITE ("Johnny:处理时间为:%d us。 \n",iProcessingTime);

    ///========= //

    Johnny:处理时间是:476 us。  

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

    根据设置、CAN 总线处理时间似乎太长、导致传输 COM 端口超时、binData 文件夹中没有生成数据。

    我现在没有其他想法。 是否有其他方法可以解决此问题? 谢谢!

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

    嗨、Johnny、

    如何计算处理时间= 6ms?

    处理时间的计算方法是、在线性调频脉冲结束并生成雷达立方体后立即获取时间戳( interFrameStartTimeStamp、然后再执行所有 DPU)。 然后、它在执行最终 DPU 后获取一个时间戳、并从该时间戳中减去初始时间戳以获得总处理时间。 对于脚踢开启、处理时间不包括分类器处理、但分类步骤在这里几乎没有作用。

    根据设置、CAN 总线处理时间似乎太长、导致传输 COM 端口超时、binData 文件夹中未生成数据。

    控制台中显示的误差可能不是由于 CAN 传输时间(如果它只花费大约500us)所致。 CAN 消息到底何时发送?即、是在 UART 之前或之后调用 App_mcanTxRx? 您可以设置在 UART 完成传输后发送的 CAN 消息。

    此致、

    Kristien

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

    在 UART 之后调用 APP_mcanTxRx、但它确实会导致无法识别脚踢、从板上的 LED 闪烁、可以看到、在处理 CAN 总线时、LED 实际上已暂停!

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

    嗨、Johnny、

    应在计算 demoEndTime 并提供 gPowerSem 之前执行 APP_mcanTxRx、以确保帧速率(从而检测速率)不受 CAN 总线传输时间的影响。 请验证是否就是这种情况。

    但是、如果 CAN 传输时间仅为476us、则对踢脚检测的影响应该可以忽略不计。

    此致、

    Kristien

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

    我按照建议的位置操作、但收到一条错误消息

    "错误:没有足够的时间进入低功耗模式。"

    检查"demoTimeus"值。

    正常状态:

    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:41480.000000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:412000000 97.us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:41327.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:41144.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:12474.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:41175.000000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:41327.500000 us。

    打开 App_mcanTxRx()状态:  

    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:2597000000 38.us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:308507.500000 us。
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:259555.000000 us。
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:308294.000000 us.
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:259341.500000 us。
    Johnny:slpTimeus:0.000000 us、frmPrdus:500000.000000 us、demoTimeus:309056.500000 us。
    Johnny: slpTimeus:0.000000 us, frmPrdus:500000.000000 us, demoTimeus:12932.000000 us.
    Johnny: slpTimeus:0.000000 us, frmPrdus:70000.000000 us, demoTimeus:12932.000000 us.
    Johnny:slpTimeus:0.000000 us、frmPrdus:70000.000000 us、demoTimeus:288316.500000 us。
    错误:没有足够的时间进入低功耗模式。

    我尝试调整"frameCfg 2 0 200 128 70 0 \n\r"、 第五个参数没有改善。

    12932 - 12474.5 = 457.5us (CAN 传输时间)

    CAN 总线处理程序似乎没有固定的时间。

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

    我目前没有其他想法来解决这个问题、您还有其他建议吗? 谢谢!

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

    嗨、Johnny、

    您尝试传输的每一帧的确切内容是什么? 在存在模式下发送的内容与手势模式下发送的内容是否存在差异? 时间不足之前的最后一帧似乎意味着在存在模式下发送的数据量与手势帧相同。  

    此致、

    Kristien

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

    它仅通过 CAN 总线获取车速数据。 这只是最基本的命令。

    手势识别是否只能通过 UART 数据传输来执行、而其他接口没有足够的性能来执行?