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.

[参考译文] TMS320F28P650DK:软件诊断库实现问题

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1497306/tms320f28p650dk-software-diagnostic-library-implementation-problems

器件型号:TMS320F28P650DK

工具/软件:

您好:  

我正在对器件实施 driverlib 5.04.00.00中的 SDL、并面临一些实现问题。

1.
STL_CPU_REG_checkCPURegisters ():执行 loopCPUReg2Test 汇编函数时程序崩溃。 (我仅使用 CPU1)。 目前、我已从汇编代码中取消了该函数的注释。 这是一个正确的解决方案、还是您建议使用更好的解决方案?

2.  
STL_CPU_REG_checkVCRCRegisters ():我从您的示例中获取了一个代码片段- f28p65x_test_application_cpu1、您将从以下数组中计算 CRC。

float32_t faUser_crcData[STA_USER_CRC_DATA_SIZE] =
    {0.00006104, 0.00164795, 0.00762939, 0.02093506,
     0.04449463, 0.08123779, 0.13409424, 0.20599365,
     0.29962158, 0.41204834, 0.53472900, 0.65887451,
     0.77569580, 0.87640381, 0.95220947, 0.99432373};

该字符串存储在存储器中、包含以下字符串:
029A 3880 0007 3AD8 FFF6 3BF9 8001 3CAB 4000 3D36 6000 3DA6 5000
3E09 F000 3E52 6800 3E99 F800 3ED2 E400 3F08 AC00 3F28 9400 3F46
5C00 3F60 C400 3F73 8C00 3F7E

问题是 STL_CRC_checkCRC ()内 的 CRC 计算结果不会与我从在线 CRC 计算器(如 crccalc.com/)获得的任何结果发生冲突(实际上,无论我使用的是什么字符串,结果都是不同的)。 您能否说明如何处理特定字节、或者如何在其他计算器中将数据组织给机器?  

3.  
STL_CAN_RAM_checkErrorStatus (Cana_base):  偶尔在应用第一个测试模式后返回 STL_CAN_RAM_ERROR。 问题可能是什么?
我按以下方式使用它

        #define CANMSGRAM_END              0x4C7FFUL 
       ...
        uint16_t uiTestResult;
        STL_CAN_RAM_testRAM(CANA_BASE, STL_MARCH_PATTERN_ONE, CANA_MSG_RAM_BASE, CANMSGRAM_END, STL_CAN_RAM_NO_COPY);
        uiTestResult = STL_CAN_RAM_checkErrorStatus(CANA_BASE);
        STL_CAN_RAM_testRAM(CANA_BASE, STL_MARCH_PATTERN_TWO, CANA_MSG_RAM_BASE, CANMSGRAM_END, STL_CAN_RAM_NO_COPY);
        uiTestResult |= STL_CAN_RAM_checkErrorStatus(CANA_BASE);
        STL_CAN_RAM_testRAM(CANA_BASE, STL_MARCH_PATTERN_THREE, CANA_MSG_RAM_BASE, CANMSGRAM_END, STL_CAN_RAM_NO_COPY);
        uiTestResult |= STL_CAN_RAM_checkErrorStatus(CANA_BASE);
        STL_CAN_RAM_testRAM(CANA_BASE, STL_MARCH_PATTERN_FOUR, CANA_MSG_RAM_BASE, CANMSGRAM_END, STL_CAN_RAM_NO_COPY);
        uiTestResult |= STL_CAN_RAM_checkErrorStatus(CANA_BASE);

4.
STL_HWBIST_runFull (STL_HWBIST_NO_ERROR):调试时、代码在 stl_hwbist_s.asm 中的第388行崩溃、并调用错误消息"Can't Single Step Target Program"/ Cannot Run Target CPU"

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

    请问您的目标安全标准是什么?

    1.您是在调用函数之前禁用中断吗? loopCPUReg2Test 部分测试 CPU IER 寄存器、因此如果在调用函数之前没有全局屏蔽中断、则可能会在 CPU 寄存器处于错误状态时获得中断、从而导致应用程序崩溃。

    2.我不得不使用 不同的计算器 ,允许我更改初始化值并重新排列字节,以便低字节在高字节之前(不是内存浏览器显示它们的方式),但我能够得到一个匹配:

    3.我以前从未见过这种行为。 您能否在 STL_CAN_RAM_checkErrorStatus 函数中放置断点并尝试查看 CAN_PERR 寄存器以了解更多信息? 它只是 STL_March_PATTERN_ONE? 如果您更改图案的使用顺序、它是否仍然失败并显示 STL_March_PATTERN_ONE、或者在第一次调用 STL_CAN_RAM_testRAM 时失败?

    4. HWBIST 中断调试器连接是正常的。 本应用手册中有一个"调试系统内 HWBIST "部分 提供了一些提示。

    Whitney

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

    您好 Whitney、  
    感谢您的答复。
    问题编号 1、2、4已解决。

    仍然存在 CAN RAM 检查问题。

    实际上、它不会影响使用哪个 March 模式作为第一个模式。  
    我已经录制了一段简短的视频供参考。  /cfs-file/__key/communityserver-discussions-components-files/171/CanMsgRamTestFault.mp4

    此测试在器件初始化后立即运行、其中设置了 SYSCLK 并为所有外设启用了时钟。  
    我发现、在 CAN 外设启用时钟之后、CAN_PERR 始终设置为0x306、并且该值在整个运行期间保持不变。  
    我猜它会解释为什么我在第一次检查后出现错误、但不知道如何解决。  

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

    是否也在器件初始化后设置 can_es.per? 在尝试 March 测试之前、运行 CAN RAM init (如 can_initRAM)是否有帮助?

    Whitney

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

    您好 Whitney、

    我仔细检查了代码,发现 can_initRAM ()缺失。 现在它已经开始工作了。
    感谢您的支持。

    Jozef