Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Checksum Algo fuer EPROMs? » Themenansicht

Autor Thread - Seiten: -1-
000
23.08.2005, 03:54 Uhr
Olli

Avatar von 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
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
23.08.2005, 13:26 Uhr
Deff



Hallo,
(mit Augenzwinkern!) versuch´s doch mal mit "md5"-Summe!
(und ernsthaft!) Kannst Du nicht ein multivalentes Proggi schreiben, wo Du verschiedene Summenbildungen durchspielst?
Hast Du auch bedacht, dass die Checksumme bytevertauscht im EPROM drin steht? Entschuldige die Frage, aber manchmal ...

Gruß
Deff


--
Die Politik ist ein Versuch der Politiker, zusammen mit dem Volk mit den Problemen fertig zu werden, die das Volk ohne die Politiker niemals gehabt hätte. (Dieter Hildebrandt)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
23.08.2005, 15:07 Uhr
Olli

Avatar von Olli

Hallo,

md5 ist nicht 16-Bit, und die Checksummen im EPROM sind vertauscht, aber der EPROM-Programmer meldet sie ja "richtig" - ich kann natuerlich auch gucken ob ich die vertauscht finde - jedoch ist das mit dem finden nicht so einfach da es ja die verschiedensten Pruefsummenberechnungs-Algorithmen gibt..... es muss ja nicht unbedingt CRC16 sein.


--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
24.08.2005, 16:54 Uhr
fma



Eine Methode ist das einfache aufaddieren aller bytes, und jedesmal wenn ein carry entsteht diese verwerfen und stattdessen der CS um eins inkrementieren.

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek