主题中讨论的其他器件: UNIFLASH
我有一个具有上述 Tiva 部件的定制板。 我们有一个应用程序目前正在生产中且可靠。 目标是实现一个闪存引导加载程序、此加载程序将允许通过 CAN 总线(这是电路板上的主要通信链路)进行应用更新。
我的目标是通过以下几个步骤来实现这一点:
1. 使用 TivaWare 示例中的 TI serial_boot 示例开始。
2.验证 引导加载程序 是否将控制权移交给应用程序和应用程序是否正常工作。
3.通过串行对应用程序进行编程
3.使用 serial_boot 示例作为基准、修改引导加载程序以使用 CAN 总线代替串行。
问题是、我不能超过步骤1。 已修改引导加载程序和应用程序以反映正确的存储器空间。
boot_serial 工程中的 bl_config.h 文件已修改为包括:
#define VTABLE vstart_address 0x2800
#define APP_START_ADDRESS 0x2800
应用程序中的 tm4c123gh6pz_startup.cmd 文件被修改:
#define APP_BASE_ADDR 0x00002800
#define RAM_BASE_ADDR 0x20000000
存储器
{
闪存(RX):origin = APP_BASE_ADDR,length = 0x0003d800
SRAM (rwx):origin = 0x20000000,length = 0x00008000
}
/*以下命令行选项作为 CCS 项目的一部分进行设置。 *
/*如果您使用命令行构建,或者出于某种原因想要*/
/*在此处定义它们,您可以根据需要取消注释并修改这些行。 *
/*如果您使用 CCS 进行构建、最好进行任何这样的构建*/
/*对 CCS 项目进行修改并将此文件保留为单独文件。 *
/**//
/*--heap_size=0 */
/*--stack_size=256 */
/*--library=rtsv7M4_T_le_eabi.lib */
/*内存中的段分配*/
部分
{
.intvecs:> APP_BASE_ADDR
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
.vtable:> RAM_BASE_ADDR
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM
}
使用 UniFlash 应用程序、我将 boot_serial.bin 加载到地址0x0000、将应用加载到地址0x2800
我的预期是引导加载程序将会运行、没有串行输入、并将控制权转移到起始地址0x2800处的应用程序、但并非如此。 我将其基于板上的 LED 指示灯、该指示灯在应用程序初始化时立即亮起。
我的问题是:
1.我的期望是否不正确? 我是否遗漏了什么? 示例 boot_serial 是否应该不会启动应用程序?
调试引导加载程序的最佳方法是什么? 我使用 CCS7作为开发环境和 XDS2xx USB 仿真器。
谢谢!