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.

[参考译文] TMS320F28335:闪存跳转应用程序 1 至应用程序 2 问题

Guru**** 2643885 points

Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1589189/tms320f28335-flash-jump-application-1-to-application-2-issue

器件型号: TMS320F28335

我正在开发一款 TMS320F28335 具有以下闪存用途的器件:

  • 闪存 A →Bootloader

  • 闪存 D →应用 1.

  • 闪存 G →应用 2.

我在做什么

  1. I programming 闪存 A(引导加载程序) 闪存 D(应用 1) JTAG 的读取。

  2. 我构建了 应用 2. 并生成一个 十六进制文件 它链接到在中运行 闪存 D

  3. 在运行时、 应用 1. 复制该十六进制文件
    中导出 闪存 D→闪存 G 使用闪存 API。

  4. 我正在使用 偏移量 0x18000 同时写入闪存 G
    并使用 跳转地址 0x308000 自动执行。

  5. 闪存 API 写入到的数据 闪存 G 成功完成。

 工作正常

  • 这个简单例程 单独的十六进制文件 目标
    闪存 D 闪存 G 使用闪存 API 编程、
    两个应用程序都可以正常运行。

  • 直接编程(闪存 API 或 JTAG)工作正常。

哪些不起作用

  • 当应用 1 从复制十六进制图像时 闪存 D→闪存 G
    我尝试从中执行它 闪存 G
    应用程序无法运行

  • 该十六进制文件最初是为地址构建的
    0x320000 至 0x320002 (闪存 D 地址范围)。

  • 当我使用偏移量将相同的十六进制文件写入闪存 G、然后跳转到 0x308000 时、应用程序会执行此操作 不执行

我认为是错的

  • 可能存在问题 写入时使用的偏移
    跳转地址 当从闪存 G 执行时

我需要的东西

请检查我出了什么问题并提供建议  正确方法 从中复制和执行应用程序 闪存 G

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

    Akash、

    我想您可以处理链接器文件中的加载/运行命令、类似于我们在客户加载到闪存但从 RAM 运行时展示的内容。

    由于在调用函数之前调用 API 并自行将映像从 D 复制到 G、因此只要在调用函数之前等待这一过程、此方法就应该起作用。

    2 个步骤:

    1) 在.cmd 文件中、在.cmd 文件的“Sections"部分“部分中添加如下所示的行。

    flash_reloc :{} load = FLASHD,
    RUN = FLASHG、
    PAGE = 0

    2) 在源代码中;无论您需要从 G 运行的是什么函数、都应在.c 文件的标头中使用 pragma 分配给 flash_reloc、如下所示:

    #pragma CODE_SECTION (functionnamehere“flash_reloc")“);
    您可以根据需要为各种函数提供尽可能多的这些#pragma。  闪存 G 需要对应于扇区 G 中的起始地址、您将使用闪存 API 调用将代码写入其中。

    这将正确映射所有内容并让您执行上面提到的操作。
     
    此致、
    Matthew