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.

[参考译文] MSP432P401R:重新启动重置

Guru**** 2561060 points
Other Parts Discussed in Thread: CC1200

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618634/msp432p401r-reboot-reset

部件号:MSP432P401R
主题: CC1200中讨论的其他部件

您好,

我在MSP432P401R上制作了一个应用程序,它接收带有射频模块的固件并将其存储在外部FRAM上,然后从主内存上的FRAM程序中启动大量擦除和数据。 我在重新启动时遇到问题。 当我发送与设备上下载的固件不同的固件时,仅在激活某个功能中的另一个PIN时工作正常,但当新程序在重新启动后出现较大差异时,它停止响应并转到内存中的未知地址。  是sysctl_rebootDevice() Class1 reboot reset或Class0 POR reset, 因为我仍可以在 sysctl_rebootDevice()之后调试设备 。 是否需要重置Class0 POR才能使其正常工作,或者此类重新启动设备是否存在其它问题?

编辑:请注意,我正在为内存构建整个程序优化级别下的发行版本。

编辑2:好的,我已经回答了我的问题了:D。 我在sysctl_rebootDevice()函数上输入了断点,刚刚关闭设备电源,然后开机,工作正常,所以我的问题是,此函数不能根据我的需要进行重置,所以我现在的问题是如何在软件中启动POR重置?  

此致,

Ugljesa Popovic  

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

    如何使用ResetCtl_initiateHardResetWithSource( RESET_SRC_0);

    来自github.com/.../reset.h

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

    您好,

     为了进行测试,我建议使用Paliy Oleh已经推荐的重置控制器API,能否尝试一下,如果您看到相同的行为,请告诉我们?

     有趣的是,重新启动重置与POR相同,允许应用程序模拟POR类重置,而无需重启设备或激活RSTN PIN,我一直在使用此API,没有任何问题。

     所以可能会发生其他事情。

    Ugljesa Popovic 说:
    ,但当新程序在重新启动后出现较大差异时,它停止响应并转到内存中的未知地址。[/QUOT]

    您能快照此未知内存地址吗?

     谢谢!

      David

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

    你好,Paliy Oleh,

    感谢重播。
    我不知道现在发生了什么。 我在控制台上有:"Cortex_M4_0: semihosting:unknown register:SPSR_SVC",应用程序的某些部分工作正常(我可以看到一些变量变化良好),但其他部分没有。 例如,我正在向该设备发送他的状态(使用RF),并从其他设备接收到该消息,但没有响应,当他前往该部件在控制台上处理该消息时,它将打印:“Cortex_M4_0:semihosting:unknown register:SPSR_SVC”。
    我现在有点与重新启动混淆了.. 如果处理器从0x00开始启动程序,而我已经对整个主内存进行了重新编程,那么它会产生什么不同? 他是否有存储所有功能或什么的地址。 i CCS中的文学构建程序和txt文件中的数据发送到他存储在FRAM中的设备,然后将其编程到主存储器中。 我在技术文档中看到,重新启动重置"不更改或重置设备的引导模式"不会更改引导模式。 这是什么意思? 或者POR重置是否“完全重新启动”?

    编辑:我现在尝试使用sysctl_rebootDevice(),它与 ResetCtl_initiateHardResetWithSource( reset_SRC_0)相同。 我猜我昨天没有注意到控制台上的那条消息。

    当我说整个主存储器时,我并没有说我保护Bank1的最后三个扇区用于重新编程主存储器的功能。

    此致

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

    我明白这句话是怎么说的...不确定我是否清楚。 不是该地址在未知中,而是那里没有可执行代码。 当CSS打开带有红色地址的新选项卡时,就会出现这种情况。 我觉得它像是0x6f…… 没有太多的快照:D

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

    请确认您看到应用程序重新启动。 暂时忽略"Cortex_M4_0:semihosting:unknown register:SPSR_SVC"消息,并确保您可以重新启动应用程序,并且新固件实际开始执行。 同时,请暂时忽略新固件的行为方式不同。 只需确保启动。

    检查不同引脚上的信号(如您之前所做的那样)是一个很好的指示。 执行该测试5-10次,清除闪存(读回以确保其为空)。 首先建立对重置方法的信心! 确认重置是否有效,并在此处发布一份清晰的陈述(它将对其他正在努力解决重置问题的人有用)。

    之后,我建议关闭此主题并集中讨论另一个问题-为什么更新的固件无法按预期工作。

    我会尽力帮助您。 我有主板,但我没有FRAM或RF通信模块(除非是ESP8266)。 我需要更多详细信息。

    我必须指出,我已经有了一些怀疑。 要检查它们,我需要您提供两个.map文件-一个来自旧固件,另一个来自新固件。 但这是另一个论坛主题。

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

    您好,

    我可以确认应用程序是否重新启动,因为在重新启动之前,我保存了"重要"数据,并且在开始时恢复了该数据。 所以它肯定会重新启动。
    关于使用换针的方法,我已经做了大约一个月的工作,现在已经进行了多次测试,在对新固件进行了较大的更改后,我注意到了这个问题。 我不检查主内存是否已成功擦除。
    有趣的是,在我的代码超过128KB (FRAM限制)之前,我通常会更新调试版本。 当它超过128KB (如果不清楚,则为Kbytes :D)时,我不得不针对内存成本使用优化的发行版本。 首先,我注意到,如果在设备上调试版本,然后用版本更新它,它将崩溃,这让我想起这一点。

    RF是CC1200。

    关于.MAP文件,我不确定是否可以发送给您,因为我已经签署了此项目的NDA协议,所以我必须先询问。 从.map文件:D可以看到什么?

    编辑:我问.. 我可以给你发:D


    此致

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

    我怀疑您的新固件仍超过128k。 甚至在使用优化进行编译之后。

    .map文件将立即告诉我这一点。

    另一个可能发生的事情是,当您将固件移动到闪存时,该步骤可能会部分失败,但您不会检查该问题(因为您不检查闪存擦除)。 如果您清理闪存并仅保留"更新程序"部分,则会显示此消息。

    所有这些假设都可以逐个测试。

    不检查闪存操作不好。

    优化代码以适应FRAM -也不好。 我会分配一个“更新缓冲区”并在多个块中进行更新,从而增加地址。 想象一下,如果您的代码增长得更好。 更不用说,"无线"更新可能需要部分或完整地重新发送固件(由于连接通道不可靠而死)。 您是否有任何验证机制来确认您正在闪烁的内容是您发送的内容? 某种CRC /奇偶校验检查? 或者传输协议规定了这一点?

    这很好,虽然“更新程序”是独立的,并且受到保护。 顺便说一下,如果需要,您将如何更新该更新?

    我建议我们结束这一主题。 我们离最初的主题有点远-主持人可能对它不太满意。

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我刚刚直接写了SYS_REBOOT_CTL,它现在工作正常。 似乎sysctl_rebootDevice()可能有问题,但不确定是否已将该设备重引导...

    我现在结束此主题。