主题: C2000WARE 中讨论的其他器件
工具/软件:
大家好:
客户要求我设计和开发一个由组成的系统 辅助引导加载程序 和 A Application“ 。
环境:
- 器件: TMS320F28379D
- 启动模式:
- SCI 引导(使用 sci_flash_kernel 进行固件更新)
- 闪存引导(次级引导加载程序+应用程序)
- 闪存映射:
origin = 0x080000, length = 0x002000→次级引导加载程序origin = 0x084000, length = 0x002000→应用
- CCS 版本: 12.7.1.
概述:
- 辅助引导加载程序
- 在首次启动时、将唯一 ID、密码等写入 OTP。
- 跳转到应用程序。
- Application“
- 读取 OTP 并验证唯一 ID、密码等是否有效。
- 如果有效、请继续运行应用程序。
- 如果无效(包括未写入 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两个 程序的序列之间发生冲突吗?
请告知我的理解和配置是否正确、以及如何最好地实现两者之间的跳转序列?
非常感谢您的时间和支持。