Actualice el programa ATmega168 con una serie

2

Estoy trabajando con un ATmega168 con una placa basada en Linux (TI DM365). El ATmgea168 se comunica con la TI a través de UART.

El Atmel está programado usando AVRMKII y está funcionando bien. Me preguntaba si habría alguna forma de utilizar las líneas UART y programar el Atmel desde un entorno Linux.

En este momento, el UART está configurado para recibir comandos básicos (de un solo carácter) de TI en rutinas de interrupción y hacer eco de los resultados. Supongo que necesito modificar esto para que la programación sobre UART funcione.

EDITAR: (debería haber notado esto antes) La atmósfera está controlando la potencia de todos los dispositivos, incluida la TI. Por lo tanto, si trato de reprogramar el atmel mientras el sistema está funcionando, el TI definitivamente perderá potencia. Entonces, con una configuración como esta, será muy difícil reprogramar la atmósfera. Pero cualquier idea o sugerencia sería genial.

    
pregunta Tauseef Latif

1 respuesta

2

Arduino 'carga' sus programas a través de una interfaz USB a serie.

Por lo tanto, si cargó un cargador de arranque Arduino ATmega168 (hay varios para elegir), haría exactamente lo que desea.

Esta página de Arduino Bootloader explica cómo hacerlo y proporciona enlaces al código fuente del bootloader.

Recuerde, hay varios ATmega diferentes utilizados en Arduino ', así que asegúrese de obtener la versión ATmega168.

Un ATmega88 / 168/328 tiene dos secciones de memoria Flash denominadas "Lectura en escritura" (RWW) y "No lectura en escritura" (NRWW). Se describen en la Sección "27.4 Secciones en Flash de Lectura Mientras Escribe y No Lectura Mientras Escribe" del manual de ATmega48 / 88/168/328.

La diferencia entre las dos secciones de Flash es que un ATmega88 / 168/328 puede ejecutar un programa en NRWW al mismo tiempo que la programación de RWW Flash . Sin embargo, la CPU Atmega se detiene cuando se está programando NRWW Flash, es decir, no ejecutará ningún programa mientras NRWW se esté programando. Por lo tanto, la memoria flash NRWW solo se puede programar utilizando un programador externo.

Además, el manual advierte contra el intento de leer RWW Flash mientras se está programando, por ejemplo, la CPU no debe intentar ejecutar un programa desde RWW Flash mientras se está programando RWW Flash:

  

Durante una programación en curso, el software debe garantizar que el RWW   Nunca se está leyendo la sección. Si el software del usuario está intentando leer   código que se encuentra dentro de la sección RWW (es decir, mediante una llamada / jmp / lpm   o una interrupción) durante la programación, el software podría terminar en un   estado desconocido.

Continúa explicando que las interrupciones deben ser deshabilitadas o manejadas dentro de la misma sección NRWW que el cargador de arranque. Por lo tanto, el código UART existente y el código del gestor de arranque deberán combinarse, y la combinación debe estar contenida completamente dentro de la sección NRWW, o no funcionará de manera confiable para reprogramar la 'aplicación' en RWW Flash,

También ATmega tiene su memoria Flash particionada en dos áreas que pueden protegerse utilizando bits de fusible, independientemente de la otra, para que no se sobrescriban accidentalmente. Podría valer la pena usar esta función para proteger la rutina de interrupción de UART y el cargador de arranque de daños accidentales.

El problema de cargar código no se resuelve solo con un cargador de arranque en Flash. También necesitará un programa en el PC host para cargar el programa. Muchas cadenas de herramientas ATmega, incluido el IDE de Arduino, utilizan avrdude . Si instala eso y sigue la documentación, avrdude se cargará a un cargador de arranque Arduino.

Lo bueno de este enfoque es que puede instalar el IDE de Arduino en una máquina y probar todo el proceso utilizando una cadena de herramientas que funciona y que admite ATmega168. Por lo tanto, debería ser relativamente sencillo hacer que funcione.

Editar:
También hay un proyecto de cargador de arranque AVR llamado kavr que dice ser de solo 512 bytes. No tengo experiencia de ello.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas