Topic permanente di programmazione newbie

No, mi spiace contraddirvi. Il bootloader è nell'ultima sezione della Flash.
La tabella a pag. 18 fa vedere chiaramente come il bootloader sia posizionato proprio in alto (basta vedere gli indirzzi).

MauroTec:
Non mi pare così, direi che l'indirizzo di partenza in cui risiede il bootloader è sempre 00, poi dopo tot byte (in base ai fuse) termina
l'area del bootloader e comincia quella così detta application area.

All'indirizzo 0x00 c'è il reset vector, cioè un jmp alla prima di memoria dove risiede il programma, poi c'è il vettore di interrupt, il bootloader è sempre posto in fondo alla flash, se è presente all'indirizzo 0x00 c'è un jmp alla prima locazione del bootloader, vedi tabella 11-1 del data sheet per i dettagli.

Sul bootloader ero certissimo, ho studiato a fondo i fuses, ora ho anche il conforto di Astro e Leo :slight_smile:
Per il resto ho letto e riletto e tutto torna, quindi ora il Programmatore HV legge e programma correttamente l'intero Lock Bits Byte, «another brick in the wall» XD
Riepilogando:
2 bits controllano R/W della memoria bootloader
2 bits controllano R/W della memoria applicazioni
2 bits controllano R/W di entrambe le aree, quindi dell'intera flash memory ed anche dell'EEPROM e bloccano anche i fuse bits (cosa che non fanno i 4 bits precedenti) e/o i boot lock bits.
Quindi si può agire indifferentemente su lettura e/o scrittura delle due aree o contemporaneamente su entrambe.
La "novità" sta nel fatto che, contrariamente a ciò che mi era parso di capire nei giorni scorsi, sempre su questo Topic, i lock bits hanno maggior peso dei boot lock bits ed infatti il reference dice che i blb vanno programmati PRIMA dei lb.
Mi metto e scrivo tutto per l'articolo $) ora sto valutando se caricare le descrizioni sintetiche di tutte le combinazioni, ma mi sa che sono tante :fearful:
Per il momento un dono alla vostra gentilezza e disponibilità: tabella riepilogativa (anteprima assoluta per gli amici del Forum!!) del Lock Bits Byte del mega328P XD

Lock Bits Byte.tif (133 KB)

I BLB sono delle specie di custodi interni della memoria. Difatti servono per evitare che il codice possa scrivere sulla Flash a runtime.
I lock bit veri e propri sono, usando un'altra figura,come le sentinelle di ronda che controllano che tentativi di lettura/scrittura che provengono dall'esterno del micro possano passare.

Grazie del chiarimento. Mi pare che l'argomento possa ritenersi esaurientemente trattato, salvo richieste di approfondimenti :slight_smile:

Invece vorrei ora parlare di un qualcosa che ho sfiorato marginalmente in questi giorni e mi ha fortemente incuriosito, cito il datasheet:

Calibration Byte
The ATmega48A/PA/88A/PA/168A/PA/328/P has a byte calibration value for the Internal RC
Oscillator. This byte resides in the high byte of address 0x000 in the signature address space.
During reset, this byte is automatically written into the OSCCAL Register to ensure correct frequency
of the calibrated RC Oscillator.

Ci sono due aspetti estremamente interessanti da capire:
1 - qui parla di una scrittura automatica del byte di calibrazione dell'oscillatore, ma la cosa significa che sarebbe possibile agire su 256 bit per tarare la frequenza dell'oscillatore interno?
2 - Se ben capisco il byte risiede nell'area della signature che dovrebbe essere protetta (probabilmente solo dall'esterno); ma secondo Voi potrebbe esistere un modo per riscrivere la signature (mi riferisco a quei 2313 che ho azzerato ma che continuano a funzionare anche senza signature) visto che in quest'area di memoria viene riscritto il registro OSCCAL?

Mi sa che hai frainteso. Dall'area di memoria dove risiede anche la signature viene letto il valore di calibrazione dell'oscillatore interno e copiato nel registro OSCCAL, che risiede in RAM ed è quindi modificabile.

Non l'inverso, perché la memoria dove risiede la signature dovrebbe essere di tipo PROM. Una volta scritta, è quella. Difatti mi pare che astro avesse scritto che, in uno scambio di mail con Atmel, era venuta fuori la questione che a "giocare" con le signature, forzando le programmazioni con avrdude ed il parametro "-f", si poteva rovinare l'area dove risiede la signature. A quel punto la signature era persa anche se il micro continuava a funzionare regolarmente. Solo alcuni programmatori "precisini", che leggevano la signature obbligatoriamente, potevano impuntarsi nel cercare di programmare questi chip senza nome.

Sul fatto del valore di calibrazione, ci sono dei micro che permettono di modificare tale valore. Ad esempio la V-USB!!! Te la ricordi Mike? ]:smiley:
Ti ricordi che l'Attiny85 viene calibrato internamente a 12 MHz agendo proprio su questo parametro?

leo72:
No, mi spiace contraddirvi. Il bootloader è nell'ultima sezione della Flash.
La tabella a pag. 18 fa vedere chiaramente come il bootloader sia posizionato proprio in alto (basta vedere gli indirzzi).

astrobeed:

MauroTec:
Non mi pare così, direi che l'indirizzo di partenza in cui risiede il bootloader è sempre 00, poi dopo tot byte (in base ai fuse) termina
l'area del bootloader e comincia quella così detta application area.

All'indirizzo 0x00 c'è il reset vector, cioè un jmp alla prima di memoria dove risiede il programma, poi c'è il vettore di interrupt, il bootloader è sempre posto in fondo alla flash, se è presente all'indirizzo 0x00 c'è un jmp alla prima locazione del bootloader, vedi tabella 11-1 del data sheet per i dettagli.

Si ma io guardavo il monitor al contrario e il mio cervello era in negato ~, quindi ~FF= 00 e scusate. Ho lo sapevate che arrampicarsi sugli specchi è davvero difficile. :grin:

Ciao.

leo72:
Mi sa che hai frainteso. Dall'area di memoria dove risiede anche la signature viene letto il valore di calibrazione dell'oscillatore interno e copiato nel registro OSCCAL, che risiede in RAM ed è quindi modificabile.

hai perfettamente ragione, ora che ho letto meglio :sweat_smile: è proprio come dici

Non l'inverso, perché la memoria dove risiede la signature dovrebbe essere di tipo PROM. Una volta scritta, è quella. Difatti mi pare che astro avesse scritto che, in uno scambio di mail con Atmel, era venuta fuori la questione che a "giocare" con le signature, forzando le programmazioni con avrdude ed il parametro "-f", si poteva rovinare l'area dove risiede la signature.

no, non abbiamo mai scoperto perché questo succedesse ed io non avevo mai usato il -F; Astro scrisse ad ATMEl e gli risposero che poteva succedere che si cancellasse per eventi elettrici non meglio specificati.

A quel punto la signature era persa anche se il micro continuava a funzionare regolarmente. Solo alcuni programmatori "precisini", che leggevano la signature obbligatoriamente, potevano impuntarsi nel cercare di programmare questi chip senza nome.

errore consequenziale: SOLO dopo averli azzerati ho usato il -F per vedere se potevo usarli ed infatti poi ho suggerito con successo la cosa a BUD :wink:

Sul fatto del valore di calibrazione, ci sono dei micro che permettono di modificare tale valore. Ad esempio la V-USB!!! Te la ricordi Mike? ]:smiley:
Ti ricordi che l'Attiny85 viene calibrato internamente a 12 MHz agendo proprio su questo parametro?

non lo ricordavo, ero troppo impegnato a maledirla per poterne approfondire il funzionamento. Invece mi interessava capire se si poteva gestire via software in modo da calibrare il singolo micro disponendo di idonea strumentazione. Se parli di 12MHz significa che tale byte opera anche su oscillatore esterno o cosa?
Chiuso il discorso signature mi piacerebbe capirne di più su questa cosa.

La calibrazione dovrebbe influenzare solo l'oscillatore interno.
Si può modificare via software, vedi cap. 9.6 pag. 34 e link correlati. Mai approfondito il discorso.

ok approfondirò, solo un chiarimento,a quale reference ti stai riferendo tiny o mega?

Mega. Citavi i Mega, ho spulciato quello dei Mega. Lo stesso tuo, doc8271d-avr-85/11.

leo72:
Mega. Citavi i Mega, ho spulciato quello dei Mega. Lo stesso tuo, doc8271d-avr-85/11.

so' stanco, grazie! domani giornataccia ma venerdì voglio approfondire, dopo aver scritto tutto sul LbB. Ciao :slight_smile:

Posizione bootloader: Thanks
Tabella Lockbits: Thanks

il discorso calibrazione oscillatore interno: se ho capito viene testato il corretto valore in fabbrica e lo si scrive in signature, ad ogni boot viene copiato dalla signature e scritto in Ram, quindi se via sketch ad esempio in Setup() sovrascriviamo questo dato lo gestiamo come vogliamo ?
Potrebbe servire alla swRTC al posto del deltaT ?

La swRTC va più che bene così, lasciamola in pace :stuck_out_tongue:
Altrimenti potremmo usare anche il termometro interno e calibrare l'oscillatore in base alla temperatura. Poi, con un calendario lunare, verificare se è gobba a ponente deltaT crescente, gobba a levante deltaT calante :stuck_out_tongue_closed_eyes:

@Mike:
sono andato a spulciare sul sito del core Tiny ed ho trovato quella libreria che serviva a calibrare i Tiny. Ti ricordi di TinyTuner?
http://code.google.com/p/arduino-tiny/downloads/list

Dentro ho trovato un readme con un paio di link. Il primo è ad un documento di Atmel sulla calibrazione dell'oscillatore. E' vecchio (2006) ma qualche info la da:

Un altro metodo è quello usato dalla libreria, che si basa sul principio descritto qui:
http://forums.adafruit.com/viewtopic.php?t=5078
l'uso della trasmissione della seriale.

grazie, voglio provare a capirci qualcosa in più.
l'idea è proprio quella di Test :blush:, poiché esiste il modo di misurare il clock interno, a tentativi si potrebbe trovare una condizione oiù precisa di quella di default

leo72:
La swRTC va più che bene così, lasciamola in pace :stuck_out_tongue:
Altrimenti potremmo usare anche il termometro interno e calibrare l'oscillatore in base alla temperatura. Poi, con un calendario lunare, verificare se è gobba a ponente deltaT crescente, gobba a levante deltaT calante :stuck_out_tongue_closed_eyes:

Notizia: ah leo, fai attenzione agli OT, mi hanno riferito che qualcuno sta sudando freddo terrorizzato dall'idea che qualcuno possa sporcargli il suo bellissimo Topic, sembra che l'abbia addirittura scritto in un suo post. Meno male che c'è ancora gente seria su questo Forum, fosse per me e te l'avrebbero già chiuso :sweat_smile:
Commento: minc.... è davvero sconcertante come certa gente si presenti sul Forum solo per vampirizzare informazione e risolversi i propro problemi, senza nulla dare o restituire, in sintesi, che si fa i zz propri, e poi si permette anche di criticare e tentare di blindare il proprio Topic succhiasangue.
Precisazione: ma ciò mi è stato riferito, non so se corrisponde a verità, quindi se ci tieni mettiti a cercare, altrimenti te ne stra..ftt come me e tiri innanz.
Commento finale: BAH!

Questa poi mi giunge nuova.... sarà che sono "innocente" nei miei interventi e non faccio caso a queste piccolezze....
Però... penso... se uno si vuol tenere tutto per sé, perché frequenta un forum pubblico?

PS: piccolo indizio? :sweat_smile:

leo72:
Però... penso... se uno si vuol tenere tutto per sé, perché frequenta un forum pubblico?

solo per soddisfare le sue necessità e farsi spiegare dagli altri le cose che non sa fare, hai presente quei rettili che stanno nei buchi della terra in agguato senza farsi vedere da nessuno? appena passa la preda (cioè loro hanno necessità di cibarsi) schizzano fuori a velocità pazzesca, agguantano e si rintanano fino a nuova necessità, poi arriva l'altro rettile che gli dice "me ne dai un pò?" e lui risponde "gné!! ]:D" (citazione da "Bertoldo, Bertoldino e Cacasenno", scena del lancio di pochi polli arrosto dalla cucina del Re in mezzo ad una folla di poveri e morti di fame).
Il termine che ho usato, vampiro, non ti dice nulla? Hai mai sentito parlare di vampiri che fanno trasfusioni di sangue? :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
Comunque sia chiaro, ribadisco che io non ho letto questa cosa ma mi è stata riferita ed il mio discorso è generale e vale per tutti coloro che in genere agiscono in questo modo, niente di personale XD Non vorrei che si presentasse qui qualcuno con la coda di paglia a dirmene di tutti i colori :fearful: