Configuración del bit de fusible en el microcontrolador ATmega128

3

Estoy trabajando con ATmega128 board. Los estados de la hoja de datos

  

ATmega128 se envía por defecto en el modo de compatibilidad ATmega103

En el modo ATmega103, no se pueden usar ambas comunicaciones serie MCU e incluso algunas operaciones de puerto IO están restringidas. Quiero deshabilitar el modo ATmega103, ya que necesito comunicaciones en serie, oscilador externo, etc. Para hacer esto necesito programar los bits de fusible, y necesito ayuda en este problema. Estoy usando el compilador AVR GCC en Linux y el programador AVRDUDE para programar el ATmega128.

    
pregunta Sanju

1 respuesta

7

No estoy seguro de cuál es su nivel de experiencia con ATmegas (aunque la lectura de la hoja de datos es una buena señal), por lo que comenzaré con algo muy básico, omita si esto es inútil:

El término "programador" en este contexto puede referirse a dos cosas diferentes:

  • Software. En tu caso es avrdude.
  • Hardware. La pieza de hardware que se encuentra entre el programador de software (avrdude, en este caso) y su ATmega. Algunos ejemplos de estos son USBtinyISP , USBasp , programador de Pocket AVR , AVRisp , etc. Para programar el chip, incluidos los fusibles, necesita ambos, y para decir exactamente cuál debería ser el comando avrdude, necesitamos saber qué programador de hardware tiene.

Si realmente eres nuevo en el desarrollo de AVR, echa un vistazo al tutorial AVR de Lady Ada como < a href="https://electronics.stackexchange.com/users/16835/kurt-e-clothier"> Kurt E. Clothier apunta .

El sitio de referencia para mí para la configuración de los fusibles es la Calculadora de fusibles incrustada . En esa página, después de ingresar la configuración de fusible deseada, verá los argumentos que debe proporcionar a avrdude para quemar los fusibles correctamente. Por ejemplo, para establecer la configuración predeterminada de los fusibles, además de deshabilitar el modo de compatibilidad ATmega103, use lo siguiente:

-U lfuse:w:0xc1:m -U hfuse:w:0x99:m -U efuse:w:0xff:m 

Desea agregar los comandos de fusible a una línea de comando regular avrdude que especifica el programador (hardware), MCU, etc. Para mí, por ejemplo, la llamada a base avrdude (sin un comando real) tiene este aspecto :

/usr/local/bin/avr/bin/avrdude.exe \
-p m328pu \
-C C:\cygwin\home\angelatlarge\arduino\arduino-1.0\hardware\tools\avr\etc\avrdude.conf \
-c usbtiny

(ignora la estúpida ruta de estilo de Windows a avrdude.conf en una línea de comandos de tipo Unix. En cygwin, solo la versión de Windows de avrdude funciona, AFAIK. En la mayoría de los sistemas, avrdude puede encontrar su conf archivo sin el parámetro -C de todos modos)

Donde

  • La primera línea es la ruta a avrdude
  • La opción -p especifica la MCU que está programando. Para ti será -p m128
  • El parámetro -C especifica la ubicación del archivo avrdude.conf . Solo es necesario en sistemas stoopid como el mío (cygwin ejecutando la versión para Windows de avrdude).
  • -c es el nombre del programador (hardware) que está utilizando. Dependiendo del programador (hardware), es posible que también deba especificar un puerto serie utilizando la opción -P . Si quiero programar un chip AVR a través de bluetooth, por ejemplo, uso -P COM18 .

A esto agregamos el comando para programar los fusibles, el resultado, para mi configuración, es el siguiente:

/usr/local/bin/avr/bin/avrdude.exe \
-p m128 \
C:\cygwin\home\angelatlarge\arduino\arduino-1.0\hardware\tools\avr\etc\avrdude.conf \
-c usbtiny \
-U lfuse:w:0xc1:m -U hfuse:w:0x99:m -U efuse:w:0xff:m
    
respondido por el angelatlarge

Lea otras preguntas en las etiquetas