Mercurial > ~darius > hgwebdir.cgi > stm32temp
diff flash.c @ 69:cf9eb08b8b23
CRC a word at a time rather than the whole block (since we are reading/writing a word at a time).
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sun, 14 Apr 2013 22:52:21 +0930 |
parents | dcac5f08f87a |
children | aaf0603d7f88 |
line wrap: on
line diff
--- a/flash.c Sun Apr 14 16:07:29 2013 +0930 +++ b/flash.c Sun Apr 14 22:52:21 2013 +0930 @@ -346,8 +346,10 @@ assert(len % 4 == 0); flashstartread(addr); + CRC_ResetDR(); for (int i = len; i > 0; i--) { *data = flashreadbyte(); + CRC_CalcCRC(*data); data++; } @@ -358,16 +360,13 @@ flashstopread(); - /* Calculate CRC */ - CRC_ResetDR(); - ramcrc = CRC_CalcBlockCRC((uint32_t *)_data, len / 4); - - /* printf("RAM CRC 0x%08x Flash CRC 0x%08x\r\n", (uint)ramcrc, (uint)flashcrc); */ - - if (ramcrc == flashcrc) - return 1; - else - return 0; + ramcrc = CRC_GetCRC(); + + /* printf("RAM CRC 0x%08x Flash CRC 0x%08x\r\n", (uint)ramcrc, (uint)flashcrc); */ + if (ramcrc == flashcrc) + return 1; + else + return 0; } void @@ -392,20 +391,22 @@ /* Erase sector */ flash4kerase(addr); + CRC_ResetDR(); + /* Write data */ for (uint i = 0; i < len / 2; i++) { if (i == 0) flashstartwrite(addr, *data); else flashwriteword(*data); + CRC_CalcCRC(*data); data++; } /* Calculate CRC */ - CRC_ResetDR(); - crc = CRC_CalcBlockCRC((uint32_t *)_data, len / 4); - - printf("CRC is 0x%08x\r\n", (uint)crc); + crc = CRC_GetCRC(); + + //printf("CRC is 0x%08x\r\n", (uint)crc); /* Write CRC */ flashwriteword(crc);