Necesita explicación sobre cómo flashear archivos HEX en ATmega32u4 a través del protocolo AVR109

1

No soy un experto en electrónica, por lo tanto, perdóneme si hago un uso incorrecto de los términos de mi pregunta o si mi pregunta contiene imprecisiones y / o interpretaciones erróneas sobre el funcionamiento de la Junta Leonardo. Las correcciones son bienvenidas, por supuesto.

Estoy intentando escribir un destellador de chips muy simple que, dado un archivo HEX, podrá mostrarlo en un tablero Leonardo, a través de su cargador de arranque. Entiendo que el Arduino Leonardo usa un ATmega32u4 y que el bootlaoder usa el AVR109 protocol .

Sobre la base de esta información, he podido escribir algunos códigos que destellan bytes en la pizarra, pero una vez que aparecieron, el código no funciona.

Mi código se parece a esto:

  1. Analice el archivo HEX (intel) en una representación de cómo debería verse la memoria en el chip (es decir, para cada registro extraigo la dirección de la memoria para escribir y los datos en el registro).
  2. Para cada par de bytes en esta representación, emito una instrucción set memory address , seguida de un write low byte , seguida de un write high byte .
  3. Cada 256 bytes emitidos de esta manera, emito una instrucción write page .

Me cuesta mucho encontrar lo que hago mal, porque no estoy seguro de ninguno de estos pasos. El paso # 1 produce datos que se ven bien (como se puede ver algunas cadenas familiares aquí y allá):

...sinembargo,sicomparomisdatosconelmismoarchivoHEXflasheadoporAVRdudeycargadonuevamentedesdeelchip,losdossonmuydiferentes.

Elpaso#2funciona(elgestordearranquerespondeconunbyte0xDencadacomando,peroNosésiestoyhaciendolocorrectoaldestellarelbytebajoantesdelalto.

ElPaso#3tambiénparecefuncionarbien,peronoestoysegurodesilaspáginasdememoriatienenuntamañode256bytes(derivéestafiguradelahojadedatosdelchip,tabla28-11).

Estaréextremadamenteagradecidoconcualquieraquepuedarevisarmi"algoritmo" y proporcionar comentarios sobre lo que hago bien o mal, y dónde es una fuente común de errores en este tipo de aplicación.

    
pregunta mac

3 respuestas

1

He estado usando dfu-programmer con éxito en Linux (utilizando un atmega32u2 / atmega32u4 "sin huesos" del línea de comando. Así que es muy fácil integrarlo en un Makefile .

Una cita de ese sitio web:

  

dfu-programmer-0.6.2.tar.gz contiene el árbol de origen para este proyecto. Descargue esto para compilar e instalar en un sistema Linux / Unix / Mac.

Así que deberías poder construirlo en una Mac. O puede echar un vistazo en el código fuente.

    
respondido por el Beryllium
1

La documentación de AVR109 no es muy clara, pero entre la documentación de AVR109 y el código fuente de avrdude, escribí algún código java simple (usando jssc para serial) para escribir en la memoria flash en dispositivos AVR. El código específico para comunicarse con el dispositivo y leer el archivo .hex (no se admiten todas las funciones de los archivos .hex) es aquí . No lo he probado a fondo, pero lo escribí y leí correctamente en el dispositivo (BrainLink) con el que lo estaba utilizando.

p.s. Con respecto a sus puntos específicos, AVR109 siempre necesita el byte primero primero (tanto para direcciones como para tamaños de bloque). Además, la dirección está en palabras, no en bytes, por lo que la dirección de bytes debe dividirse entre dos. Y antes de escribir cualquier flash, debes borrar el flash.

    
respondido por el Alexander Pruss
0

Si está haciendo un chip flasher solo para programación, debería dejar de trabajar en este momento. Atmel proporciona una utilidad llamada FLIP. Coloca los archivos hexadecimales en los chips para usted directamente desde el puerto USB que recibe el chip compatible con el chip en el chip, como la familia ATmega ## U #.

Puedes escribir con el programa que desees en Atmel Studio, guardar el hexágono, abrir Atmel FlIP y flashear el hex.

FLIP

    
respondido por el Funkyguy

Lea otras preguntas en las etiquetas