Estoy tratando de programar algunos Atmega328 (no Atmega328p) con un ICSP. Estos son TQFP.
Lo que intento hacer es cargar el programa en un chip nuevo sin tener que cargar primero el gestor de arranque. Yo uso un comando como este
avrdude -v -p m328 -c usbtiny -U flash:w:blink.cpp.hex:i
avrdude dice que se cargó con éxito, pero el programa en realidad no se ejecuta.
Sin embargo, cuando grabo por primera vez el cargador de arranque, usando la GUI de Arduino, luego uso la línea de comando y el programador para cargar el programa, el programa se ejecuta. Estoy confundido acerca de por qué esto se debe a que entendí que el cargador de arranque no era necesario si la programación se realizó con el programador.
¿Por qué es necesario el gestor de arranque?
En segundo lugar, si se necesita el cargador de arranque, ¿hay alguna manera de hacer que avrdude haga todo lo posible para cargar el cargador de arranque y el programa en una sola línea?
Para responder a la primera pregunta, se necesita el cargador de arranque porque su programa está construido de tal manera que depende de que el cargador de arranque resida en la dirección de reinicio del procesador y luego haga que el cargador de arranque salte a su programa. Es una función de cómo se configura el script del enlazador y el código de tiempo de ejecución para el entorno Arduino.
No sé la respuesta precisa a su segunda pregunta, pero ciertamente debería ser posible.
Una solución alternativa sería usar un script de enlace diferente para que su programa realmente resida en la dirección de reinicio.
Creo que Dave Tweed tiene razón acerca de que el binario se compila para su uso con el cargador de arranque Arduino.
Utilizo el siguiente script bash para programar ATtiny y, a menudo, uso bibliotecas individuales de Arduino. No puedo probar su configuración específica, pero si cambia las diversas variables, podría funcionar.
#!/bin/bash
freq=9600000/8
baud=19200
src=main.cpp
avr=attiny13
dev=/dev/ttyUSB003
avr-gcc -g -DF_CPU=$freq -Wall -Os -mmcu=$avr -c -o tmp.o $src &&
avr-gcc -g -DF_CPU=$freq -Wall -Os -mmcu=$avr -o tmp.elf tmp.o &&
avr-objcopy -j .text -j .data -O ihex tmp.elf tmp.hex &&
avrdude -p $avr -cstk500v1 -P$dev -b$baud -v -U flash:w:tmp.hex
yippie
alexis k
yippie