您好!
我编写了一个引导加载程序来更新我的 TMS320F280025C 控制器。 我想同时闪存16个字节。
闪存过程开始、将正确的数据写入闪存中的正确地址。 问题是刷写地址0x879DB 时、闪存过程中止。
但仅刷写一半数据。 当我闪存小于它正常工作的.bin-File 时。
有人不知道问题在哪里、我如何解决?
以下是我的程序的 Linker-File:
存储器
{
//字中的所有长度(2字节)。 所有的都是地址字。
//----开始/引导-------
开始 :origin = 0x00080000,length = 0x00000002
///---RAM ------------------------------------------------------------------------
// RAMM0 :origin = 0x00000000,length = 0x00000400
BOOT_RSVD :origin = 0x00000002、length = 0x00000126
RAM_Command :origin = 0x00000128,length = 0x00000018 //软重置时未删除:引导加载程序的命令应用程序
RAM_APP_TO_BOOT :origin = 0x00000140,length = 0x00000200 //软复位时未删除:应用程序具有写入权限: 用于复位原因,...
RAM_Boot_TO_APP :origin = 0x00000340,length = 0x000000C0 //软复位时未删除:引导具有写入权限: 用法?
// RAMM1 :origin = 0x00000400,length = 0x000003F8
// RAMM1_RSVD :origin = 0x000007F8,length = 0x00000008 //根据勘误建议“内存:有效内存之外的预取”保留和不用于代码
RAM_STACK :origin = 0x00000400,length = 0x000003F8
// RAMLS4 :origin = 0x0000A000,length = 0x00000800
// RAMLS5 :origin = 0x0000A800,length = 0x00000800
RAM_DATA :origin = 0x0000A000,length = 0x00001000
// RAMLS6 :origin = 0x0000B000,length = 0x00000800
// RAMLS7 :origin = 0x0000B800,length = 0x00000800
RAM_OSCi :origin = 0x0000B000,length = 0x00001000
// RAMGS0 :origin = 0x0000C000,length = 0x000007F8
RAM_RAM_CODE :origin = 0x0000C000,length = 0x000007F8 //必须在此处复制的 RAM 列表中执行的代码
// RAMGS0_RSVD :origin = 0x0000C7F8,length = 0x00000008 //根据勘误建议“内存:有效内存之外的预取”保留和不用于代码
//--重置-------
复位 :origin = 0x003FFFC0,length = 0x00000002
///---- Bootrom --------------------------------------------------------
BootROM :origin = 0x003F0000、length = 0x00008000
BootROM_EXT :origin = 0x003F8000,length = 0x00007FC0
///----闪存--------------------------------------------------------
//--引导加载程序---
// flash_BANK0_SEC0 :origin = 0x080002, length = 0x000FFE
// flash_BANK0_SEC1 :origin = 0x081000, length = 0x001000
// flash_BANK0_sec2 :origin = 0x082000, length = 0x001000
Flash_bootloader :origin = 0x080002, length = 0x002FFE //引导加载程序的区域
//--配置块---
// flash_BANK0_SEC3 :origin = 0x083000, length = 0x001000
FLASH_CONFIG :origin = 0x083000, length = 0x001000 //配置只在器件生产中写入。 二进制。
//---- APP --------
// 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_APP_CRC :origin = 0x084000、 length = 0x000100 //请勿使用:此块用于固件的 CRC。 它由一个外部工具写入
FLASH_application :origin = 0x084102、 length = 0x009EFE //应用程序的区域(size = SizeOfFlash - begin - flash_app_CRC)
// FLASH_BANK0_SEC14 :origin = 0x08E000、 length = 0x001000
FLASH_RAM_CODE :origin = 0x08E000、 length = 0x001000 //将复制到 RAM 的代码
//--联机配置---
// flash_BANK0_SEC15 :origin = 0x08F000, length = 0x000FF0
// flash_BANK0_SEC15_RSVD :origin = 0x08FFF0, length = 0x000010 //根据勘误建议“内存:有效内存之外的预取”保留和不用于代码
FLASH_ONLINECONFIG :origin = 0x08F000、 length = 0x001000 //保留:如果我们必须在运行时写入 somting。 是的! 我们还采用 RSVD。 因为它将仅是数据。
}
部分
{
codestart :> 开始, 对齐(8)
.text :>> flash_bootloader, align (8)
.cinit :> flash_bootloader, align (8)
.switch :> flash_bootloader, align (8)
.reset :> 重置, 类型= DSECT
命令 : load = RAM_Command, type = NoLoad // Command app to Bootloader。
RamAppToBoot : load = RAM_APP_TO_BOOT, type = NoLoad //要引导的 RAM 应用程序。 复位时不会被删除。
RamBootToApp : load = RAM_Boot_To_app, type = NoLoad // RAM boot to app。 复位时不会被删除。
堆栈 :> RAM_STACK
堆 :> RAM_STACK
init_array :> flash_bootloader, align (8)
.bss :> RAM_DATA
.bss:输出 :> RAM_DATA
.bss:CIO :> RAM_DATA
.const :> flash_bootloader, align (8)
.data :> RAM_DATA
.sysmem :> RAM_DATA
osciRAM :> RAM_OSCi
//分配 IQ 数学区域:
// IQmath :> RAM_DATA
// IQmathTables :> RAM_DATA
.TI.ramfunc :load = flash_bootloader,
运行= RAM_RAM_CODE、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(8)
FlashConfig :> flash_config
}
此致、
Markus