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.

[参考译文] MSP430F6736:将.out 文件写入存储器容量唯一不同的器件时的行为差异

Guru**** 2527880 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity

器件型号:MSP430F6736
主题中讨论的其他器件:UNIFLASH

各位专家、您好!

这是检查原始线程的结果。

尽管编写了相同的.out 文件、但 F6736和 F6733之间的行为差异是否有任何可能的原因?

我们认为在 F6733上工作的.out 文件也可以在 F6736上工作。 但是、当我在客户方面写过之后检查行为时、似乎存在差异。 目前、我们正在尝试通过以正确的方式创建新工程、将器件信息设置为 F6736并保持链接器和其他设置相同来创建可执行文件。 与预期行为的区别在于它不接受由 UART 接收的启动触发。 (不接受 UART 中断)

就存储器映射而言、只有闪存和 RAM 存在差异。 我们已确认寄存器配置和勘误表没有差异。 确切的信息和详细的差异目前正在得到确认,但我担心我可能错过了一些基本因素。 我很抱歉缺少信息、但如果您能告诉我您认为可能是原因的原因、我将不胜感激。

此致、
还不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity "]目前,我们正在尝试通过以正确的方式创建新项目、将器件信息设置为 F6736以及保持链接器和其他设置相同来创建可执行文件。

    这是避免出现任何问题的推荐方法。

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity ]\n 与预期行为的区别在于它不接受 UART 接收的启动触发器。 (不接受 UART 中断)[/quot]

    链接器文件中的中断地址都是相同的、因此我不确定导致这种情况的原因。 如果它们将 DMA 与 UART 一起使用、则问题可能是由 DMA9引起的。 再说一次、我不确定为什么在 F6736而不是 F6733上会发生这种情况。 您说的"UART is not Accepted"是什么意思? 是否设置了 RXIFG? 他们是使用调试会话还是代码自由运行来检查这一点?

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity 上的数据]目前正在确认确切的信息和详细的差异,但我担心我可能错过了一些基本因素。 我很抱歉缺少信息、但如果您能告诉我您认为是什么原因、我将不胜感激。[/QUERPLET]

    也许您可以尝试将 F6733项目设置更改为对代码和数据存储器使用"小模型"、但如果您要这样做、我建议将项目设置从 F6736更改为 F6733并继续。

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

    您好!

    很抱歉耽误你的回答。 感谢您的回答。

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3741205 #3741205"]这是避免任何问题的推荐方法。

    通过消除链接器命令文件中的差异、我可以确认它与 F6736配合使用、尽管我不确定它是否完全相同。 但是、在这种情况下、确定 F/W 有变化、因此最终产品需要时间进行验证。 此更换的原因是无法交付设备。 因此、如果可能、他们希望避免使用相同的.out 文件进行验证的时间段。 (或从 UNIFLASH 写入.h...?)

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3741205 #3741205"]链接器文件中的中断地址都是相同的、因此我不确定导致这种情况的原因。 如果它们将 DMA 与 UART 一起使用、则问题可能是由 DMA9引起的。 再说一次、我不确定为什么在 F6736而不是 F6733上会发生这种情况。 您说的"UART is not Accepted"是什么意思? 是否设置了 RXIFG? 他们是使用调试会话还是在代码自由运行时检查这一点?[/quot]

    UART 和 DMA 的组合将被确认。 但是、由于最初的 F6733没有问题、我们认为它未被使用或正在采取对策。

    至于不接受 UART 中断的行为,由于每次都返回到 main()函数的开头,所以它们无法正确调试。 因此、我们要求它们监控复位标志(SYSRSTIV)、以查看是否发生了任何意外复位。

    问:链接器命令文件中未定义的区域是否会自动填充"FF"?

    由于相同的.out 文件同时写入 F6733和 F6736、但行为不同、我们认为 F6736中的存储器区域可能会导致问题。 我实际上会检查它、但请让我检查编译器的工作方式。

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3741205 #3741205"]也许您可以尝试将 F6733项目设置更改为使用代码和数据存储器的"小型模型"、但如果您要这样做、我建议您将项目设置从 F6736更改为 F6733并继续。

    出于上述原因、最好不要对项目进行任何更改、但我将检查并将其视为调查根本原因的一部分。

    此致、
    还不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3745107 #3745107"]问:是链接器命令文件中未定义的区域、会自动填充"f"?[/quot]

    闪存存储器被"填充 F"、因为它在被编程前被擦除。 编程后、未使用的存储器显示为"FF"。

    您似乎已经为客户提供了多项检查事项。 让我们知道他们发现了什么。

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

    尊敬的 James Evans:

    我们与一位客户合作、使用 F6736调试电路板。 详细信息如下所述。

    将电路板上的 F6733替换为 F6736、并实现最初用于 F6733的固件。

    1. 由于接收 UART 数据时接收中断标志(RXIFG)被置位、因此确认接收到数据。
    2. 程序计数器(PC)跳至意外区域(0x6xxxx)、虽然它应该进入 UART 的中断处理、但似乎被卡住。
    3. 由于 UART 的中断处理没有完成、WDT 会定期重复该复位。
      但是、SYSRSTIV 显示0x02 (BOR)。

    如果为 F6736更改了固件内容(链接器命令文件)、则可以正常工作。 因此、我们预计不会出现硬件问题。

    在检查.cmd 和.map 文件后、我们发现正在使用"备用中断矢量"。
    MSP430x5xx 和 MSP430x6xx 系列用户指南(修订版 Q):1.3.6.1备用中断矢量

    问:从以上所述,我得出了以下结论,但以下想法是否有效?
    当为 F6733创建的固件写入 F6736时、UART 中断向量引用0x3B80-0x3BFF 区域、但它是一个未定义的区域、因此 PC 会跳转到一个意外区域。

    请允许我检查一些事项以避免上述情况。

    问:"备用中断矢量"指示的 RAM 开头是否正确?对于 F6733、为0x2B80-0x2BFF;对于 F6736、为0x3B80-0x3BFF?

    问:在 F6736中使用"备用中断矢量"时、是否可以将矢量位置更改为0x2BFF?
    如果由于硬件原因无法实现、请简要解释原因。

    此致、
    还不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3751557 #3751557">如果为 F6736更改了固件内容(链接器命令文件)、则可以正常工作。 因此、我们预计不会出现硬件问题。[/quot]

    我希望是这样。

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3751557 #3751557">检查.cmd 和.map 文件后、我们发现正在使用"备用中断矢量"。
    MSP430x5xx 和 MSP430x6xx 系列用户指南(修订版 Q):1.3.6.1备用中断矢量[/引用]

    您能描述一下您是如何进行此发现的吗? 它们是否已从链接器文件中 RAM 顶部排除0x80字节、以避免堆栈损坏中断矢量? 此外、他们为什么 要使用此功能?

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3751557 #3751557"]问:"备用中断矢量"指示的 RAM 开头是否正确?F6733为0x2B80-0x2BFF、F6736为0x3B80-0x3BFF?

    我认为您是指"RAM 的顶部"、而不是开头。 RAM 的顶部(或末端)是 RAM 扇区的最高地址。 您的地址范围正确。

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3751557 #3751557"]Q:在 F6736中使用"备用中断矢量"时、是否可以将矢量位置更改为0x2BFF?
    如果由于硬件原因而无法做到这一点、请简要解释原因。

    我假设这是由每个器件上的硬件处理的(例如、每个器件都知道其 RAM 顶部的位置)、但我需要深入探究以了解更多信息。 我可能需要一周时间才能回到您那里。 同时、下面是一些可能有所帮助的相关线程。

    中断矢量重定位 MSP430F5659

    使用 RAM 作为中断向量位置的备用位置

    如何使用寄存器 SYSCTL 中的 SYSRIVECT 位?

    CCS/MSP430F5340:SYSRIVECT

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

    扼要重述一下、当使用特定于器件的链接器文件时、备用中断矢量在 F6733和 F6736上工作。 是这样吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3752043 #3752043"]您能描述一下您是如何进行此发现的? 它们是否已从链接器文件中 RAM 顶部排除0x80字节、以避免堆栈损坏中断矢量? 此外、他们为什么 要使用此功能?

    对于 F6733、_STACK_END 设置为0x2B80;对于 F6736、设置为0x3B80。 它们实现了自定义引导加载程序。 客户使用重定位到 RAM 以执行正常应用程序代码(SYSCTL 寄存器中的 SYSRIVECT 位设置为[1])。

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3752049 #3752049"]简而言之、当使用特定于器件的链接器文件时、备用中断向量在 F6733和 F6736上工作。 是这样吗?

    是的、没错。

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3752043 #3752043">我认为您是指"RAM 的顶部"而不是开头。 RAM 的顶部(或末端)是 RAM 扇区的最高地址。 您的地址范围是正确的。
    Unknown 说:
    我假设这是由每个器件上的硬件处理的(例如、每个器件都知道其 RAM 顶部的位置)、但我需要稍微深入一点以了解更多信息。 我可能需要一周时间才能回到您那里。 同时、以下是一些可能有所帮助的相关线程。

    感谢您提供参考信息。 我从其他线程中了解到、它表示 RAM 的顶部(或末端)。 我希望我可以参考链接器命令文件设置中使用的扇区的末尾、但这似乎很困难。

    感谢您的参与、我期待您的调查结果。

    此致、
    还不错

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

    您好!

    我们在客户方面进行了额外的研究、并将分享结果。

    使用为 F6733创建的工程、客户将要放置(复制)在 RAM 中的中断矢量表更改为0x3B80-0x3BFF。 他们已将此固件写入 F6736、并确认它可以进行简单的评估。

    为 F6733设置链接器命令文件。 客户使用了"备用中断矢量"。 将中断矢量表提取到 RAM 时、它会从 Divice ID 中确定产品型号、并动态更改要提取的区域。 编译器未生成错误或警告。 通过这样做、我相信他们可以将相同的固件写入不同的产品。

    您能否给我一些有关上述措施的可能问题?
    由于固件使用的区域(0x3B80 - 0x3BFF)最初未在 F6733中定义、因此我们担心它可能会导致一些问题。 通过检查可能存在的问题、我们希望能够确定需要多少验证时间、因此我们希望您能提供任何见解。 或者、如果您找到更好的解决方案、请告知我们。

    此致、
    还不错

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

    您好!

    再次感谢您的详细更新。 听起来它们位于正确的路径上。

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3754885 #3754885">使用为 F6733创建的工程、客户将要放置(复制)在 RAM 中的中断矢量表更改为0x3B80-0x3BFF。 他们已将此固件写入 F6736、并确认其适用于简单评估。

    让我进行总结、以确保我理解。

    器件 项目 链接器 中断矢量的 RAM 目标 状态
    F6733 F6733 F6733 0x2B80至0x2BFF 通过
    F6733 F6733 F6733 0x3B80至0x3BFF 失败
    F6736 F6733 F6733 0x2B80至0x2BFF 失败
    F6736 F6733 F6733 0x3B80至0x3BFF 通过

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3754885 #3754885"]F6733的链接器命令文件已设置。 客户使用了"备用中断矢量"。 将中断矢量表提取到 RAM 时、它会从 Divice ID 中确定产品型号、并动态更改要提取的区域。 编译器未生成错误或警告。 通过这样做、我相信他们可以将相同的固件写入不同的产品。

    有道理。 当不使用备用中断矢量时、假设两个器件共享相同的较低存储器扇区、则可以在具有更多存储器的器件上使用相同的链接器文件。

    [引用 userid="402494" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3754885 #3754885">您能否给我一些有关上述措施的可能问题?
    由于固件使用的区域(0x3B80 - 0x3BFF)最初未在 F6733中定义、因此我们担心它可能会导致一些问题。 通过检查可能存在的问题、我们希望能够确定需要多少验证时间、因此我们希望您能提供任何见解。 或者、如果您找到更好的解决方案、请告知我们。

    我唯一的问题是使用 F6733链接器文件会阻止 F6736器件上的代码使用完整的存储器大小。 在 F6733项目中、如果您正在检查器件 ID、并且从未在 F6733上使用 RAM 地址0x3B80至0x3BFF、我不会看到这种情况。 如果在 F6736上使用同一工程、 则 F6736器件支持 RAM 地址范围0x3B80至0x3BFF、即使链接器文件未将该范围明确声明为段。

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

    您好!

    很抱歉耽误你的回答。

    我们实际上没有检查过以下模式、但我认为它们可能就像我们想象的那样。 其他模式如您所识别。

    器件 项目 链接器 中断矢量的 RAM 目标 状态
    F6733 F6733 F6733 0x3B80至0x3BFF 失败

    [引用 userid="216616" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1012284/msp430f6736-difference-in-behavior-when-writing-out-files-to-devices-that-differ-only-in-memory-capacity/3758111 #3758111">我唯一的问题是使用 F6733链接器文件会阻止 F6736器件上的代码使用完整的存储器大小。 在 F6733项目中、如果您正在检查器件 ID、并且从未在 F6733上使用 RAM 地址0x3B80至0x3BFF、我不会看到这种情况。 如果在 F6736上使用同一项目、 F6736器件支持 RAM 地址范围0x3B80至0x3BFF、即使链接器文件未明确声明该范围为段。

    感谢您的回答。 我想根据您提供的信息验证这一点。

    此致、
    还不错

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

    感谢您的更新。 如前所述,它们的方法应该起作用, 但是、我确实想指出、 《适用于 MSP430微控制 器的 MSPBoot–主存储器引导加载程序》应用手册中介绍的矢量重定向实现方法是一种替代方法、尽管在中断请求和代码开始执行 ISR 代码之间存在一些额外的延迟。