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.

[参考译文] TMS320F28388D:诊断示例代码在内核2上不工作

Guru**** 2539500 points
Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1404464/tms320f28388d-diagnostic-example-code-is-not-working-on-core-2

器件型号:TMS320F28388D
Thread 中讨论的其他器件: C2000WARE

工具与软件:

团队成员、您好!

我正在使用 TMS320f28388D、并想在两个内核上执行诊断测试。 我已经成功在 Core1上执行了示例代码 、并将编译器选项预定义符号修改为"CPU2"、但遗憾的是、它没有按预期工作–我在 UART 上看不到任何输出。  

诊断参考代码-   C2000Ware_5_02_00_00\libraries\diagnostic\f2838x\examples\test_application

  在 CPU core2上执行诊断测试还需要哪些其他更改?

您能否分享在 CPU2上运行的示例代码?

谢谢、此致、

Vikram Tathe.

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

    我可以想象一下我头顶上的几处变化--

    • 我已经 在这里回复了 UART 打印内容
    • 与 SCI 类似、还需要将 CAN 和 MCAN 分配给一个 CPU 或另一个 CPU
    • HWBIST 有一个信标、在对其进行测试之前、需要由 CPU 声明该信标
    • 如果您对任何全局共享(GS) RAM 执行内存测试、则需要再次确保将这些 RAM 分配给执行测试的 CPU
    • 一些测试将向两个 CPU 发出 NMI、因此您需要确保这两个 CPU 都有 NMI 处理程序准备好清除这些标志、否则您将收到一些不必要的 NMIWD 复位

    尽管大多数测试都可以从两个 CPU 上运行、但不必从两个 CPU 上都运行。 例如、由于 CPU1和 CPU2共享一个 MCAN 实例、实际上不需要测试两个 CPU 的 ECC 逻辑。 但是、需要从每个内核测试专用 RAM 和 CPU 本身。

    惠特尼

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

    您好、

    感谢您提供详细信息。

    我有关于存储器测试的查询。

    API:

    void stl_March_testRAMCopy (const STL_uint32_t March_Pattern startAddress、const uint32_t length、const uint32_t copyAddress)

    1.模式-  我有清晰的理解


    2.起始地址- 在示例代码中、自定义数据填充在缓冲区中、该缓冲区放置在要测试的存储位置。 自定义/已知数据仅用于验证数据是否已复制到备份位置并在测试后恢复。 最终、缓冲区的起始地址与要测试的存储器位置的起始地址相同。 相反、我可以直接将要测试的存储器地址放置。 如果我的理解有误、请更正我。  


    3.长度-  在示例代码中、长度计算(STA_USER_MARGIN_DATA_SIZE / 2U)- 1U 等于((16U/2U)- 1U)=(8U - 1U)= 7U、因此长度为7。计算对我来说不清晰。 您能解释一下吗?  如果我想测试长度为1K 的 M0存储器块、是否可以直接将1024作为长度?


    4.文案地址- 我是否应该将备份存储在测试执行期间的直接目标地址放在此处?

    示例代码:

    #define STA_USER_MARCH_DATA_SIZE        16U
    #define STA_USER_MARCH_COPY_SIZE        320U
    
    
    #pragma DATA_SECTION(STA_User_marchTestData, "ramm0");
    #pragma DATA_ALIGN(STA_User_marchTestData, 2)
    uint16_t STA_User_marchTestData[STA_USER_MARCH_DATA_SIZE];
    
    #pragma DATA_ALIGN(STA_User_marchTestDataCopy, 2)
    uint16_t STA_User_marchTestDataCopy[STA_USER_MARCH_COPY_SIZE];
    
    
    //********************* March Test ******************************************//
    
    STL_March_testRAMCopy(STL_MARCH_PATTERN_ONE,
                                      (uint32_t)STA_User_marchTestData,
                                      (STA_USER_MARCH_DATA_SIZE / 2U) - 1U,
                                      (uint32_t)STA_User_marchTestDataCopy);
    								  
    uint16_t returnVal = STL_March_checkErrorStatus();
    
    //********************* March Copy Test ******************************************//
    
    
    STL_March_testRAMCopy(STL_MARCH_PATTERN_ONE,
                                      (uint32_t)STA_User_marchTestData,
                                      (STA_USER_MARCH_DATA_SIZE / 2U) - 1U,
                                      (uint32_t)STA_User_marchTestDataCopy);
    uint16_t returnVal = STL_March_checkErrorStatus();

    我们需要测试 M0、M1、D0、D1、LS0至 LS7、 GS0至 GS14的角色。 大小为4K 的 GS15内存块将用于备份目的、因为要测试的所有内存块的大小均为4K 或更低。

    计划使用以下 API。  

    STL_March_testRAMCopy (STL_March_pattern_one、0x00,1024、0x1C000);// M0存储器大小为1K、将备份存储在 GS15

    STL_March_testRAMCopy ( STL_March_pattern_one、0xD000,409 6、0x1C000);// GS0存储器大小为1K、将备份存储在 GS15中

    STL_March_testRAMCopy ( STL_March_pattern_one、0x8,000,204 8、0x1C000);// LS0存储器大小为1K、将备份存储在 GS15中

    请您确认我的理解是否正确、或者我是否遗漏了任何内容?

    谢谢、此致、

    Vikram Tathe.

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

    如果您查看相关文档、length 参数的描述是"length 是存储器测试的32位字数减1。" 因此、对于 M0、由于它是1024个16位字、因此您可以通过511作为长度(1024/2 - 1)。 不过、您对其他参数的理解似乎是正确的。

    惠特尼