This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280025C:闪存地址0x879DB 处的闪存中止

Guru**** 2430620 points
Other Parts Discussed in Thread: TMS320F280025C

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1015489/tms320f280025c-flash-abort-at-the-flash-address-0x879db

器件型号:TMS320F280025C

您好!

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、

    如果无法在该地址进一步编程、闪存 API 会出现什么错误?

    此外、请清理链接器 cmd 以删除所有注释内容、并将链接器 cmd 文件附加到您的帖子、而不是复制/粘贴。

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vamsi、

    没有错误。 它会停止将我的数据写入闪存、而不会出现错误。

    谢谢、此致、

    Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、

    这是否意味着 PC 卡在闪存 API 的程序函数中?  还是 while 循环中等待程序命令完成的时间?   

    请在此常见问题解答 中搜索以下问题:e2e.ti.com/.../faq-faq-on-flash-api-usage-for-c2000-devices

    当闪存 API 无法擦除或编程时、我们可以考虑哪些常见的调试提示?

    谢谢、此致、
    Vamsi