Autor Tema: Para bootloader de AtMega128A .HEX con Flash y EEPROM  (Leído 3164 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Para bootloader de AtMega128A .HEX con Flash y EEPROM
« en: 05 de Febrero de 2015, 07:48:38 »
Tengo un bootloader para un ATMEGA128A que funciona perfecto, le mando el programa .HEX para la Flash y va de lujo.

Necesitaría también enviarle en ese mismo .HEX el contenido por defecto de la EEPROM.

¿Se pueden incluir ambos contenidos, FLAH y EEPROM en el mismo fichero .HEX?

Con el AVR Studio 6 veo que se lee el contenido de la FLASH y de la EEPROM por separado y que cuando guardo esos contenidos leídos ambos empiezan sus direcciones por 0x0000 lo que me deja un poco despistado.

En fin, eso, por si me podéis arrojar algo de luz.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Para bootloader de AtMega128A .HEX con Flash y EEPROM
« Respuesta #1 en: 06 de Febrero de 2015, 12:20:08 »

Código: [Seleccionar]
¿Se pueden incluir ambos contenidos, FLAH y EEPROM en el mismo fichero .HEX?

Yo Creo Que No
Cuando Yo Grababa El Atmega88 Mio Con El WinAVR Lo Hacia De Esta Manera
 
1) Grababa La Flash Y Luego Grababa La Eeprom
 
Por Eso Con el AVR Studio 6 se lee el contenido de la FLASH y de la EEPROM por separado

Código: [Seleccionar]
y cuando guardo esos contenidos leídos ambos empiezan sus direcciones por 0x0000
me podéis arrojar algo de luz.

MCUCR - MCU Control Register Pagina 63 de 369 Del ATmega128A_Datasheet.pdf

Eso Depende Del Codigo Escrito En El Atmega
Al Reset El Programa Testea Un Pin Del uC
Se Refiere Al Pin IVCE (Interrupt Vector Change Enable) Del Registro MCUCR
El Bit (IVCE) Sirve Para Mover Las Interrupciones Junto Con El Bit (IVSEL)
Dependiendo Del Valor Que Tenga El Bit (IVSEL)
Saltara Al Principio De La Memoria Flash o Bien Al Principio Del BootLoader

Cuando El Bit IVSEL Esta A (0) Saltara Al Principio De La Memoria Flash 0X0000
Cuando El Bit IVSEL Esta A (1) Saltara Al Principio Del BootLoader Determinado Por Los Bits BOOTSZ Fuses

No Sé Si Con Esto Arrojaré Algo De Luz

Ejemplo :
;...........................................................................................
IN R16,MCUCR      ;
MOV R17,R16       ; 
ORI R16,(1<<IVCE) ; [1] Activamos Cambios Para Interrupciones
OUT MCUCR,R16     ; [2] Interrupciones Deshabilitada Hasta Despues De Que Escribe El Bit IVSEL

LDI R17,(1<<IVSEL); [3] Situa Los Registros De Interrupciones En Memoria
OUT MCUCR,R17     ; [4] Saltara Al Principio Del BootLoader Determinado Por Los Bits BOOTSZ Fuses
;...........................................................................................

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Para bootloader de AtMega128A .HEX con Flash y EEPROM
« Respuesta #2 en: 06 de Febrero de 2015, 16:30:43 »
Si, Belgitaes, es lo que imaginaba. Miré lo que el AVR Studio genera tras leer la FLASH y la EEPROM y ese es el problema, que ambas lecturas empiezan en la dirección 0x0000. Imagino que el JTAG cambiará algo en el micro para que lee lo uno o lo otro.

Sospecho que la solución pasa por unificar ambos ficheros hex pero modificarlo para que el "Start Code" o el "Record Type" sean especiales para el contenido de la memoria EEPROM y también el Bootloader para que discrimine entre ambos tipos de lineas y escriba en la flash o la eeprom ...
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Para bootloader de AtMega128A .HEX con Flash y EEPROM
« Respuesta #3 en: 07 de Febrero de 2015, 02:56:42 »
No Sé Que Realmente Quieres Hacer
Pero Si Quieres Gravar Los 2 Ficheros En El Micro
Es decir La Flash Y Luego La Eeprom
Lo Puedes Hacer Perfectamente Con El WinAVR
Mandando Los Comandos En MSDOS
No Entiendo La Necesidad De Unir Todo En Un Solo Fichero .hex

Para Escribir En La Flash Y Luego En La Eeprom
Tambien Lo Puedes Hacer Por Codigo
O Quieres Cambiar Algo Del.hex
Algo Se Me Escapa O No Entiendo Todavia Lo Que Quieres Hacer

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Para bootloader de AtMega128A .HEX con Flash y EEPROM
« Respuesta #4 en: 07 de Febrero de 2015, 08:12:01 »
No Sé Que Realmente Quieres Hacer
...
Algo Se Me Escapa O No Entiendo Todavia Lo Que Quieres Hacer

Como decía en mi primer post: Tengo un Bootloader. Le mando el programa Flash mediante un programa en Delphi al Bootloader. El Bootloader recibe linea a linea el contenido de la Flash, cada línea con su Address correspondiente de la Flash en el formato estándar INTEL HEX. Este fichero HEX con el contenido de la Flash está generado con el compilador AVR-GCC.

La placa con el ATMEGA128A y el Bootloader puede estar en Chile o en Francia, el programa Delphi que envía el contenido de la Flash puede estar en España o en Argentina, por poner un ejemplo aunque muy real ya que efectivamente van a estar en esas localizaciones u otras similares. No, no puedo utilizar el WinAVR.

Nos Olvidamos Por Lo Tanto Del WinAVR.

Además del programa en la Flash me gustaría poder enviarle el contenido de la EEPROM. El fichero HEX con el contenido de la EEPROM, tambien en formato INTEL HEX, está extraído mediante el WinAVR de un ATMEGA128A ya en funcionamiento.

El problema que tengo es que dicho fichero HEX con el contenido de la EEPROM tiene las direcciones en función de las direcciones internas de la EEPROM, o sea que comienzan en 0x0000 y así sucesivamente hasta completar el contenido de los 4Kbytes de la EEPROM.

No puedo mandar mediante el Bootloader ese fichero de la EEPROM porque sus direcciones coinciden con las mismas correspondientes a los primeros 4Kbytes de la Flash. El Bootloader sólo escribe la Flash, no la EEPROM.

En PIC no tenemos ese problema porque la EEPROM está "mapeada" de forma similar a la Flash y se puede enviar mediante un Bootloader para que se escriba ya que sus direcciones son distintas a las de la Flash. De esta forma en el mismo fichero HEX que se le envía a un PIC puede contener tanto el programa para la Flash como el contenido para la EEPROM ya que sólo se diferencian entre sí en la direccion de memoria donde deben ir ubicadas.

Mi pregunta era sobre si con un Atmel ATMEGA128A se puede hacer lo mismo. Por lo visto no se puede.

No se si me he explicado ahora mejor.
« Última modificación: 07 de Febrero de 2015, 08:17:08 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Para bootloader de AtMega128A .HEX con Flash y EEPROM
« Respuesta #5 en: 07 de Febrero de 2015, 12:41:31 »
Ahora Ya Lo Entendi
Código: [Seleccionar]
Como decía en mi primer post: Tengo un Bootloader.
Le mando el programa Flash mediante un programa en Delphi al Bootloader.
El Bootloader recibe linea a linea el contenido de la Flash, cada línea con su
Address correspondiente de la Flash en el formato estándar INTEL HEX.

Vale Entiendo Que Este Programa en Delphi Es Como Una Consola De Trabajo
Que Le Manda Commandos Que Pueden Ser A Traves Del Puerto Serie Por Ejemplo
Y El Cual Hace Que El Contenido De La Flash Se Vaya Actualizando
Por Eso La Placa Puede Estar En Chile O En Francia
Y La Consola De Trabajo Que Es La Que Actualiza El Software En España
Nos Olvidamos Por Lo Tanto Del WinAVR.

Código: [Seleccionar]
Además del programa en la Flash me gustaría poder enviarle el contenido de la EEPROM.
está extraído mediante el WinAVR de un ATMEGA128A ya en funcionamiento.


El problema que tengo es que dicho fichero HEX con el contenido de la EEPROM  
que comienzan en 0x0000 hasta completar el contenido de los 4Kbytes de la EEPROM.
coinciden con las mismas correspondientes a los primeros 4Kbytes de la Flash

Código: [Seleccionar]
En PIC en el mismo fichero HEX que se le envía a un PIC puede contener tanto el programa
para la Flash como el contenido para la EEPROM ya que sólo se diferencian entre sí
en la direccion de memoria donde deben ir ubicadas.

Mi pregunta era sobre si con un Atmel ATMEGA128A se puede hacer lo mismo. Por lo visto no se puede.

No se si me he explicado ahora mejor.

 
Vale Ahora Lo Entendi
Para hacer Esto Que Quieres hacer
Si Se Puede Escribir Desde El Bootloader Para Que Grave En La Flash Como En La EEprom
Pero Habria Que Reescribir Todo El Bootloader  
« Última modificación: 07 de Febrero de 2015, 12:44:25 por Belgitaes »