000
23.08.2005, 03:54 Uhr
Olli
|
Hallo,
weiss einer wie die Checksummen bei den EPROMs (Beispiel P8000) berechnet wurden? Ich habe mir hier ein kleines CRC-16 Programm geschrieben welches mit den Polynomen von 0x0000 bis 0xFFFF durchtestet, aber ich komme mit keinem auf die Checksumme auf die ich kommen sollte.
#include <unistd.h> #include <stdio.h>
static void usage(void) { fprintf( stderr, "usage: crc -f file "); exit (1); }
void main(argc, argv) int argc; char *argv[]; { FILE *infp; unsigned short crc, data; static long i; static int j, z; char filename[255]; int ch;
if (argc != 3) { usage(); }
while ((ch = getopt(argc, argv, "f:")) != -1) { switch (ch) { case `f`: strncpy( filename, optarg, sizeof( filename )); break; default: usage(); } } argc -= optind; argv += optind;
#define POLY 0x0001
if ((infp = fopen (filename, "r")) == NULL) { fprintf (stderr, "crc: can`t open "%s" ", filename ); exit (1); }
for(z=0;POLY+z<0xFFFF;z++) { i = 0; crc = 0; while (!feof(infp)) { data = fgetc (infp); i++; crc ^= data; for (j = 8; j > 0; j--) { if (crc & 1) crc = (crc >> 1) ^ POLY+z; else crc = crc >> 1; } } if (feof (infp) == 0) { fprintf (stderr, "crc: error reading file "%s" ", filename); exit (1); }
printf (" CRC for %s %X POLY = %X hex ", filename, POLY+z, crc); rewind(infp); } fclose(infp); exit (0); }
olivleh1@kartoffel tmp> ./test -f EPROMS/eigene/16Bit/bin/MON16_1L_3.0 | grep -i 63A4 CRC for EPROMS/eigene/16Bit/bin/MON16_1L_3.0 63A4 POLY = 836 hex olivleh1@kartoffel tmp>
hilft mir nicht wirklich weiter ;) (nun hoffen wir mal, das beim posten nicht der source kaputt geht ;)
Waren es denn ueberhaupt crc16 Checksummen damals?
-- P8000 adventures: http://pofo.de/blog/?/categories/1-P8000 |