Part Number:LAUNCHXL-F2800137Other Parts Discussed in Thread:UNIFLASH
用uniflash擦除整个芯片,可以直接从ccs烧录程序。修改程序后再次烧录程序会一只报这个错误
C28xx_CPU1: Error during Flash Programming. Address 0x00088000, FMSTAT (STATCMD on some devices) 0x00000101
C28xx_CPU1: File Loader: Memory write failed: Unknown error
C28xx_CPU1: GEL: File: D:\AAWZL\Work Project\SVN_Project\LLC_INV_DSP280013X\trunk\LLC_INV_DSP280013X\Application\
cmd文件如下:
MEMORY {BEGIN: origin = 0x00082000, length = 0x00000002BOOT_RSVD: origin = 0x00000002, length = 0x00000126RAMM0: origin = 0x00000128, length = 0x000002D8RAMM1: origin = 0x00000400, length = 0x000003F8// RAMM1_RSVD: origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */RAMLS0: origin = 0x00008000, length = 0x00002000RAMLS1: origin = 0x0000A000, length = 0x00001FF8// RAMLS1_RSVD: origin = 0x0000BFF8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */RESET: origin = 0x003FFFC0, length = 0x00000002/* Flash sectors *///FLASH_FLAG : origin = 0x081C00, length = 0X4 /* on-chip Flash */FLASHIDFLAG : origin = 0x081C04, length = 0x4 /* on-chip Flash *///USER_FLASH : origin = 0x081C08, length = 0X3F8 /* on-chip Flash */FLASH_APP : origin = 0x082002, length = 0xDFFE//, fill=0xFFFF /* on-chip Flash */ //FLASH_BANK0_SEC_0_7: origin = 0x080002, length = 0x1FFE /* on-chip Flash */ //FLASH_BANK0_SEC_8_15: origin = 0x082000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_16_23: origin = 0x084000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_24_31: origin = 0x086000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_32_39: origin = 0x088000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_40_47: origin = 0x08A000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_48_55: origin = 0x08C000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_56_63: origin = 0x08E000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_64_71: origin = 0x090000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_72_79: origin = 0x092000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_80_87: origin = 0x094000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_88_95: origin = 0x096000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_96_103 : origin = 0x098000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_104_111 : origin = 0x09A000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_112_119 : origin = 0x09C000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_120_127 : origin = 0x09E000, length = 0x1FF0 /* on-chip Flash */// FLASH_BANK0_SEC_127_RSVD : origin = 0x0A0FF0, length = 0x0010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ } SECTIONS {codestart: > BEGINcodeclearram: > FLASH_APP.text: > FLASH_APP, ALIGN(8).cinit: > FLASH_APP, ALIGN(8).switch: > FLASH_APP, ALIGN(8).reset: > RESET, TYPE = DSECT /* not used, */.stack: > RAMM1 #if defined(__TI_EABI__).bss: > RAMLS0.bss:output: > RAMLS0.init_array: >> FLASH_APP, ALIGN(8).const: >> FLASH_APP, ALIGN(8).data: > RAMLS0.sysmem: > RAMLS0.bss:cio: > RAMLS0 #else.pinit: >> FLASH_APP, ALIGN(8).ebss: > RAMLS0.econst: >> FLASH_APP, ALIGN(8).esysmem: > RAMLS0.cio: > RAMLS0 #endif #if defined(__TI_EABI__).TI.ramfunc: LOAD = FLASH_APP,RUN = RAMLS0,LOAD_START(RamfuncsLoadStart),LOAD_SIZE(RamfuncsLoadSize),LOAD_END(RamfuncsLoadEnd),RUN_START(RamfuncsRunStart),RUN_SIZE(RamfuncsRunSize),RUN_END(RamfuncsRunEnd),ALIGN(8) #else.TI.ramfunc: LOAD = FLASH_APP,RUN = RAMLS0,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),ALIGN(8) #endifIDFLAG: > FLASHIDFLAGDataBufferSection : > RAMLS1, ALIGN(2)/* Allocate IQ math areas: */IQmath: > FLASH_APP, ALIGN(8)IQmathTables: > FLASH_APP, ALIGN(8) }
测试发现:烧录了一次程序flash大小超过了0x00088000后,再次烧录flash比此地址小的程序,是可以进行烧录的,但是还是超过0x00088000地址的却不能烧录。查看数据手册得0x00088000为Sector 32
请问这是什么问题呢?急~!
Yale Li:
程序有配置器件的DCSM吗?
,
ZILIANG WANG:
你好,没有配置的。因为我有bootloader程序,所以设置了擦除编程保护寄存器
其它的设置项均没有设置了。
我排查了一下,在烧录程序还在写flash,没有报错的时候,我拔了下载线,然后用uniflash去读了flash出来,发现0x00088000地址没被擦除,估计是flash擦除异常引起,但是我不知道什么原因,为什么会擦除不了,uniflash可以。
,
Yale Li:
CCS和uniflash的版本分别是什么?
,
ZILIANG WANG:
Code Composer Studio Version: 12.3.0.00005
OS: Windows 10, v.10.0, x86_64 / win32Java vendor: Eclipse AdoptiumJava runtime version: 11.0.13+8Java version: 11.0.13
uniflash Version: 8.3.0.4307
我今天大概看了下,有可能是CCS的bug,下面这样子设置,无法清除Sector 32以上的扇区
这样设置是可以的
,
Yale Li:
程序有用到Sector32(0x88000)以上的扇区吗?可以通过map文件查看一下。如果没有用到的话,就先不要全部擦除。
0x88000是一个分界点,部分小存储器件只有Sector0~31。最近遇到的类似问题也比较多。
,
ZILIANG WANG:
是有用到的
,
Yale Li:
我已经咨询了相关工程师:
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1289750/launchxl-f2800137-error-occurs-when-re-programming-after-modifying-the-program
,
ZILIANG WANG:
好的!根据帖子工程师回复的内容:测试发现Sector32是没有被擦除的,ECC也没有用
,
Yale Li:
跟进过去了