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.

[参考译文] MSP430FR5728:ReadMemQuick 函数问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/734498/msp430fr5728-readmemquick-function-issue

器件型号:MSP430FR5728
主题中讨论的其他器件:MSP430FR5739MSP430FR5730

您好!

我们注意  到、一些批次的 MSP430FR5728IRGER 命令 ReadMemQuick_430Xv2 (在 JTAG 模式下)存在一些问题。 当从 c200h 以上的地址读取超过200h 的字节(由命令 ReadMemQuick 启动)时、问题出在更改"MainMemory"的内容。 在这种情况下,MainMemory 区域中的数据将在读取...后被随机更改。

我们还注意到、器件标记为:

430FR

5728.

TI 84i

A3J7 J

不受此问题的影响、并且器件标记为:

430FR

5728.

TI 85I

CGTJ J

是!

您能解释一下这种行为吗? 出什么问题了。 我们如何解决这个问题?

此致、

弗兰蒂塞克

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

    Frantitsek、您好!

    关于器 件标识、"TI 841 A3J7"和"TI 851 CGTJ"是批次代码、最后一个字母"J"是裸片版本、并在勘误文档中进行了介绍。

     我已经联系了我们的开发工具团队、让我们的专家之一来帮助解决这一问题。

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

    我们的工具团队已确认 ReadMem_430Xv2或 ReadMemQuickXv2在该器件上的工作方式相同。
    因此、为了更好地了解您的特定问题、他们提出了几个有关编程设置的问题。

    1.您是否使用4线制 JTAG 模式?
    2. TCK 频率是多少?
    CPU 读取期间的 TCK 时钟频率是多少?
    4.您在任何 JTAG 线路上是否有任何电容器或电阻器?
    5.您在生成 TCLK 时是否考虑到了宝贵的 IFCLK 状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dennis、

    >1. 您是否使用4线制 JTAG 模式?

    是的、我们使用4线制 JTAG 模式。

     >2. TCK 频率是多少?

    TCK 频率为1MHz。

     >3. CPU 读取期间的 TCK 时钟频率是多少?

    CPU 读取期间的 TCK 频率为1MHz。

    只有在使用 ReadMemQiuck_430Xv2函数读取整个器件存储器时、我们才会遇到问题。

     >4. 您在任何 JTAG 线路上是否有任何电容器或电阻器?

     >5. 在生成 TCLK 时、您是否考虑了宝贵的 IFCLK 状态?

    我不明白什么应该是"IFCLK 状态"。

    其他器件 MSP430FR5730、MSP430FR5739没有问题、整个存储器空间的读取没有任何错误。

    此致、

    弗兰蒂塞克

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

    很抱歉耽误你的时间。 我仍在等待我们的工具团队根据您的答案做出响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Frantitsek、您好!

    我们的工具团队提出以下建议:

    "对于所有其它 FRAM 器件、程序计数器被设定到测试内存地址0x4内的一个 JMP$指令中。

    FR57xx JTAG ID 为91。  在这种情况下、PC 未设置为 JMP$指令。

    之所以这样做、是因为并非所有 JTAG ID91器件都具有该测试存储器。  但 FR57xx 具有该测试存储器。

    我建议相应地更改代码中的以下行。"

    //具有指定修改的代码

    空 ReadMemQuick_430Xv2 (无符号长整型 StartAddr、无符号长整型、字*DataArray)

      无符号长整型 I、LPC = 0;

      //将 PC 设置为“安全”地址

      IF (IR_Shift (IR_CNTRL_SIG_CAPTURE)== JTAG_ID99 || IR_Shift (IR_CNTRL_SIG_CAPTURE)== JTAG_ID91)

      {

        LPC = 0x00000004;

      }

      SetPC_430Xv2 (StartAddr);

      SetTCLK();

      IR_Shift (IR_CNTRL_SIG_16BIT);

      DR_Shift16 (0x0501);

      IR_Shift (IR_ADDR_CAPTURE);

      IR_Shift (IR_DATA_QUICK);

      对于(I = 0;I <长度;I++)

      {

        SetTCLK();

        ClrTCLK();

        *DataArray++ = DR_Shift16 (0); //从内存中读取数据。     

      }

      IF (LPC)

      {

        SetPC_430Xv2 (LPC);

      }   

      SetTCLK();

    请告诉我这是否能解决您的问题。

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

    您好 Dennis、

    您的建议没有帮助、因为 IPC 设置是在读取内存后完成的。 在我们的示例中、在重新编程存储器后。 如果我们以200h 字节为单位逐步读取存储器、则 IPC 的设置方式无关紧要。

    请允许我注意、对于其他 FRxxxx 器件、我们看不到此类问题。

    弗兰蒂塞克

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

    Frantitsek、您好!

    您使用的是哪个版本的 Replicator 软件?

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

    您好 Dennis、

    我们使用了 Slau320文档中的 Replicator430FR。 但它并未提及在200h 字节块中读取存储器。

    弗兰蒂塞克

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

    您是否仍然看到此问题?
    如何确认在 ReadMem_430Xv2Quick()之后主代码存储器被改变?
    在读取存储器之前、是否在编程后先执行验证?
    在主代码中被更改的区域中、这些位置是随机的还是可重复的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dennis、

    是的、我们仍然看到这个问题。 但我们发现了解决方法:我们发出命令 ReadMem_430Xv2Quick(),然后读取的字节数不超过200h。 对于整个闪存的读取、我们将读取分为长度为200h 字节或更短的连续块的读取、这些块的读取由 ReadMem_430Xv2Quick()命令启动。  

    如何确认在 ReadMem_430Xv2Quick()之后主代码存储器被改变

    如果存储器被200h 个字节块读取、我们将读取正确的数据。 一旦我们读取内存整体、数据就会被改变、之后我们总是读取坏数据。

    在读取存储器之前、是否在编程后先执行验证?

    是的、我们确实做到了。

    在主代码中被更改的区域中、这些位置是随机的还是可重复的?

    随机。

    此致、

    弗兰蒂塞克

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

     Frantitsek、您好!

    好的、我很高兴您为您的应用提供了权变措施、感谢您提请我们注意此问题。

    我已将此问题归档到我们的错误跟踪工具中、并将在下一版本的 Replicator 软件中解决。

    遗憾 的是、我不知道何时会发生这种情况、因此我现在要做的是解决此问题、并建议经常检查 Replicator 版本说明、以查看是否发布了下一个版本。

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

    我们的开发工具团队还有其他可供您尝试的工具:

    ===================================================================================================
    将0x3FFF 写入地址0x4、0x6和0x8、然后运行快速读取操作并将 PC 设置为0x4。

    空 ReadMemQuick_430Xv2 (无符号长整型 StartAddr、无符号长整型、字*DataArray)

    无符号长整型 I、LPC = 0;

    WriteMem_430Xv2 (F_WORD、0x4、0x3FFF);
    WriteMem_430Xv2 (F_WORD、0x6、0x3FFF);
    WriteMem_430Xv2 (F_WORD、0x8、0x3FFF);

    //将 PC 设置为“安全”地址
    ===================================================================================================

    如果这有所帮助、现在让我来吧。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dennis、

    这没用、很抱歉。 无论如何、一旦我们有了权变措施、我想我们就可以关闭这个 TT 了。

    非常感谢您的努力。

    此致、

    弗兰蒂塞克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、感谢您耐心地尝试解决这个问题。
    如上所述、我现在将关闭此问题。
    当我收到有关修复程序和预期更新版本的通知时、我将重新打开并在此处发布该信息。