Pages: 1 ... 22 23 [24] 25 26 ... 36   Go Down
Author Topic: Topic permanente di programmazione newbie  (Read 22211 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Chiarimenti:
Non ricordo il documento e francamente non ho provato a passare da FE a FC, da fare. smiley

La domanda sul funzionamento dei LB era retorica, infatti lo vedi dal codice che avevo postato in basso che so bene qual è la loro funzione; la domanda finale era: a che serve la protezione se poi posso sovrascrivere via ISP? Io capisco che non riuscirò a leggere (a proposito, qualcosa per testare la lettura?), e capisco che chip_erase resetta tutto, ma perché mi fa scrivere tranquillamente con la write protect settata? smiley-roll-sweat

Quote
Ma perché non usi una maschera a bit per estrarre il valore dei lock bit?
Fai un (VALORE_LOCK && 0b00000011). Come risultato hai appunto la condizione dei 2 lock bit.
Un esempio? Non ho capito niente. smiley-sad-blue

Intanto ho completato la procedura di implementazione, ora leggo e scrivo i LB in HVSP, HVPP e HVP13; mi manca solo il controllo, che risolvo appunto appena capisco questo tuo suggerimento.  smiley-grin
Ho già creato le due versioni PC e LCD (qui sudori a vasche per farci entrare tutto, ma è ok).

L’ultimo passaggio che volevo fare è fornire il vLCD di Astro come interfaccia PC, ma non ricordo più a che punto era; in realtà su PC però vorrei usare una simulazione 6x40, che mi permette di non stravolgere il firmware PC; fattibile? smiley-mr-green
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Chiarimenti:
Non ricordo il documento e francamente non ho provato a passare da FE a FC, da fare. smiley
http://www.avrfreaks.net/index.php?func=viewItem&item_id=301&module=Freaks%20Tools

Quote
La domanda sul funzionamento dei LB era retorica,
Ponevi 3 quesiti, ho risposto a tutti altrimenti dici sempre che non ti ascoltiamo  smiley-razz

Quote
infatti lo vedi dal codice che avevo postato in basso che so bene qual è la loro funzione; la domanda finale era: a che serve la protezione se poi posso sovrascrivere via ISP? Io capisco che non riuscirò a leggere (a proposito, qualcosa per testare la lettura?), e capisco che chip_erase resetta tutto, ma perché mi fa scrivere tranquillamente con la write protect settata? smiley-roll-sweat
Uhm... o non spedisci il valore corretto, per cui in realtà non proteggi la memoria oppure i lock bit non funzionano  smiley-sweat
Che chip stai cercando di proteggere?

Quote
Quote
Ma perché non usi una maschera a bit per estrarre il valore dei lock bit?
Fai un (VALORE_LOCK && 0b00000011). Come risultato hai appunto la condizione dei 2 lock bit.
Un esempio? Non ho capito niente. smiley-sad-blue
Si tratta dell'AND binario.
1 AND 1 = 1
0 AND 1 = 0
1 AND 0 = 0
0 AND 0 = 0
In pratica, hai 1 se e soltanto se entrambi i bit sono ad 1.
Una "maschera" AND serve appunto ad avere come risultato 1 solo quando un bit della maschera settato ad 1 incontra un bit del valore da testare anch'esso ad 1.
Quindi, visto che il byte che regola i fuse tiene conto solo dei primi 2 bit,
facendo
BYTE_FUSE && 0b00000011
ottieni i soli primi 2 bit, senza fregartene del contenuto del resto del byte, che può avere qualunque valore tanto il risultato dell'AND tra i suoi bit e la maschera sarà sempre 0.

Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il ragionamento di ieri è giusto sono giusti anche i LB; la prova è che se setto i LB su FE o FC non riesco più a programmare i Fuse, devo per forza fare un chip erase. Ho provato con tiny84, sia FC che FE mi permettono di riprogrammarlo via ISP, anche se mi viene ora un onesto dubbio: ieri quando cambiavo i fuse la procedura veniva eseguita correttamente, ma poi alla verifica vedevo i valori inalterati, mentre ieri al tiny mandavo sempre lo stesso sletck, non vorrei che facesse finta di ricevere i dati, le linee ISP lavoravano come sempre e l'IDE mi ha dato il done, quindi mi sono fidato di ciò. Stasera approfondisco con un 328 ed un 4313, per avere l'intero arco chiaro.

Sul tuo suggerimento purtroppo non capisco come posso risolvere, scusa ma: se "stampo" a video il contenuto della variabile in forma HEX vedo i valori FF, FE, FC, in qualsiasi altra forma mi da spazio vuoto, io vorrei riuscire a leggere questa variabile e confrontarla fisicamente con uno dei possibili valori per attribuire anche la descrizione dello status. Tu dici che se faccio qualcosa come:
if LOCKB && 0b00000011 = 0b00000011 ; Serial.print("Free");
funziona? ma se è così non posso direttamente fare:
if BYTE(LOCKB) = 0b00000011 ; Serial.print("Free");
?

Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il ragionamento di ieri è giusto sono giusti anche i LB; la prova è che se setto i LB su FE o FC non riesco più a programmare i Fuse, devo per forza fare un chip erase. Ho provato con tiny84, sia FC che FE mi permettono di riprogrammarlo via ISP, anche se mi viene ora un onesto dubbio: ieri quando cambiavo i fuse la procedura veniva eseguita correttamente, ma poi alla verifica vedevo i valori inalterati, mentre ieri al tiny mandavo sempre lo stesso sletck, non vorrei che facesse finta di ricevere i dati, le linee ISP lavoravano come sempre e l'IDE mi ha dato il done, quindi mi sono fidato di ciò. Stasera approfondisco con un 328 ed un 4313, per avere l'intero arco chiaro.
Ah, allora potrebbe benissimo darsi che ti dice che ha programmato ma non l'ha fatto.
E' facile, basta mandare un blink col led su un pin, poi blocchi il micro e mandi un blink con un led diverso. Se il secondo non lampeggia, ha funzionato tutto.

Quote
Sul tuo suggerimento purtroppo non capisco come posso risolvere, scusa ma: se "stampo" a video il contenuto della variabile in forma HEX vedo i valori FF, FE, FC, in qualsiasi altra forma mi da spazio vuoto, io vorrei riuscire a leggere questa variabile e confrontarla fisicamente con uno dei possibili valori per attribuire anche la descrizione dello status. Tu dici che se faccio qualcosa come:
if LOCKB && 0b00000011 = 0b00000011 ; Serial.print("Free");
funziona? ma se è così non posso direttamente fare:
if BYTE(LOCKB) = 0b00000011 ; Serial.print("Free");
?
Ma tu ti eri messo ad usare switch su stringhe, aumentando il carico sulla memoria.
Se allora fai uno switch tipo:
Code:
switch (LOCKB && 0b00000011) {
  case: 3 //libero
    ....
    break;
  case 1: //solo lettura
    ...
    break;
  case 0: //protezione totale
    ...
    break;
}
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, faccio la prova del "doppio" blink e speriamo bene.

Ok, ora ho capito: 3, 1, 0 sono il decimale del byte e li uso come Case; bene, per ora sono a posto, stasera provo e posto.

Grazie Maestro  smiley-lol
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, faccio la prova del "doppio" blink e speriamo bene.
E' il test più semplice da fare.

Quote
Ok, ora ho capito: 3, 1, 0 sono il decimale del byte e li uso come Case; bene, per ora sono a posto, stasera provo e posto.
Sì, 3, 1 e 0 sono il decimale rispettivamente dei valori binari 0b00000011, 0b00000001 e 0b00000000.
Puoi mettere case 0b00000011 al posto di case 3, non cambia nulla.

Quote
Grazie Maestro  smiley-lol
Ma dai  smiley-lol
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Primi aggiornamenti:
-Confermo che la programmazione dei LB si può eseguire da un livello al successivo ma non in senso contrario: FF->FE->FC, quindi se passo da FF a FE, poi posso ancora passare a FC, se passo da FF a FC, non posso più tornare a FE.

-La brutta notizia è che anche in protezione FC (massima) riesco tranquillamente a scrivere uno sketch via ISP, sovrascrivendo il precedente; questa operazione naturalmente riporta i LB a FF (condizione free); servirebbero spiegazioni.....
Logged

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

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5608
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la board ?

Quote
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma credo sia ininfluente, sto lavorando sul tiny84, i valori erano entrambi su FF, ho messo:
attiny84at1.bootloader.unlock_bits=0xFF
attiny84at1.bootloader.lock_bits=0xFC
ma non cambia assolutamente nulla, con i LB impostati su FC si programma e i LB si resettano a FF.
MI viene il dubbio che il fimrware ArduinoISP possa avere implementato il chip_erase (che mi risulta si possa eseguire anche via software).
Boh, davvero non ne comprendo la logica. Ora provo anche un 328 in HVPP, vediamo.
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Mike:
invia lo sketch in modalità "verbose", ossia premendo contemporaneamente il tasto SHIFT mentre clicchi sull'icona UPLOAD e guarda tra le prime righe che compaiono nel terminale dell'IDE i parametri che vengono passati ad avrdude, postali qui per capire se passa l'erase del chip mentre invia i firmware al micro, almeno capiamo cosa succede
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Mike:
invia lo sketch in modalità "verbose", ossia premendo contemporaneamente il tasto SHIFT mentre clicchi sull'icona UPLOAD e guarda tra le prime righe che compaiono nel terminale dell'IDE i parametri che vengono passati ad avrdude, postali qui per capire se passa l'erase del chip mentre invia i firmware al micro, almeno capiamo cosa succede
mentre faccio upload del blink?
Code:
avrdude -CC:\arduino-0022\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cstk500v1 -P\\.\COM60 -b19200 -Uflash:w:C:\DOCUME~1\DOTT~1.MIC\IMPOST~1\Temp\build1887152033353859677.tmp\Blink_FAST.cpp.hex:i
Using Port            : \\.\COM60
         Using Programmer      : stk500v1
         Overriding Baud Rate  : 19200
avrdude: ser_open(): setting dtr
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Recv:
avrdude: Recv:
         AVR Part              : ATMEGA328P
         Chip Erase delay      : 9000 us
         PAGEL                 : PD7
         BS2                   : PC2
         RESET disposition     : dedicated
         RETRY pulse           : SCK
         serial program mode   : yes
         parallel program mode : yes
         Timeout               : 200
         StabDelay             : 100
         CmdexeDelay           : 25
         SyncLoops             : 32
         ByteDelay             : 0
         PollIndex             : 3
         PollValue             : 0x53
         Memory Detail         :
nei dettagli del micro quel chip erase delay non mi dice nulla di buono smiley-sad
« Last Edit: April 16, 2012, 03:27:41 pm by Michele Menniti » Logged

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

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5608
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Qui si sta scoprendo qualcosa di interessante  smiley
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

nei dettagli del micro quel chip erase delay non mi dice nulla di buono smiley-sad
Non ti preoccupare, quelli sono i parametri che avrdude ha nel file avrdude.conf relativamente al chip che sta gestendo, quindi è un sunto di tutto, anche di ciò che non usa in quel particolare momento.
La riga che ci interessa è questa:
Quote
avrdude -CC:\arduino-0022\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cstk500v1 -P\\.\COM60 -b19200 -Uflash:w:C:\DOCUME~1\DOTT~1.MIC\IMPOST~1\Temp\build1887152033353859677.tmp
I parametri sono:
-v -v -v -v: specifica una modalità "super verbose", ossia che manda a video qualsiasi messaggio generato
-patmega328p: specifica atmega328p
-cstk500v1: specifica il tipo di programmatore (stk500v1 è l'emulazione che offre l'ArduinoISP)
-P\\.\COM60: porta usata
-b19200: velocità
-Uflash:w:C:\.....: fimware usato e memoria programmata, ossia la flash

Quindi, non c'è nessun dettaglio relativamente alla cancellazione del chip, che sarebbe il parametro -e, che opera un erase totale della flash, della eeprom e dei fuse del micro. Il parametro "-e" dovrebbe essere usato dall'IDE solo quando programma il bootloader.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Boh, l'unico dato certo è che con le opzioni FE o FC non riesco più a programmare i fuse, segno che i lb stanno funzionando, niente da fare invece sulla questione programmazione, gli sketch passano che è una bellezza.
Sarebbe interessante il parere di qualcuno che li ha usati, ma ho idea che non c'è nessuno.
Comunque stanotte ho terminato i due firmware (PC e LCD) con la gestione lettura/scrittura dei Lock bits, la procedura funziona, non posso entrare nel merito del funzionamento dei lb, anche se mi piacerebbe capirlo.

Avevo chiesto se avete un qualcosa di semplice con cui possa "leggere" il contenuto della flash del micro, naturalmente non mi interessa alcuna estrapolazione o traduzione di codice, solo capire se almeno la lettura viene impedita.

Ora mi dedico ad altre cosette, tra qualche giorno (devo smaltire smiley-sad-blue) riprendo tutto e scrivo il terzo ed ultimo articolo sull'HV.
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Boh, l'unico dato certo è che con le opzioni FE o FC non riesco più a programmare i fuse, segno che i lb stanno funzionando, niente da fare invece sulla questione programmazione, gli sketch passano che è una bellezza.
Non so che dirti, non ho ancora avuto mai il modo di doverli usare.
So solo che anche l'IDE di Arduino li programma (basta aprire il file boards.txt per vedere la voce dei lockbit).
Mi viene da pensare che un "programmatore" software qual è l'ArduinoISP non riesca a compiere l'operazione, e che forse ci vorrebbe un programmatore "vero".
Logged


Pages: 1 ... 22 23 [24] 25 26 ... 36   Go Up
Jump to: