Verification separated

This commit is contained in:
Florian Reitz 2020-10-01 16:35:55 +02:00
parent af78b0fd44
commit f6ee86a2f7
3 changed files with 33 additions and 9 deletions

Binary file not shown.

Binary file not shown.

View File

@ -23,8 +23,9 @@ const char state_char[STATE_LAST] = { '|', '/', '-', '\\' };
uint8 buffer[BUFFER_SIZE] = { 0 }; uint8 buffer[BUFFER_SIZE] = { 0 };
boolean writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length); static void writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length);
void printStatus(uint8 percentage); static boolean verifyChip(const uint8* pSource, volatile uint8* pDest, uint16 length);
static void printStatus(uint8 percentage);
int main() int main()
@ -111,11 +112,15 @@ int main()
// write to SLOTROM // write to SLOTROM
cprintf("\r\n\r\nFlashing SLOTROM: "); cprintf("\r\n\r\nFlashing SLOTROM: ");
if(writeChip(buffer, pSlotRom, 256)) writeChip(buffer, pSlotRom, 256);
cprintf("\r\n\r\nVerifying SLOTROM: ");
if(verifyChip(buffer, pSlotRom, 256))
{ {
// write to EXTROM // write to EXTROM
cprintf("\r\nFlashing EXTROM: "); cprintf("\r\nFlashing EXTROM: ");
if(writeChip(buffer + 256, EXT_ROM_START, fileSize - 256)) writeChip(buffer + 256, EXT_ROM_START, fileSize - 256);
cprintf("\r\nVerifying EXTROM: ");
if(verifyChip(buffer + 256, EXT_ROM_START, fileSize - 256))
{ {
cprintf("\r\n\r\nFlashing finished!\n"); cprintf("\r\n\r\nFlashing finished!\n");
retval = 0; retval = 0;
@ -130,7 +135,7 @@ int main()
return retval; return retval;
} }
boolean writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length) static void writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length)
{ {
uint32 i; uint32 i;
volatile uint8 data = 0; volatile uint8 data = 0;
@ -154,11 +159,30 @@ boolean writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length)
} }
while((readData & 0x80) != (data & 0x80)); while((readData & 0x80) != (data & 0x80));
if(readData != data) pDest++;
}
}
static boolean verifyChip(const uint8* pSource, volatile uint8* pDest, uint16 length)
{
uint32 i;
volatile uint8 data = 0;
for(i=0; i<length; i++)
{
// set 0 if no source
if(pSource)
{
data = pSource[i];
}
printStatus((i * 100u / length) + 1);
if(*pDest != data)
{ {
// verification not successful // verification not successful
cprintf("\r\n\r\n!!! Flashing failed at %p !!!\r\n", pDest); cprintf("\r\n\r\n!!! Verification failed at %p !!!\r\n", pDest);
cprintf("Was 0x%02hhX, should be 0x%02hhX\r\n", readData, data); cprintf("Was 0x%02hhX, should be 0x%02hhX\r\n", *pDest, data);
return FALSE; return FALSE;
} }
@ -168,7 +192,7 @@ boolean writeChip(const uint8* pSource, volatile uint8* pDest, uint16 length)
return TRUE; return TRUE;
} }
void printStatus(uint8 percentage) static void printStatus(uint8 percentage)
{ {
static STATE_CURSOR_T state = STATE_0; static STATE_CURSOR_T state = STATE_0;
uint8 wait = 0; uint8 wait = 0;