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.

[参考译文] TDA2SX:相关问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1220181/tda2sx-related-issue

器件型号:TDA2SX
主题中讨论的其他器件:TDA2

您好、 这位客户对我们非常重要、可以在这个问题上提供帮助吗?

      (__LW_AT__基于(processor_SDK_radar_03_08_00_00)框架)

      我在 IPU1_0内核中初始化, 了 McSPI,我使用 utils_mcspi.c 文件中的 API、该 API 工作   正常。当我在 IPU1_1上调用相同的代码时 、 代码编译正常通过、但在启动期间有一个例外、代码启动阶段会在日志"将 MPU 置于保留状态..."之后停止 。μ A

      我尝试了以下修改  

      (__LW_AT__1)将  utils_mcspi.c  \添加 到 文件 vision_sdk\links_fw\src\rtos\utils_common\src\SRC_files.mk 的 SRCS_ipu1_1中  

      (__LW_AT__2)将 ipu1_1添加 到 文件 ti_components\drivers\pdk_01_10_04_05\packages\ti\drv\bsp_lld\mcspi\bsp_mcspi_mcspi_component.mk 中的 bspi_mcspi_component.mk  

      但两种操作都不起作用。

      那么、如何在 IPU1_1内核中使用 McSPI? 您能给我一些指导和建议吗?  谢谢你。

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

    仅在 IPU1_0上对驱动程序进行了测试。 我们不支持在 IPU1_1上运行驱动程序。

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

    大家好、

    客户正在使用 TDA2的以太网特性、最初 PROCESSOR_RADA_SDK 的默认 NDK 在 IPU1_1上运行、现在需要使用 TCP 将大量数据传输到 PC、因此客户定义了 NDK 以在 A15_0的内核中运行。
    网络1000Mbps 速率协商正常、TCP 连接正常、但吞吐率太慢、在使用 wirShake 捕获数据包后发现。 发送4MB 数据时、90KB 到100KB 数据的连续帧丢失、从而导致这些帧持续重新传输。 除了丢失这些帧之外、其余数据均正常传输。

    主要做出以下更改:

    1.在 tda2xx_CASCAAD_BIOS_RADAR 目录中的 cfg.mk 文件中、设置 NDK_PROC_TO_USE=A15_0

    2.在用例中重新生成关联的 privi.c 和 priv.h 文件,主要将 NetworkTx (IPU1_1)修改为 NetworkTx (A15)

    3.按照如下方式在文件 mem_segment_defination_BIOS.xs 中根据需要调整 NDK_DATA_SIZE 和 A15_0_DATA_SIZE:

    /*
    *=========== MEM_SEGM_DEFINITION_xs =========
    *=========== 用于所有内核的内存映射配置的单个文件=========
    */

    函数 getMemSegmentDefinition_external (CORE)

    KB=1024;
    MB=KB*KB;

    DDR3_ADDR = 0x80000000;
    DDR3_SIZE = 512*MB;

    /*
    *对于 ECC_FFI_Include、DDR3_BASE_ADDR_1和 DDR3_BASE_SIZE_1
    *硬编码为 gIpcNonCachedDataAddr 和的值
    * Ipu1_0.cfg 中的 gIpcNonCachedDataSize
    *如果此 ddr3_base_size_0被改变,更新 Ipu1_0.cfg
    */
    DDR3_BASE_ADDR_0 = DDR3_ADDR;
    ddr3_base_size_0 = 507*MB;

    //*第二个存储器段的起始地址应是16MB 对齐的。
    *此对齐必须为 EVE 使用单个16MB 映射
    *映射 SR0、REMOTE_LOG_MEM 段。
    * tlb_config_eveX.c 否则需要修改
    */
    DDR3_BASE_ADDR_1 = DDR3_BASE_ADDR_0 + DDR3_BASE_SIZE_0;
    ddr3_base_size_1 = ddr3_size - ddr3_base_size_0;
    //if (core="ipu1_1"|| core="ipu1_0"|| core="ipu1_0"|| core="ipu2"|| core="a15_0")
    //{
    /*对于 ipu1_0、ipu1_1、ipu2 ddr3_base_ADDR_1应该为
    *在非缓存的虚拟地址中
    * ddr3_base_ADDR_1 + 512*MB
    */
    DDR3_BASE_ADDR_1 = DDR3_BASE_ADDR_1+512*MB;
    //}

    DSP1_L2_SRAM_ADDR = 0x40800000;
    DSP1_L2_SRAM_SIZE = 288*KB;

    DSP2_L2_SRAM_ADDR = 0x41000000;
    DSP2_L2_SRAM_SIZE = 288*KB;

    EVE1_SRAM_ADDR = 0x42000000;
    EVE1_SRAM_SIZE = 1*MB;

    EVE2_SRAM_ADDR = 0x42100000;
    EVE2_SRAM_SIZE = 1*MB;

    EVE3_SRAM_ADDR = 0x42200000;
    EVE3_SRAM_SIZE = 1*MB;

    EVE4_SRAM_ADDR = 0x42300000;
    EVE4_SRAM_SIZE = 1*MB;

    TOTAL_MEM_SIZE =(DDR3_SIZE);

    /*前512 MB -缓存*/
    /* EVE 矢量空间应与16MB 边界对齐,如果可能,应尝试拟合
    *整个 vecs+code+data 在16MB 部分。 在这种情况下、单个 TLB 映射将
    *足够映射 EVE 的 vecs+code+data。
    如果这些 EVE 存储器部分或中的任何部分、则需要修改* tlb_config_eveX.c
    * SR1_FRAME_BUFFER_MEM 段已修改。
    */

    /* EVE 自分支指令块- EVE1_VECS
    *在 SBL 中,如果没有用于 EVE 的 AppImage ,则插入 EVE 自分支指令@ 0x8000000。
    *此操作会覆盖0x80000000处加载的代码/数据。
    *所以在 DDR 的开头保留一个小内存块@0x8000 0000 For
    *如果 EVE 没有 AppImage、则执行 EVE 自我分支指令。
    *如果 EVE 启用、则 EVE VES/数据/代码被放置@0x8000 0000、
    *因此我们没有发现任何问题。
    *如果 EVE 被禁用、那么也不要删除此 EVE1_VECS 章节@0x8000000、
    *如果没有用于 EVE 的 AppImage。 此操作会覆盖0x80000000处加载的代码/数据
    */

    EVE1_VECS_SIZE = 0.5*MB;
    eve1_code_size = 2*MB;
    EVE1_DATA_SIZE = 13.5*MB;
    EVE2_VECS_SIZE = 0.5*MB;
    EVE2_CODE_SIZE = 2*MB;
    EVE2_DATA_SIZE =13.5*MB;
    EVE3_VECS_SIZE = 0.5*MB;
    EVE3_CODE_SIZE = 2*MB;
    EVE3_DATA_SIZE =13.5*MB;
    EVE4_VECS_SIZE = 0.5*MB;
    EVE4_CODE_SIZE = 2*MB;
    EVE4_DATA_SIZE =13.5*MB;
    NDK_DATA_SIZE = 8*MB;

    if (java.lang.System.getenv ("ECC_FFI_Include")="yes")

    IPU1_1_CODE_SIZE = 2.5*MB;
    IPU1_1_DATA_SIZE = 12.5*MB;
    IPU1_0_code_size = 6*MB;
    IPU1_0_DATA_SIZE = 12*MB;
    }
    方案

    IPU1_1_CODE_SIZE = 2.5*MB;
    IPU1_1_DATA_SIZE = 12.5*MB;
    IPU1_0_code_size = 6*MB;
    IPU1_0_DATA_SIZE = 16*MB;
    }
    IPU2_code_size = 2*MB;
    IPU2_DATA_SIZE = 7*MB;
    DSP1_CODE_SIZE = 6*MB;
    DSP1_DATA_SIZE = 14*MB;
    DSP1_DATA_SIZE_2=1*MB;
    dsp2_code_size = 4*MB;
    dsp2_data_size = 14*MB;
    dsp2_data_size_2 = 1*MB;
    /* a15_0_code_size 减小、因为它未在.bld 文件中使用。
    *查看.bld 以了解详细信息。 最初为2 + 14 MB。
    */
    a15_0_data_size = 43.5*MB;
    if (java.lang.System.getenv ("OpenCL_include")=="yes")

    A15_0_DATA_SIZE_INC = 101*MB /*单位 MB */
    A15_0_DATA_SIZE =(A15_0_DATA_SIZE + A15_0_DATA_SIZE_INC);
    }

    if (java.lang.System.getenv ("ECC_FFI_Include")="yes")

    /*确保 ECC 区域为64KB 对齐*/
    SR1_FRAME_BUFFER_SIZE = 297.5*MB;
    SR1_buff_ecc_ASIL_size = 1*MB;
    SR1_buff_ECC_QM_size = 40*MB;
    SR1_buff_non_ECC_ASIL_size = 1*MB;
    }
    方案

    SR1_buff_ecc_ASIL_size = 4*KB;
    SR1_buff_ECC_QM_size = 4*KB;
    SR1_buff_non_ecc_asil_size = 4*KB;
    SR1_FRAME_BUFFER_SIZE = 305.5*MB -(SR1_buff_ECC_ASIL_SIZE + SR1_buff_ECC_QM_SIZE + SR1_buff_non_ECC_ASIL_SIZE);
    if (java.lang.System.getenv ("OpenCL_include")=="yes")

    SR1_FRAME_BUFFER_SIZE = SR1_FRAME_BUFFER_SIZE - A15_0_DATA_SIZE_INC;
    }
    }

    /*第二512 MB -非缓存*/
    //*第二个存储器段的起始地址应是16MB 对齐的。
    *此对齐必须为 EVE 使用单个16MB 映射
    *映射 SR0、REMOTE_LOG_MEM 段。
    * tlb_config_eveX.c 否则需要修改
    */
    REMOTE_LOG_SIZE = 160*KB;
    SYSTEM_IPC_SHM_SIZE = 480*KB;
    System_AUTOSAR_IPC_SHM_SIZE = 512*KB;
    Link_stats_size = 256*KB;
    HDVPSS_DESC_SIZE = 1024*KB;
    SR0_size = 128*KB;
    OPENVX_SHM_SIZE = 1984*KB;
    EEPROM_PARAM_SIZE = 64*KB;

    if ((java.lang.System.getenv ("OpenCL_include")=="yes"))

    /*启用 OpenCL 后、我们需要更多 SR0空间
    */
    src0_size = 2*MB;
    }

    4.使用 MAC0,设置静态 IP。

    问题: 如果将 NDK 配置为在 IPU1_1中运行、则千兆位网络通信正常、每帧1MB 数据、连续传输不会导致丢帧。

    但是、如果将 NDK 配置为在具有上述配置的 A15内核中运行、千兆位网络将能够正确连接。 不过、如果连续传输4个帧、每帧1 MB、则在传输第一个帧的1 MB 时、每帧丢失90 KB 到100 KB 之间、丢失的帧最终会通过 TCP 底层重新传输机制重新传输。 但这会导致吞吐率下降。

    wireshake 数据包信息如下所示:  

    192.168.31.100是 PC。  

    因此、客户想知道 在将 NDK 配置为 A15_0时应该注意什么? 或者、上述配置中是否有任何错误? 谢谢。

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

    客户可以参考以下文档来调试此问题。

    ~[sdk]/ti_components/networking/nsp_gmacsw_4_16_01_01/docs/NSP_GMACSW_Design.pdf

    ~[sdk]/ti_components/networking/nsp_gmacsw_4_16_01_01/docs/gmacsw/html/index.html

    此致、
    斯坦利