您好!
我编写了一个引导加载程序来更新我的 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
 
				 
		 
					