Go Down

Topic: programmare il 644 ... ma come???? (Read 25 times) previous topic - next topic

leo72


Michele Menniti

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Operazioni eseguite dal main del file optiboot.c (versione 4.5 di maniacbug):

1) resetta un paio di registri
2) controlla se il reset è avvenuto per cause esterne (quindi reset per alimentazione assente). In questo caso il chip è stato avviato per la prima volta e viene eseguito lo sketch, saltando il bootloader. Ciò è confermato dal fatto che nel momento in cui si da alimentazione al 1284P, il led sul pin 2 non lampeggia ma lampeggia solo alle successive pressioni del pulsantino di reset
3) se deve far lampeggiare il led, imposta il timer 1 con prescale /1024 (verrà usato come fonte di tempo)
4) se non è definito il flag SOFT_UART, imposta la modalità DOUBLE SPEED per la seriale (la SOFT UART è descritta nell'Application Note AVR305 di Atmel, ma non è il nostro caso).
5) imposta il watchdog per triggerare dopo 500 ms (anche se il valore scelto in realtà direbbe 1s... boh..)
6) imposta il pin del led come output
7) se si usa la SOFT UART, imposta TX come output
8 ) se deve far lampeggiare il led, esegue i lampeggi di saluto
9) ora entra in un ciclo infinito:
9.a) preleva un carattere dalla seriale
9.b) controlla se è il comando di lettura versione (STK_GET_PARAMETER): nel caso spedisce indietro la versione dell'Optiboot
9.c) controlla se è il comando di SET DEVICE (STK_SET_DEVICE): nel caso lo ignora
9.d) controlla se è il comando di SET DEVICE EXT (STK_SET_DEVICE_EXT): nel caso lo ignora
9.e) controlla se è il comando di LOAD ADDRESS (STK_LOAD_ADDRESS): nel caso carica il nuovo indirizzo
9.f) controlla se è il comando di UNIVERSAL (STK_UNIVERSAL): nel caso lo ignora
9.g) controlla se è il comando di SCRITTURA SU FLASH (STK_PROG_PAGE): qui entra in una funzione che carica i dati e poi li scrive nella pagina indicata
9.h) controlla se è il comando di LETTURA DA FLASH (STK_READ_PAGE): qui entra in una funzione che legge la pagina indicata e la spedisce indietro
9.i) controlla se è il comando di LETTURA SIGNATURE (STK_READ_SIGN): qui entra in una funzione che legge la firma e la rispedisce indietro
9.j) controlla se è il comando di USCITA DALLA PROGRAMMAZIONE (STK_LEAVE_PROGMODE): setta il watchdog per 16 ms per far resettare il micro
9.k) per tutti gli altri comandi, risponde un generico "OK" non considerando ciò che riceve

Michele Menniti

Gran bel lavoro Leo, ora però mi dovresti aiutare nell'interpretazione. Quali sono i passaggi che esegue il bl quando:
1 - micro collegato al Convertitore, collego la porta USB e dò alimentazione (ti confermo che non c'è reset)
2 - apro uno sketch sull'IDE e lo invio al micro (ti confermo che questa operazione inizia con un reset)
vedo i lampeggi del LED sul pin 2, a seguire solo tre lampeggi del TX del convertitore (quello collegato all'rx del micro).
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72


Gran bel lavoro Leo, ora però mi dovresti aiutare nell'interpretazione. Quali sono i passaggi che esegue il bl quando:
1 - micro collegato al Convertitore, collego la porta USB e dò alimentazione (ti confermo che non c'è reset)

Deduco che arrivi l'alimentazione dal convertitore, giusto?
Allora il punto in questione è il (2). Il registro MCUSR del microcontrollore registra la causa del reset.
Se il riavvio è dovuto ad una causa esterna, viene lanciato lo sketch utente. Il primo avvio ricade in questo caso.
Quindi, collegando il convertitore ma non programmando, il bootloader salta al programma senza mettersi in ascolto sulla seriale.

Quote

2 - apro uno sketch sull'IDE e lo invio al micro (ti confermo che questa operazione inizia con un reset)
vedo i lampeggi del LED sul pin 2, a seguire solo tre lampeggi del TX del convertitore (quello collegato all'rx del micro).

In questo caso il bootloader continua dal punto 3).
Fa quindi lampeggiare i led, apre la seriale e si mette in ricezione.
Le operazioni che seguono sono in risposta ai comandi che il bootloader riceve da avrdude.

Servono altri dettagli?

Go Up