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.

[参考译文] TMS320F28379D:关于 TMS320F28379D 上的次级引导加载程序+应用程序

Guru**** 2577385 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1575022/tms320f28379d-about-secondary-bootloader-application-on-tms320f28379d

部件号:TMS320F28379D
主题: C2000WARE 中讨论的其他器件

工具/软件:

大家好:

客户要求我设计和开发一个由组成的系统 辅助引导加载程序 和 A Application“

环境:

  • 器件: TMS320F28379D
  • 启动模式:
    • SCI 引导(使用 sci_flash_kernel 进行固件更新)
    • 闪存引导(次级引导加载程序+应用程序)
  • 闪存映射:
    • origin = 0x080000, length = 0x002000→次级引导加载程序
    • origin = 0x084000, length = 0x002000→应用
  • CCS 版本: 12.7.1.

概述:

  • 辅助引导加载程序
    1. 在首次启动时、将唯一 ID、密码等写入 OTP。
    2. 跳转到应用程序。
  • Application“
    1. 读取 OTP 并验证唯一 ID、密码等是否有效。
    2. 如果有效、请继续运行应用程序。
    3. 如果无效(包括未写入 OTP 时)、请停止应用程序或报告错误。

我的问题如下:

问题 1:  是否有任何可用的示例代码 TMS320F28379D 这些演示了使用次级引导加载程序和应用程序的配置?

问题 2:  假设次级引导加载程序和应用程序都需要自己的引导加载程序是否正确 单独的项目和链接器命令文件

问题 3  次级引导加载程序和应用程序的以下链接器命令文件定义是否正确?

→可以接受 复位向量 是否在两者的同一地址定义?

  • 辅助引导加载程序

MEMORY
{
PAGE 0:    /* Program Memory */
    BEGIN  : origin = 0x080000, length = 0x000002
    ...
    RESET  : origin = 0x3FFFC0, length = 0x000002

    FLASHA : origin = 0x080002, length = 0x001FFE /* Secondary bootloader area */
 // FLASHB : origin = 0x082000, length = 0x002000 /* Undefined */
    FLASHC : origin = 0x084000, length = 0x002000 /* Application area */
    ...
PAGE 1 :   /* Data Memory */
    ...
}

SECTIONS
{
    .cinit      : > FLASHA, ALIGN(8)    PAGE = 0
    .pinit      : > FLASHA, ALIGN(8)    PAGE = 0
    .text       : > FLASHA, ALIGN(8)    PAGE = 0
    codestart   : > BEGIN   PAGE = 0
    ...
    .econst     : > FLASHA, ALIGN(8)    PAGE = 0
    .switch     : > FLASHA, ALIGN(8)    PAGE = 0

    .reset      : > RESET, PAGE = 0, TYPE = DSECT /* not used */
    ...
}

  • Application“

MEMORY
{
PAGE 0:    /* Program Memory */
    BEGIN  : origin = 0x084000, length = 0x000002
    ...
    RESET  : origin = 0x3FFFC0, length = 0x000002

    FLASHA : origin = 0x080000, length = 0x002000 /* Secondary bootloader area */
 // FLASHB : origin = 0x082000, length = 0x002000 /* Undefined */
    FLASHC : origin = 0x084002, length = 0x001FFE /* Application area */
    ...
PAGE 1 :   /* Data Memory */
    ...
}

SECTIONS
{
    .cinit      : > FLASHD, ALIGN(8)            PAGE = 0
    .pinit      : > FLASHD, ALIGN(8)            PAGE = 0
    .text       : > FLASHD | FLASHE, ALIGN(8)   PAGE = 0
    codestart   : > BEGIN  PAGE = 0
    ...
    .econst     : >> FLASHF | FLASHG, ALIGN(8)  PAGE = 0
    .switch     : > FLASHD, ALIGN(8)            PAGE = 0

    .reset      : > RESET, PAGE = 0, TYPE = DSECT /* not used */
    ...
}

问题 4  如何实现从次级引导加载程序到应用程序的跳转?
→二级引导加载程序和应用程序均预计执行 _c_int00然后跳转到 _main

 当每个都在闪存中单独编程时、则为 复位向量 指向 _c_int00和执行按顺序进行_c_int00_main

 但是、在上面的链接器命令文件中、 复位 两者都在同一地址定义。
这不会导致_c_int00_main两个 程序的序列之间发生冲突吗?

请告知我的理解和配置是否正确、以及如何最好地实现两者之间的跳转序列?

非常感谢您的时间和支持。

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

    您好:

    Q2.  假设次级引导加载程序和应用程序都需要自己的引导加载程序是否正确 单独的项目和链接器命令文件 ?

    正确。 为便于开发、次级引导加载程序和应用程序应具有单独的项目和链接器命令文件。

    您需要确保引导加载程序和应用程序的闪存部分不重叠。 如果您希望从应用程序(即 LFU)跳回引导加载程序、那么还需要确保 RAM 分配不冲突。

    q3.  次级引导加载程序和应用程序的以下链接器命令文件定义是否正确?

    您的链接器命令文件与所描述的用例匹配。  

    q4.  如何实现从次级引导加载程序到应用程序的跳转?

    您应从次级引导加载程序分支到应用程序的 codestart(地址为 0x84000)。

     但是、在上面的链接器命令文件中、 复位 两者都在同一地址定义。
    这不会导致_c_int00_main两个 程序的序列之间发生冲突吗?

    这应该不是问题。 应用程序和次级引导加载程序都应 将 .reset 映射到引导 ROM 中的 RESET 矢量。 请参阅此主题并说明其用途:  CCS/TMS320F28377D:TMS320F28377D 复位向量和引导加载 

    此致、

    马特