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.

[参考译文] MSPM0-SDK 诊断-LIB:RAM 测试和放大器;闪存测试问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1527285/mspm0-diagnostic-lib-ram-test-flash-test-questions

部件号:MSPM0-DIAGNOSTIC_LIB
主题:MSPM0G1106 中讨论的其他器件

工具/软件:

您好、

我尝试集成 TI 提供的诊断测试 (mspm0_diag_lib_0_90_00_01)。 具体来说、我将为 LP-MSPM0G3607 使用示例工程、因为它与我的工程使用的微控制器 MSPM0G1106 最匹配。

问题 1:RAM 测试

在文件中test_config.c、宏SAFE_BUFFER_SIZE似乎不是在项目层次结构中的任何位置定义的。 是由用户定义和使用此宏、还是应在该文件未包含的代码中的其他位置定义?

此外、程序员是否有责任通过工程的链接器命令文件预先创建“.RAMsafeBuff"部分“部分、以便以下代码正常工作?

/* test_config.c */

PLACE_IN_MEMORY(".RAMsafeBuff")
uint32_t safebuffer[MSPM0_DIAG_RAM_SAFE_BUFF_NUM_OF_WORDS_TO_TEST];

问题 2:闪存测试

同样、 程序员是否有责任通过工程的链接器命令文件提前创建“.FLASHTestCRC"段“段、以使以下代码正常工作?

/* test_config.c */

PLACE_IN_MEMORY(".FLASHTestCRC")
const uint32_t FLASHTestgoldenCRC = MSPM0_DIAG_FLASH_EXPECTED_CRC;

此外、根据代码的以下部分、好像您正在计算前 16380 个字(即 65,520 字节)的 CRC、不包含最后 4 个字(即 16 字节)。 这是否用于将 4 字节 CRC 值存储在该区域中的某个位置? 如何以及何时(在闪存之前或闪存之后) 计算预期的 CRC 值 0x52A05524?

/* test_config.h */

/*******************************************************************************
 * FLASH Test configuration
 ******************************************************************************/
#define MSPM0_DIAG_FLASH_FAULT_INJECTION (MSPM0_DIAG_test_inject_fault_false)
#define MSPM0_DIAG_FLASH_START_ADDR ((uint32_t *)0x00000000)
#define MSPM0_DIAG_FLASH_NUM_OF_WORDS (16380)
#define MSPM0_DIAG_FLASH_GOLDEN_CRC ((uint32_t *)&FLASHTestgoldenCRC)
#define MSPM0_DIAG_FLASH_EXPECTED_CRC ((uint32_t)0x52A05524)

我很感激就此提供任何指导。

谢谢您、

李庆宰

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

    尊敬的 Lee:

    问题 1:RAM Test

    1.是的,尺寸取决于客户的选择。

    2.是的,用户应该在 cmd 中创建相关的内存部分,我们的示例工程应该给出一个很好的例子。

    问题 2:Flash Test

    1.是的,命令应该自定义。

    是的、闪存数据和 CRC 基准值都加载到 flast_test_crc 中、并且基准值 从 CRC 校验中排除。 使用计算得出的一个进行判断。

    B.R.

    Sal

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

    尊敬的 Sal:

    感谢您的澄清。 以下是一些后续问题:

    • [RMA 测试]
      根据我对中实施的无损 RAM 测试ram_test.c的理解、过程如下:首先在用户定义的安全缓冲区上执行测试、然后将要测试的 RAM 区域复制到安全缓冲区中、对目标区域执行 RAM 测试、最后通过将数据从安全缓冲区复制回 RAM 来恢复原始内容。
      您能否确认这一理解是否正确?

    • [RAM 测试]
      除了确保安全缓冲区大于要测试的 RAM 区域外、在定义安全缓冲区大小时还有其他考虑因素吗? 由于我将在无损模式下运行测试、因此只要要测试的 RAM 区域和安全缓冲区的总大小不超过可用 RAM 的总大小、我是否可以选择任何大小?
      (我知道要测试的 RAM 区域越大,测试所需的时间就越长,但让我们暂时搁置。)

    • 【闪存测试】
      FLASHTestCRC在链接器命令文件中定义该段时、除了确保它不与用于计算 CRC 的闪存区域重叠之外、是否还有任何其他注意事项?

    • 【闪存测试】
      是否根据.bin文件预先计算了预期的 CRC 值(例如,使用单独的 Python 脚本)? 我问这个问题是因为我注意到.bin文件中未使用的位用零填充。 但是、.bin将文件加载到目标后、这些未使用的区域全部显示为 1(即 0xFF)。 这让我不确定.bin根据文件计算出的 CRC 如何与直接根据目标上闪存内容计算出的 CRC 相匹配。 是否有建议的方法来计算预期的 CRC?

    谢谢您、

    李庆宰

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

    尊敬的 Lee:

    请参阅以下注释:

    您能否确认此理解是否正确?

    是的、正确。

    除了确保安全缓冲区大于待测试的 RAM 区域外、定义安全缓冲区大小时还有其他注意事项吗? 由于我将在无损模式下运行测试、因此只要要测试的 RAM 区域和安全缓冲区的总大小不超过可用 RAM 的总大小、我是否可以选择任何大小?
    (我知道要测试的 RAM 区域越大,测试所需的时间就越长,但让我们暂时把它放在一边。)

    否、我们对安全缓冲区长度的选择没有限制。

    【闪存测试】
    FLASHTestCRC在链接器命令文件中定义段时、除了确保该段不与计算 CRC 的闪存区域重叠之外、是否还有任何其他注意事项?

    编号

    预期的 CRC 值是否根据.bin文件预先计算(例如,使用单独的 Python 脚本)? 我问这个问题是因为我注意到.bin文件中未使用的位用零填充。 但是、.bin将文件加载到目标后、这些未使用的区域全部显示为 1(即 0xFF)。 这让我不确定.bin根据文件计算出的 CRC 如何与直接根据目标上闪存内容计算出的 CRC 相匹配。 是否有建议的方法来计算预期的 CRC?

    如果用户没有手动填充 BIN 文件中的值、实际上它是空的、不会将任何值加载到空闪存地址。 空闪存地址读作 0xFF。

    我有两个想法,这种场景:

    1.您可以手动为.bin 文件填充给定值、以便所有闪存地址都在.bin 文件中有其值。

    在 cmd 文件中、我们可以添加--fill 来填充数据、示例请参阅以下:

        FLASH           (RX)  : origin = 0x00000000, length = 0x00020000, fill = 0xffffffff

    然后、未使用的闪存地址将填充 0xFFFFFFFF。

    2.此外、您可以进行一些修改以使用.bin 文件计算 CRC ->使用 0xFF 和空闪存地址。  

    B.R.

    Sal