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:
- 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).
- Para cada par de bytes en esta representación, emito una instrucción
set memory address
, seguida de unwrite low byte
, seguida de unwrite high byte
. - 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.