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:闪存编程期间出现错误。 地址0x0008903

Guru**** 2399305 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1222300/tms320f280025c-error-during-flash-programming-address-0x0008903

器件型号:TMS320F280025C
主题中讨论的其他器件:UNIFLASH

你(们)好!

我正在调试一些代码、在某时间点、当我编译和刷写代码时、会出现控制台错误"Flash 编程期间出现错误。 地址0x0008903"我已尝试修改链接器文件(随附)以使用不同的扇区、但错误地址"0x0008903"只是更改为新扇区地址。   

我所做的代码更改与闪存编程无关、我不会进行任何自定义闪存写入、而只是将代码上载为正常的"调试"方式。 请注意、如果在发生此问题之前将次要代码更改回滚、则问题将完全消除。 因此、我的结论是、这不是硬件问题。  

当扇区4变满时、问题似乎开始出现。 这是仍正常工作时的内存映射(当扇区4达到100%时、问题似乎开始出现):

  

感谢您的任何帮助!

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

    链接器:  

    外部闪存

    begin:origin = 0x080000、length = 0x000002
    BOOT_RSVD:origin = 0x00000002、length = 0x00000126
    RAMM0:origin = 0x00000128、length = 0x000002D8
    RAMM1:origin = 0x00000400,length = 0x000003F8 /*片上 RAM 块 M1 */
    // RAMM1_RSVD:origin = 0x000007F8,length = 0x00000008 /*根据勘误建议"存储器:预取超出有效存储器"*/,保留并不用于代码

    /* RAMLS4:origin = 0x0000A000、length = 0x00000800
    RAMLS5 : origin = 0x0000A800, length = 0x00000800
    RAMLS6:origin = 0x0000B000、length = 0x00000800
    RAMLS7:origin = 0x0000B800,length = 0x00000800*/

    /*组合所有 LS RAM */
    RAMLS4567:origin = 0x0000A000、length = 0x00002000
    RAMGS0:origin = 0x0000C000、length = 0x000007F8
    // RAMGS0_RSVD:origin = 0x0000C7F8,length = 0x00000008 /*保留不使用勘误建议"存储器:预取超出有效存储器"中的代码*/


    // FLASHBANK1:origin = 0x00080000,length = 0x0000FFF0
    // FLASH_BANK1_RSVD:origin = 0x0008FFF0,length = 0x00000010 /*根据勘误建议"内存:预取超出有效内存"*/,保留代码,但不用于此代码
    BootROM:origin = 0x003F0000,length = 0x00008000
    BootROM_EXT:origin = 0x003F8000、length = 0x00007FC0
    复位:origin = 0x003FFFC0、length = 0x00000002
    /*闪存扇区*/
    /*组0 */
    FLASH_BANK0_SEC0:origin = 0x080002,length = 0x000FFE /*片上闪存*/
    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 */
    FLASH_BANK0_sec7:origin = 0x087000,length = 0x001000 /*片上 Flash */
    FLASH_BANK0_SEC8:origin = 0x088000、length = 0x001000 /*片上 Flash */
    FLASH_BANK0_SEC9:origin = 0x089000,length = 0x001000 /*片上 Flash */
    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 = 0x000FF0 /*片上闪存*/
    // FLASH_BANK0_SEC15_RSVD:origin = 0x08FFF0,length = 0x000010 /*保留代码,且不使用勘误建议"存储器:预取有效存储器之外的代码"*/

    }


    部分

    codestart :> beging, align (8)
    .text:>> FLASH_BANK0_SEC1 | FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC5 | FLASH_BANK0_SEC6 | FLASH_BANK0_SEC7、ALIGN (8)
    .cinit:> FLASH_BANK0_SEC0、align (8)
    .switch:> FLASH_BANK0_SEC0、ALIGN (8)
    .reset:> reset,type = DSECT /*未使用,*/

    .stack:> RAMM1.

    //.init_array:> FLASH_BANK0_SEC1、ALIGN (8)//ss 因某种原因未使用
    .. bss :> RAMLS4567
    .bss:output:> RAMLS4567
    .bss:CIO:> RAMGS0
    .const:>> FLASH_BANK0_SEC9| FLASH_BANK0_SEC10,ALIGN (8)//SS 问题与扇区9
    .const2:> FLASH_BANK0_SEC0、ALIGN (8)
    .const3:> FLASH_BANK0_SEC0、ALIGN (8)
    .data :> RAMLS4567
    .sysmem :> RAMLS4567

    ramgs0:> RAMGS0

    /*分配 IQ 数学区域:*/
    QQIQMath :> RAMLS4567
    IQmathTables :> RAMLS4567

    .TI.ramfunc:load = FLASH_BANK0_SEC0、//was sec1
    运行= RAMGS0、
    Load_start (RamfuncsLoadStart)、
    Load_Size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    RUN_SIZE (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐(8)

    }
    /*
    //===================================================================
    //文件结尾。
    //===================================================================
    */

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

    周老师、您好!

     几个问题。

    • 这是定制的电路板设计、还是您使用的是控制卡或 LaunchPad? 如果不是、您能否确认在使用这些板之一时仍然出现相同的错误?
    • 您是否对 CCS 闪存插件设置(Debug Configurations > Target > Flash Settings)进行了任何更改? 具体而言、请确保选择"Erase and Program"、并在"Erase settings"下选择整个闪存。
    • 您是否已使用任何安全设置对 DCSM/用户 OTP 进行编程? 如果是、您可能需要确认分配给安全区域的地址边界。

    我还想查看您的输出.map 文件、以检查 在扇区4边界上受影响的符号/代码区域。

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

    尊敬的 Ibukun:

    感谢您的答复。 我尚未对插件设置进行任何更改、已选择"Erase and Program"。 还选择了"整个闪存"。

    这是定制的电路板设计、我将与外部 XDS100V3一起闪存。  今天、我尝试在 TI launchpad 上刷写代码、但没有问题。 然后、我在我的备用原型上刷写了代码、它也没有问题。 似乎这个单个器件已因某种原因损坏。

    我需要弄清此器件存储器突然停止能够刷新的原因、因为我快要在生产运行中了。 我认为在闪烁过程中可能会关闭电源。 您认为这可能会造成此类损坏吗? 是否有任何可能的程序可以操作来擦除/恢复此设备?  

    还有其他想法吗? 我非常确信我的 uC 电源设置是可靠的、因为我之前已经和 TI 一起对此 PCB 进行了设计审查。

    非常感谢!

    周老师

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

    该错误现在还说明:
    C28xx_CPU1:闪存编程期间出现错误。 地址0x00089038、FMSTAT (某些器件上的 STATCMD) 0x00000030
    C28xx_CPU1:文件加载程序:存储器写入失败:未知错误
    C28xx_CPU1:GEL:File:C:\Users\steven\workspace_v11\HW2-2\CPU1_FLASH\HW2-2.out:加载失败。
    C28xx_CPU1:闪存编程期间出现错误。 地址0x0008A5D0、FMSTAT (某些器件上的 STATCMD) 0x00000030
    C28xx_CPU1:请确保您正在编程的存储器位置尚未进行编程。

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

    好的、这有点帮助。 它得到了无效数据错误、这意味着某个本应为1的位读回0。 因此、我怀疑至少有一个位没有被正确擦除或已被驱动为删除。 这 可能是由于擦除/编程期间的电源中断而发生的。

    您可以尝试使用 UniFlash 来擦除闪存吗? 每次擦除迭代后、执行空白检查、并确保在尝试再次对器件进行编程之前获得成功的空白检查。

    此致、
    Ibukun

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

    嗨,伊袋,它工作! 未成功的擦除过程导致了问题。 出于某种原因、Uniflash 能够正确擦除器件、而标准 CCS 工具/过程不能。 很奇怪、因为您会觉得它们使用相同的擦除过程。 不管怎样,感谢您帮助我保存此设备!