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.

[参考译文] CCS/TM4C123GH6PM:是否有任何引导加载程序示例在运行时未复制到 SARM?

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/659751/ccs-tm4c123gh6pm-is-there-any-boot-loader-example-that-doesn-t-get-copied-to-sarm-at-run-time

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

大家好、我正在寻找一些未复制到 SRAM 的引导加载程序示例代码、它是否存在? 我的理解是、将引导加载程序从闪存复制到 SRAM 的好处是可以升级引导加载程序本身。 在本例中、我不需要此功能、因为我不需要更新字段中的引导加载程序。

谢谢

Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、
    这是不可能的。 在对闪存进行编程时、您无法从闪存执行代码。 这就是必须首先将程序复制到 SRAM 的原因。 请参阅以下数据表摘录。

    在闪存存储器操作(写入、页擦除或整体擦除)期间、访问闪存存储器
    禁用。 因此、指令和字面量取指令被保持在闪存存储器操作之前
    已完成。 如果在一个闪存存储器操作期间需要执行指令、那么就是代码
    执行必须放置在 SRAM 中、并在闪存操作进行期间从 SRAM 执行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    解释的很好——也许是有用/有价值的…… 最近、该论坛注意到、"4C129" MCU (我不记得确切的器件)提供了"两个闪存组"、如果存储服务(昨晚成人饮料消费)尚未(完全)磨损)、则"符合此海报的"无 SRAM "目标。"     (也许-"留给您的细节/那些... 具有此类"内部信息"。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    理论上、如果采用多组组织、只要电荷泵能够支持同时读取和编程多个组、就可以在执行另一组时对一个组进行编程。 在其他 TI MCU 中、这实际上是受支持的功能、但 TM4C123不支持。 但是、如果您将 EEPROM (仿真为 EEPROM 的闪存)视为另一个组、这是一项受支持的功能、您可以在从正常组运行代码的同时对 EEPROM 进行编程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Charles 和 CB1的答复、很抱歉答复很晚。 对于 TM4C123G 中的闪存、是否有方法判断它是否有多个组? 我之所以提出这一要求、是因为我能够从驻留在第一个/低64KB 闪存内并运行的应用程序写入到顶部1K 闪存。

    谢谢

    Richard

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

    您好 Richard、

     我想我需要修改我之前的说法、即无法同时对同一个存储库进行写操作和读操作。 此处再次摘录了数据表:

    在闪存存储器操作(写入、页擦除或整体擦除)期间、访问闪存存储器

    禁用。 因此、指令和字面量取指令被保持在闪存存储器操作之前

    已完成。 如果在一个闪存存储器操作期间需要执行指令、那么就是代码

    执行必须放置在 SRAM 中、并在闪存操作进行期间从 SRAM 执行。


    我认为它之所以起作用、是因为尝试访问闪存的 CPU 处于等待状态、直到当前闪存操作(程序或简化)完成。 有关详细信息、请参阅闪存存储器编程/擦除时间。 擦除时间可高达500ms。 在此期间、CPU 将被保持关闭。 如果 CPU 不响应这么长的时间或其他需要 CPU 处理的任务、则可能有一个看门狗可跳闸复位。  您是否在闪存组的开头驻留了代码、您要在其中擦除自身?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Charles 的澄清。 您提出了一个好问题、即在闪存擦除过程中看门狗可能会跳闸复位、这是我将来需要记住的一点。

    在我的用例中、我将代码驻留在闪存的前40KB 中、但我要写入的闪存是它之后的部分。 我能够做到 BTW、并且开发了一个基于闪存的引导加载程序、该加载程序能够启动驻留在闪存中不同位置的应用程序、代码从闪存运行、 SRAM 仅用于引导加载程序的堆栈和 BSS 段等、之后启动后、用户应用程序将独占拥有该 SRAM。

    谢谢!
    Richard