E_EEPROM_XMC1 returns INCONSISTENT_BLOCK after a few write-read-verify

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Not applicable
Issue:
On write-read-verify of emulated data eeprom, after a few cycles of write-read-verify, the read will return E_EEPROM_XMC1_OPERATION_STATUS_INCONSISTENT_BLOCK on XMC1302-Q040-0064.

Questions:
Has anyone faced emulated data eeprom write-read-verify reliability issue using DAVE4 E_EEPROM Appls v4.1.6 or later on XMC1302-Q040-0064?

Regression:
1. create a instance of emulated data eeprom, with size 512, and allocate 2 block of data, 96bytes, and 32bytes each.
2. perform a erase at the start of code.
3. setup a 100ms timer to make changes to data eeprom content. The content is read, incremented, and write back to emulated data eeprom.
4. insert breakpoint after READ or WRITE or GETINFO functions.

NOTE: problem surface on XMC1302 Q040-0064. Problem does NOT surface on XMC1302 T038-0200.

Environment:
1. DAVE v4.2.8
2. E_EEPROM APP v4.1.6 andv4.1.8
3. Windows 7 Pro 64bit
4. 1st Target XMC1302 Q040-0064 64kB chip.
4. 2nd Target XMC1302 T038-0200 200kB chip (bootkit)

.7z ZIP contains a DAVE4 project that was purpose built to show this issue can be provided upon request. Following is the extract of the .c/.h


#include

typedef uint64_t U64;
typedef uint32_t U32;
typedef uint16_t U16;
typedef uint8_t U8;
typedef int64_t S64;
typedef int32_t S32;
typedef int16_t S16;
typedef int8_t S8;
typedef _Bool FLAG;

#define K_PAGE 6
#define K_LO_CNT 96
#define K_HI_CNT 32

typedef struct {
E_EEPROM_XMC1_OPERATION_STATUS_t status;
E_EEPROM_XMC1_STATUS_t status_2;
U16 busy_Read_HI, busy_Read_LO;
U16 busy_Write_HI, busy_Write_LO;
U8 lo_Vol[K_LO_CNT], hi_Vol[K_HI_CNT];
} DE2_REC;


typedef struct {
DE2_REC de2;
} RUN_TIME;

RUN_TIME my;

void DE2_Read_Reliability() {
U8 i = 0;
my.de2.status_2 = E_EEPROM_XMC1_GetStatus();
if (my.de2.status_2 == E_EEPROM_XMC1_STATUS_IDLE) {
for (i=0; i = 0;
my.de2.status = E_EEPROM_XMC1_Read(DE2_HI_VOL, 0, &my.de2.hi_Vol[0], K_HI_CNT);
if (my.de2.status!=E_EEPROM_XMC1_OPERATION_STATUS_SUCCESS) {
my.de2.status_2 = E_EEPROM_XMC1_GetStatus();
if (my.de2.status_2 == E_EEPROM_XMC1_STATUS_IDLE) {
my.de2.status = E_EEPROM_XMC1_Write(DE2_HI_VOL, &my.de2.hi_Vol[0]);
} else my.de2.busy_Write_HI++;
} else {
for (i=0; i++;
my.de2.status_2 = E_EEPROM_XMC1_GetStatus();
if (my.de2.status_2 == E_EEPROM_XMC1_STATUS_IDLE) {
//DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_0);
my.de2.status = E_EEPROM_XMC1_Write(DE2_HI_VOL, &my.de2.hi_Vol[0]);
//DIGITAL_IO_SetOutputLow(&DIGITAL_IO_0);
} else my.de2.busy_Write_HI++;
}
} else my.de2.busy_Read_HI++;
}
0 Likes
1 Reply
Not applicable
Apparently to have bumped into a uC with defective Flash, possibly resulted with an invalid EEPROM content.

Error message returned does not point directly to a Flash error, but an "inconsistent" read/write.
0 Likes