4 votos

¿Para qué procesador PIC era este archivo HEX?

Tengo este archivo .hexadecimal:

:020000040000FA
:020000000528D1
:080008000528831686138312FC
:1000100015280F30A0000D2008007F30A100A00B94
:1000200012280800A10B12280D2886130920861714
:040030000920152866
:02400E00B03FC1
:00000001FF

Sé que se ha quemado en un PIC, pero no sé qué PIC.

¿Qué podemos decir sobre la identidad (número de pieza, familia, etc.) del chip con sólo estos datos?

10voto

RelaXNow Puntos 1164

Lo primero que hay que hacer es ver qué valores contiene el archivo HEX y en qué direcciones. Aquí está la salida de mi programa HEX_DUMP en su archivo HEX:

00000000-00000001 (2): 05 28
00000008-0000000F (8): 05 28 83 16 86 13 83 12
00000010-0000001F (16): 15 28 0F 30 A0 00 0D 20 08 00 7F 30 A1 00 A0 0B
00000020-0000002F (16): 12 28 08 00 A1 0B 12 28 0D 28 86 13 09 20 86 17
00000030-00000033 (4): 09 20 15 28
0000400E-0000400F (2): B0 3F

La última línea es probablemente la palabra config, lo que significa que es para un PIC 16 tradicional. Para esas PIC, las direcciones de los archivos HEX se duplican ya que cada dirección PIC contiene 14 bits y los archivos HEX sólo contienen 8 bits de datos por dirección. Por lo tanto, la última línea es establecer la dirección PIC 2007h a 3FB0h, que es exactamente el tipo de cosa que se esperaría que contuviera el final de un archivo HEX para una de estas PICs.

El modelo exacto del PIC 16 es imposible de decir. Ya que sabemos que es un PIC 16, podemos hacer que MPLAB nos muestre el código desmontado:

Para conseguir esto puse el procesador en MPLAB a un 16F877, ya que es un PIC 16 tradicional de memoria completa.

Nótese que las instrucciones son bastante plausibles, aunque esto está claramente escrito por alguien que no sabía realmente lo que estaba haciendo y probablemente ni siquiera usó el enlazador.

El GOTO a 0 probablemente está intentando saltar 1 pasando la rutina de interrupción a 4, aunque eso no parece existir ya que un GOTO 5 allí no tiene sentido (al menos para cualquiera que sepa lo que está haciendo, hay mucho código malo por ahí). La siguiente instrucción intenta establecer el banco, meterse con TRISB, meterse con el banco otra vez, y saltar a 15h.

No voy a intentar decodificar el resto de este lío, pero parece bastante seguro que tenemos la arquitectura de procesador correcta. No podemos saber el modelo exacto porque esto funcionaría en la mayoría de los PIC 16 básicos. Si decodificas la palabra de configuración, podrías obtener una pista para reducir más el modelo, pero realmente no creo que puedas llegar a un modelo exacto porque este código de hecho se ejecutará en un montón de ellos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X