Autor Tema: El Fichero .HEX explicado  (Leído 42112 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: El Fichero .HEX explicado
« Respuesta #15 en: 21 de Julio de 2009, 18:58:15 »
Los fuses pueden estar en cualquier lugar del archivo hex, pero los compiladores acostumbran colocarlos al final. Solo busca la dirección hexadecimal y multiplícala por 2 para encontrarlos. Esa dirección debe aparecer en el 4to, 5to, 6to y 7o caracter de una línea:

:04400E00222EFF3F20

Nunca he usado bootloaders, no sabría contestarte.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: El Fichero .HEX explicado
« Respuesta #16 en: 21 de Julio de 2009, 19:13:26 »
y lo mismo con la EEPROM verdad? multiplicar por 2 y se verían los datos a continuación

como es que funciona el Record type 04? no lo logro entender
.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El Fichero .HEX explicado
« Respuesta #17 en: 21 de Julio de 2009, 20:13:48 »
Cryn, los registros de tipo 00, de datos, tienen el Address inicial del primer byte a colocar con solo 16 bits, cuatro dígitos en hexadecimal ... sin embargo hay direcciones en los PIC's mayores que 0xFFFF por lo que entonces se usan los registros de tipo 04, sirven para completar direcciones mayores, hasta 32 bits. Es como añadirle un Offset a todas las direcciones de los registros que vengan a continuación.

Así si tenemos dos registros como estos (separo los dígitos significativos):

:02 0000 04 0030 CA
:0E 0000 00 00 0C 1E 1F 00 83 81 00 0F C0 0F E0 0F 40 98

El primero, el de tipo 04, indica que la dirección de los que le siguen deben completarse con  0030 para formar una dirección de 32 bits.

El siguiente registro, el de tipo 00, indica que hay que poner 0E bytes a partir de la dirección 0000, pero como tenemos un offset anterior dado por el registro de tipo 04, la dirección real será 00300000 para el primer byte, 00300001 para el segundo, 00300002 para el tercero .... etc.

Fíjate que los HEX acostumbran a empezar por un registro de tipo 04 en la forma:

:020000040000FA

que indica que lo que viene a continuación debe empezar en 0000. Esto sirve para prevenir que el PIC pueda haberse quedado con un offset anterior y que al recibir una nueva linea de datos lo envíe a cualquier sitio. Es como inicializar el puntero de memoria para empezar a recibir datos.  :mrgreen:
  


  
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: El Fichero .HEX explicado
« Respuesta #18 en: 21 de Julio de 2009, 22:01:45 »
y lo mismo con la EEPROM verdad? multiplicar por 2 y se verían los datos a continuación

como es que funciona el Record type 04? no lo logro entender

Según una prueba que hice con un hex, es cierto, se multiplica también por 2...

Código: [Seleccionar]
:10 4200 00 6400 6600 6700 6800 6A00 6B00 6C00 FF00 D5
y desperdician un byte poniéndolo a 0x00. Esto equivale a:



en donde 0x2100 es donde empieza la memoria eeprom en los PIC16.

Sobre el 04 creo que Redpic ya te lo explicó muy bien. El 04 no hace falta en ningún PIC16 porque no superan las 2^16 direcciones en ninguna de sus memorias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: El Fichero .HEX explicado
« Respuesta #19 en: 22 de Julio de 2009, 12:52:23 »
aaaah ok,entonces un  04 viene de la mano con un 00, si hay un 04 se usa la siguiente linea con ese offset, ahora si. Gracias redpic

ok, entonces con la EEPROM, gracias mig

ahora a meterle mano al bootloader, que no se esta dejando

saludos amigos.
.

Desconectado ramiroreal

  • PIC10
  • *
  • Mensajes: 8
Re: El Fichero .HEX explicado
« Respuesta #20 en: 10 de Septiembre de 2009, 06:35:15 »
Disculpen, ya he escrito otro post y ahora encontre este, lo curioso es que no lo encontre por el buscador del foro( que si  busque) sino de rebote en una busqueda (la numero 100000) en google.
Pido disculpas por el doble post, pero alguien podria explicar el proceso de checksum???
No lo entiendo ni de lejos. Muchisimas gracias

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: El Fichero .HEX explicado
« Respuesta #21 en: 11 de Septiembre de 2009, 08:20:34 »
Ramiro, te pego un código (extraido del bootloader usb de CCS) que calcula el CHKSM de cada línea, quizá así entiendas mejor el proceso:

checksum = 0;  // Sum the bytes to find the check sum value
for (i=1; i<(buffidx-3); i+=2)
checksum += atoi_b16 (&buffer);
checksum = 0xFF - checksum + 1;

saludos

Desconectado ramiroreal

  • PIC10
  • *
  • Mensajes: 8
Re: El Fichero .HEX explicado
« Respuesta #22 en: 12 de Septiembre de 2009, 06:47:37 »
Muchisimas gracias!
Sos un genio!
Con esto creo que puedo terminar mi aplicación!

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: El Fichero .HEX explicado
« Respuesta #23 en: 24 de Octubre de 2009, 17:16:31 »
Bueno, y eso es todo por hoy. Espero que os aproveche.  :mrgreen:

Me ha venido DE MARAVILLAS. Puedo leer los malditos HEX, y hasta me he hecho un primitivo "descompilador" que genera de nuevo el código ASM original (o casi, los nombres de las etiquetas y demas son irrecuperables).

Pero....me ha surgido un problemita....  :(

La linea que esta marcada en la siguiente imagen tiene como dir de memoria.....16398 en decimal...Como puede ser?


Yo razono de la siguiente manera, tal como explicaste en el primer post: en cada linea, los ":" indican que son datos. Los dos digitos siguientes la cantida de datos (02 en este caso). Los 4 siguientes la dir de memoria (400E en este caso, 16398 en decimal), "00" es que es una linea de datos de memoria, el "703F" son los dos bytes que efectivamente hay que "meter" en la memoria del PIC, y finalmente, dos digitos mas son el checksum ("01" en este caso).

Obviemente, cuando el programa intenta cargar esa linea, se va al demonio.   :oops:

¿Que puede estar pasando?
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El Fichero .HEX explicado
« Respuesta #24 en: 24 de Octubre de 2009, 18:36:02 »
Querido Ariel.

Tampoco lo comprendo exactamente ... pero es altamente sospechoso que esa dirección es el doble de la dirección donde el 16F628A tiene los fuses (bits de configuración) que según su Datasheet (Revisión F, pagina 97) dice que estos se almacenan en 0x2007 y como 0x2007 * 2 = 0x400E ... pues imagino que tiene algo que ver con ellos.

14.1 Configuration Bits
The configuration bits can be programmed (read as ‘0’) or left unprogrammed (read as ‘1’) to select various device configurations. These bits are mapped in program memory location 2007h.
 
The user will note that address 2007h is beyond the user program memory space. In fact, it belongs to the special configuration memory space (2000h-3FFFh), which can be accessed only during programming. See “PIC16F627A/628A/648A EEPROM Memory Programming Specification” (DS41196) for additional information.


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: El Fichero .HEX explicado
« Respuesta #25 en: 24 de Octubre de 2009, 19:24:04 »
Querido Ariel.

Tampoco lo comprendo exactamente ... pero es altamente sospechoso que esa dirección es el doble de la dirección donde el 16F628A tiene los fuses (bits de configuración)

Tan sospechoso es, que justamente se trata de eso. :)

GRACIAS!!!!!!!!!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El Fichero .HEX explicado
« Respuesta #26 en: 25 de Octubre de 2009, 05:16:50 »
Si descubres por qué la dirección es el doble en lugar de la que debería ser no dejes de pasarte por aquí y dejarnos la explicación.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: El Fichero .HEX explicado
« Respuesta #27 en: 25 de Octubre de 2009, 12:33:15 »
A ver si pueden ayudarme un poco.
Intentando aprender sobre CanOpen, se me ocurrio ver que pasaba si leia el software de un dispositivo simple que usa ese protocolo.
Lo conecte a mi GTP-USB+ y este lo leyo "completo", e aqui mi duda:

Esto que pego aqui es la parte inicial del codigo que baje, y segun mi entendimiento faltan al menos dos lineas completas del codigo leido por Winpic800, no entiendo porque!!

Código: [Seleccionar]
:1000000027D01ED01200FFFF04EF01F01200FFFF07
:100018000CEF01F01200FFFFFFFFFFFFFFFFFFFFE4
:100040000400550EA76EAA0EA76EA682000012002D
:100050000F0EC16E80B200EF01F093988198949CCE
:10006000948E900EAB6E670E260EAC6E080EB86EB8
:10007000FF0EAF6E010EB06EAE50AAD80F0AFDE1B2
:10008000A7D80F0AFAE100EE08F0006A016AA0D8CA
:100090000F0AF6E00450040A0AE00450050A01E1E0
:1000A00097D804500026EE6E014EE7D7F0D70052E5
:1000B000E4E10A50F66EA96E0B50F76EAA6E0CC002
:1000C000F8FF00EE0DF00950016ED8B4FF000850A3
:1000D0000708D3E3FA6AFB6A0844F92607D00CD074
:1000E00013D022D02CD036D007D040D0000E0A6ECC
:1000F000010E0B6E040E45D00900F5CFEEFF012E68
:10010000FBD70950050F3DD0F80EF616080EEECFBE
:10011000F5FF0D00E82EFBD70A00840EA66E90DFD7
:100120000900012EF1D72CD0940EA66E89DF400E67
:10013000F626E86AF722F822012EF6D721D0A66A21
:10014000A680A8CFEEFFA94AAA2A012EF8D7095007
:10015000050F17D0EECFA8FF040EA66E71DFA6B272
:10016000FED7A94AAA2A012EF5D70AD0C40EA66E38
:10017000EECFF5FF0C0064DF0900012EF7D700D0A9
:10018000010E016E81880F0E1ED81DD8006A00EE88
:1001900008F0EE5000260BD8012EFBD7006C005063
:1001A00006D8040E10D8ACA2FED7819866D7056E8B
:1001B0000F0A06E00550040A03E00550050A02E1B3

Entiendo mal o faltan las lineas 0002 y la 0003???

Desde ya gracias por su ayuda.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: El Fichero .HEX explicado
« Respuesta #28 en: 25 de Octubre de 2009, 16:56:51 »
No entiendo NADA de ASM, pero en algunos HEX que que abierto, hay "huecos".

Por ejemplo, en el que postee antes, hay 4 o 5bytes en blanco. La razon? Hay una rutina de interrupcion o algo asi al principio del programa, que empieza con un "GOTO xxx" para saltearla. El "salto" es mas largo de lo necesario (seguramente previendo que esa rutina sea alguna vez mas larga), entonces quedan espacios en blanco.

No estoy seguro, pero en este trozo de código, si mal no recuerdo

;**** Inicio del Micro ****
   org      0x00   
   goto   Inicio   

   org      0x04
   nop
   retfie

Inicio
   clrw
   clrf   PORTA
   clrf   PORTB
   bsf      STATUS,RP0
        clrf   TRISA
   clrf   TRISB
   bcf      STATUS,RP0
...
...
...


pasaba algo asi. El hex correspondiente


:020000040000FA
:020000000628D0
:0800080000000900030185015D
:1000100086018316850186018312AA30A000A107FC
:10002000A0052109A003A10AA004A102A00EA10617
:10003000A00DA10C05181A282120851D1A2828209A
:100040001A28061406160000061006120000080002
:02005000CC34AE
:02400E00703F01
:00000001FF


No tiene informacion para los Bytes 1 al cuatro inclusive:



¿Podrá ser eso?  :shock:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado gary_servin

  • PIC12
  • **
  • Mensajes: 65
Re: El Fichero .HEX explicado
« Respuesta #29 en: 08 de Noviembre de 2009, 23:52:19 »
Excelente Post!! Era justamente lo que estaba necesitando estos dias!! Muchisimas Gracias por la info!!!   :)