工具与软件:
对闪存编程后、我无法启动进入固件更新引导模式。 有几件事我想确认一下、看看我是否漏掉了任何东西。
我 已经按照建议配置了 DCSM 区域1标头、也就是
- 1个引导引脚
- GPIO22
-带 LFU 闪存0x80000、0x90000、0xA00000的 BOOTDEF0
- BOOTDEF1 SCI SCIATX=GPIO29、SCIARX=GPIO28
在以下示例中、我们决定将应用程序入口点设为0x92000 (表示存储体1)、因此我们已按如下所示设置链接器命令文件:
小程序
{
begin:origin = 0x00092000、length =
0x00000002
BOOT_RSVD:origin = 0x00000002、length =
0x00000126
RAMM0:origin = 0x00000128、length =
0x000002D8
RAMM1:origin = 0x00000400、length =
0x000003F8
// RAMM1_RSVD:origin = 0x000007F8、length =
0x00000008 /*保留、请勿使用
对于代码、请参阅勘误公告
"存储器:在有效存储器之外进行预取"*/
/*
RAMLS0:origin = 0x00008000、length =
0x00000800
RAMLS1:origin = 0x00008800、length =
0x00000800
RAMLS2:origin = 0x00009000、length =
0x00000800
RAMLS3:origin = 0x00009800、length =
0x00000800
RAMLS4:origin = 0x0000A000、length =
0x00000800
RAMLS5 : origin = 0x0000A800, length =
0x00000800
RAMLS6:origin = 0x0000B000、length =
0x00000800
RAMLS7:origin = 0x0000B800、length =
0x00000800
*/
RAMLSx:origin = 0x00008000、length =
0x00004000
RAMGS0:origin = 0x0000C000、length =
0x00001000
RAMGS1:origin = 0x0000D000、length =
0x00001000
RAMGS2:origin = 0x0000E000、length =
0x00001000
RAMGS3 : origin = 0x0000F000, length =
0x00000FF8
// RAMGS3_RSVD:origin = 0x0000FFF8、length =
0x00000008 /*保留、请勿使用
对于代码、请参阅勘误公告
"存储器:在有效存储器之外进行预取"*/
BootROM:origin = 0x003F8000、length =
0x00007FC0
secure_rom:origin = 0x003F2000、length =
0x00006000
复位:origin = 0x003FFFC0、length =
0x00000002
/*闪存扇区*/
/*组0 */
FLASH_BANK0_SEC0:origin = 0x080000、length =
0x001000
FLASH_BANK0_SEC1:origin = 0x081000、length =
0x001000
FLASH_BANK0_sec2:origin = 0x082000、length =
0x001000
FLASH_BANK0_SEC3:origin = 0x083000、length =
0x001000
FLASH_BANK0_SEC4:origin = 0x084000、length =
0x001000
FLASH_BANK0_SEC5:origin = 0x085000、length =
0x001000
FLASH_BANK0_SEC6:origin = 0x086000、length =
0x001000
FLASH_BANK0_sec7:origin = 0x087000、length =
0x001000
FLASH_BANK0_SEC8:origin = 0x088000、length =
0x001000
FLASH_BANK0_SEC9:origin = 0x089000、length =
0x001000
FLASH_BANK0_SEC10:origin = 0x08A000、length =
0x001000
FLASH_BANK0_SEC11:origin = 0x08B000、length =
0x001000
FLASH_BANK0_SEC12:origin = 0x08C000、length =
0x001000
FLASH_BANK0_SEC13:origin = 0x08D000、length =
0x001000
FLASH_BANK0_SEC14:origin = 0x08E000、length =
0x001000
FLASH_BANK0_SEC15:origin = 0x08F000、length =
0x001000
/*组1 */
Flash_BANK1_SEC0:origin = 0x090000、length =
0x001000
Flash_BANK1_SEC1:origin = 0x091000、length =
0x001000
FLASH_Bank1_sec2_15:origin = 0x92002、length =
0x00DFFE
/*组2 */
FLASH_Bank2_SEC0:origin = 0x0A0000、length =
0x001000
FLASH_Bank2_SEC1:origin = 0x0A1000、length =
0x001000
Flash_Bank2_sec2:origin = 0x0A2000、length =
0x001000
FLASH_Bank2_SEC3:origin = 0x0A3000、length =
0x001000
FLASH_Bank2_SEC4:origin = 0x0A4000、length =
0x001000
FLASH_Bank2_SEC5:origin = 0x0A5000、length =
0x001000
FLASH_Bank2_SEC6:origin = 0x0A6000、length =
0x001000
Flash_Bank2_sec7:origin = 0x0A7000、length =
0x001000
FLASH_Bank2_SEC8:origin = 0x0A8000、length =
0x001000
FLASH_Bank2_SEC9:origin = 0x0A9000、length =
0x001000
FLASH_Bank2_SEC10:origin = 0x0AA000、length =
0x001000
FLASH_Bank2_SEC11:origin = 0x0AB000、length =
0x001000
FLASH_Bank2_SEC12:origin = 0x0AC000、length =
0x001000
FLASH_Bank2_SEC13:origin = 0x0AD000、length =
0x001000
FLASH_Bank2_SEC14:origin = 0x0AE000、length =
0x001000
FLASH_Bank2_SEC15:origin = 0x0AF000、length =
0x000FF0
// FLASH_BANK0_SEC15_RSVD:origin = 0x0AFFF0、length =
0x000010 /*保留、请勿使用
对于代码、请参阅勘误公告
"存储器:在有效存储器之外进行预取"*/
}
部分中)
{
codestart :> beging, align(8)
.text:>FLASH_BANK1_SEC2_15、ALIGN (8)
.cinit:> FLASH_BANK1_SEC1、ALIGN (8)
.switch:> FLASH_BANK1_SEC1、ALIGN (8)
.reset :> RESET , TYPE = DSECT /*
未使用、*/
.stack :> RAMM1.
/*重要提示:FreeRTOS 静态分配的堆栈应仅分配给此段*/
freertosStaticStack :>> RAMM1.
| RAMM0
| RAMLSx
/*重要提示:FreeRTOS 堆应仅作为 C28x 堆栈分配给此段
只能在低64k RAM 内存中分配内存。 */
.freertosHeap :> RAMLSx
| RAMGS0
#if defined (_TI_EABI__)
init_array :> flash_bank1_SEC1, align (8)
.bss :> RAMLSx
.bss:output :> RAMLSx
bss:cio :> RAMLSx
.data :> RAMLSx
.sysmem :> RAMLSx
.const:> FLASH_BANK1_SEC2_15、ALIGN (8)
#else
.pinit:> FLASH_BANK1_SEC1、ALIGN (8)
.ebss :> RAMLSx
.esysmem :> RAMLSx
.cio :> RAMLSx
econst:> FLASH_BANK1_SEC2_15、ALIGN (8)
#endif
ramgs0 :> ramgs0
Ramgs1 :> RAMGS0
/*分配 IQ 数学区域:*/
IQMath:> FLASH_BANK1_SEC1、ALIGN (8)
IQmathTables :> FLASH_BANK1_SEC2_15, ALIGN (8)
相关
{
.TI.ramfunc
} LOAD = FLASH_BANK1_SEC1、
RUN = RAMLSx、
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(8)
DataBufferSection :> RAMM1, ALIGN(8)
}
-l FAPI_F28003x_EABI_v1.58.10.lib
我们使用了 HEX2000构建工具 -b. 以二进制格式输出的选项。 附加的是生成的.map 和.bin 文件。 我假设.bin 文件是要从0x91000 (组1)进行编程的连续字节流、因为我们将.cinit 定义为从链接器文件中的组1扇区1开始、而 codestart 会重定位为0x92000。
成功完成闪存编程后、我们使用0x92000写入应用入口点(0x90000)、使用0x5A5A5A5A 写入有效密钥(0x9000A)、使用版本号的补码写入固件版本(0x9000C)。 请参阅下面的屏幕截图以了解最终结果。

在此步骤之后、固件将启用看门狗并进入死区环路以等待看门狗复位。
即使所有这些、它也不会启动到新固件中。 我们希望寻求您的建议、了解我们可以查找哪些内容以进行进一步的故障排除。