TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: david_tec en 25 de Mayo de 2010, 16:46:42
-
Hola a tod@s,
Estoy trabajando con unas memorias AMD, y necesito quemar los valores a esta memoria. Sin embargo no conozco la manera en como se calculan el checksum, ya que son un poco "viejas" y al parecer en esos tiempos no existían muchos estándares de verificación.
Actualmente puedo quemar la memoria, pero a la hora de utilizar en el sistema no es reconocida. Estos son los datos de dos memoria en buen estado:
Eprom 1:
Address +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +E 0123456789ABCDEF
00000000 10 0F 1A 39 00 00 00 00 00 00 00 00 00 00 00 00 ...9............
00000010 02 38 54 A2 05 68 63 A6 05 68 63 A6 6B 5C D8 A9 .8T¢.hc¦.hc¦k\ØŠ
00000020 6E 90 A6 AD 71 E5 06 D9 75 5C A8 87 78 C2 8B A9 n¦qå.Ùu\¨‡x‹©
00000030 7B 9F A6 D3 7F 9C 71 84 01 ED B7 84 07 00 00 C8 {ŸéÓ.œq„.í•„...È
00000040 0A 00 00 FA 0E 00 40 9C 11 25 52 C3 14 5C 24 F4 ...ú..@œ.%RÃ.\$ô
00000050 18 02 89 98 97 FF FF FF FF FF FF FF FF FF FF FF ..‰˜—ÿÿÿÿÿÿÿÿÿÿÿ
00000060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000100 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Eprom 2
Address +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +E 0123456789ABCDEF
00000000 10 0F 1A 39 00 00 00 00 00 00 00 00 00 00 00 00 ...9............
00000010 02 4C 65 A1 05 E2 70 A5 05 E2 70 A5 6B 7E 48 8A .Le¡.âp¥.âp¥k~HŠ
00000020 6E C8 AD AC 71 F5 CB D7 75 4B E1 86 78 B3 92 A8 nȬqõË×uKá†x³’¨
00000030 7B 34 B8 D2 7F 4C B4 83 01 EF CD 83 07 00 00 C8 {4¸Ò.L´ƒ.ï̓...È
00000040 0A 00 00 FA 0E 00 40 9C 11 CC 4E C3 14 88 19 F4 ...ú..@œ.ÌNÃ.ˆ.ô
00000050 18 11 77 98 14 FF FF FF FF FF FF FF FF FF FF FF ..w˜.ÿÿÿÿÿÿÿÿÿÿÿ
00000060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000100 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Según lo que he leído, el checksum corresponde al último byte de cada memoria, es decir en la meoria 1 el checksum es 97, mientras q en la memoria 2 es 14. He investigado sobre algunos algotirmos para calcular checksum, sin embargo no he obtenido buenos resultados. Como se puede observar en las dos memorias la primer fila se repite, además cada 4 bytes la columna se mantiene. Alguien con alguna sugerencia para el cálculo del checksum. Ya he intentado varios métodos, sin embargo por la antiguedad de la memoria se pudo haber implementado cualquier algoritmo, así que los estándares de ahora no son muy útilies en este caso.
Gracias por la ayuda o información que me puedan brindar.
-
Hola, el checksum dependerá de la aplicación que lee las memorias. Danos más datos al respecto. ;-)
-
Disculpas por obviar toda la información.
Estas memorias lo que tienen almacenado son valores de voltajes y corrientes, DC ambos.
En específico son 3 valores de voltajes y 8 valores de corrientes. Estos valores vienen dados en punto flotante, un ejemplo de estos valores es: 2.1045700E+01.
Estos valores se utilizan como referencia luego para poder realizar la calibración de un equipo.
Saludos,
PD: si aún hace falta info me avisan para ver que más puedo encontrar.
-
Hola, es que hay muchas formas de calcular un checksum de 8 bits. Mira este hilo por ejemplo...
http://www.todopic.com.ar/foros/index.php?topic=25627.0
... no es lo mismo un crc estándar que un crc para usb. Depende la aplicación y a veces lo que el programador haya querido definir como checksum.
Puede ser algo tan trivial como sumar todos los datos y usar el byte menos significativo como checksum y puede ser algo tan complejo como usar crc+hashes+md5, varias técnicas de checksum al mismo tiempo.
-
ok gracias,
Ye leí el post, y ciertamente el asunto no está tan sencillo, máxime sino se sabe a ciencia cierta cual algoritmo se utilizó, sobre todo por la fecha en que se fabricó el sistema.
Pero bueno, igual gracias. Voy a intentar realizar algún cálculo de CRC para al menos descartar poco a poco.
Saludos,
-
Hola, mas que saber que algoritmo se uso como checksum ( CRC8-16-32, LRC, simple XOR, etc, etc ) tendrias que saber cada cuantos bytes se hace, porque hablaste de 11 mediciones del tipo float que normalmente ocupan 4 bytes cada una, en total dan 44 bytes. Por los dumps que mostras que hay grabados 80 bytes, asi que es medio complicado estimar.
Saludos !
-
Disculpen, pero cometí un error de omisión, no son 11 valores como le mencioné al inicio.
Son 17 valores, los 6 valores agregados son de 6 resistencias. Esto nos lleva a obtener un total de 64 bytes de datos. En total según los dumps hay almacenados 85 bytes. Pero se puede observar que en las dos memorias la primer fila se repite (además esto está comprobado con otros datos de otras memorias), lo que podría ser alguna identificación del sistema en donde va la memoria.
Por esta razón es que considero que el checksum corresponde al último byte en cada memoria.
Saludos