Topic permanente di programmazione newbie

Testato: due domande didattiche, scusa se forse le hai gia' risposte

1- ogni micro puo' avere solo un tipo di programmazione hv, oppure ci sono quelli che la supportano entrambe sp-pp ?

ogni micro richiede un SOLO tipo di programmazione: HVPP o HVSP, poi c'è una variantr dell'HVPP (che io ho ribattezzato HVP13) che serve per i tiny a 20pin

2- l'erase cancella anche la eprom ?

ovviamente ti riferisci a quella interna, la risposta è: dipende dall'impostazione dei fuse, c'è una combinazione che permette di proteggere l'EPROM durante le operazioni di chip_erase, nei valori di default l'impostazione è Eprom_protected; quindi puoi decidere se cancellare solo la flash o anche l'eprom; le altre modalità che suggerisci come idee sono impraticabili, per quanto ho letto e compreso fino a questo momento.

ma si puo' proteggere un micro in secondo momento (proteggere da lettura per non farsi copiare) dopo il caricamento dello sketch ? oppure lo si deve decidere per forza all'inizio ? Se si puo' fare, sarebbe bello un menu' Anticopia, in qualsiasi momento prendi un micro gia' programmato e lo passi nel rpogrammatore per la protezione

non serve un'opzione, tu puoi cambiare il lock bit senza danneggiare il firmware contenuto, quindi credo sia sufficiente caricare il firmware e poi cambiare il lock bit in modo da impostare la protezione dell'area di meomoria flash; il reference spiega che dopo non puoi più riprogrammare il lock bit, per cambiarlo bisogna fare per forza un chip_erase. Ho studiato parecchio in questi giorni ;) ma potrei aver scritto qualche inesattezza, considera questa risposta come un chiarimento iniziale da approfondire :)

@ Leo: grazie del chiarimento, mi basta il 2313 per le prove.

Stamattina ho dedicato un'oretta al chip_erase HVSP ma il mallitto blink continua a blinkare sine pietatis =( stasera al rientro altre prove, domani giornata definitiva, devo chiudere assolutamente, sono troppo in ritardo; tutto il resto (erase HVPP compreso) ora funziona a meraviglia, per essere la mia prima vera programmazione sono estremamente soddisfatto, soprattutto perché ho implementato tantissima roba che lo sketch di riferimento iniziale ora sembra davvero banale al confronto; ma naturalmente è stato fondamentale averlo, non a caso ho riportato nelle note iniziali il doveroso ringraziamento alla mightyohm e le loro note riguardo la licenza. Per non tacere del grandissimo aiuto che mi avete dato, almeno ho approfittato per imparare, non faccio più errori con le "(", ")" e i ";" :grin:

Specifico un paio di cose, approfondendo il discorso cancellazione del micro e protezione.

EEPROM
il bit EESAVE, che protegge la EEPROM funziona solo durante la cancellazione del contenuto del chip (“chip erase”) effettuato con la tecnica che sta usando Michele. Puoi sempre forzare da terminale la cancellazione della EEPROM usando l’opzione “-e” di avrdude.

LOCK BIT
ii lock bit si possono modificare senza alterare il contenuto della Flash ma solo in una direzione, ossia si può solo aumentare il fattore di protezione ma non diminuirlo. Quindi se i lock bit sono impostati per permettere la sola lettura ma non la riscrittura (protezione media), è possibile impedire anche la lettura (protezione massima) ma non è possibile disattivare la protezione in scrittura (protezione assente).

leo72:
Specifico un paio di cose, approfondendo il discorso cancellazione del micro e protezione.

EEPROM
il bit EESAVE, che protegge la EEPROM funziona solo durante la cancellazione del contenuto del chip (“chip erase”) effettuato con la tecnica che sta usando Michele. Puoi sempre forzare da terminale la cancellazione della EEPROM usando l’opzione “-e” di avrdude.

lasciando perdere il terminale, è sufficiente cambiare lo stato del bit prima di fare l’operazione di chip_erase, cosa che si fa tranquillamente con l’opzione 2 del mio menu (inserimento fuse personali)

LOCK BIT
il lock bit si possono modificare senza alterare il contenuto della Flash ma solo in una direzione, ossia si può solo aumentare il fattore di protezione ma non diminuirlo. Quindi se i lock bit sono impostati per permettere la sola lettura ma non la riscrittura (protezione media), è possibile impedire anche la lettura (protezione massima) ma non è possibile disattivare la protezione in scrittura (protezione assente).

grazie per l’approfondimento, il succo quindi resta quello che ho detto, cioè una volta impostato il lock bit per proteggere la flash, l’unico modo per rimbuovere la protezione è fare un chip_erase che rimuove sì la protezione ma contestualmente cancella il contenuto rendendo efficace la protezione.

Invece questa cosa mi ha fatto riflettere sul fatto che mentre l’EESAVE è programmabile via fuse, lo stesso non si può dire del lock bit, mi pare; se è così forse dovrei prevedere l’opzione di variazione del lock bit con una voce tipo “proteggi micro”, dite che vale la pena? mannaggia, ste cose sono come le ciliegie, una tira l’altra! :sweat_smile:

menniti: grazie per l'approfondimento, il succo quindi resta quello che ho detto, cioè una volta impostato il lock bit per proteggere la flash, l'unico modo per rimbuovere la protezione è fare un chip_erase che rimuove sì la protezione ma contestualmente cancella il contenuto rendendo efficace la protezione.

Invece questa cosa mi ha fatto riflettere sul fatto che mentre l'EESAVE è programmabile via fuse, lo stesso non si può dire del lock bit, mi pare; se è così forse dovrei prevedere l'opzione di variazione del lock bit con una voce tipo "proteggi micro", dite che vale la pena? mannaggia, ste cose sono come le ciliegie, una tira l'altra! :sweat_smile:

Come ho detto, puoi modificare i lock bit solo in un verso, ossia per aumentare il livello di protezione. Potresti prevedere l'opzione, potrebbe essere carina, ma prima io ti consiglio di terminare la parte che hai ancora in fase di sviluppo, per non mettere troppa carne al fuoco.

Se risolvo rapidamente la questione dell'ERASE provo a dargli un'occhiata, altrimenti abbandono proprio l'idea, una volta che chiudo devo scrivere l'articolo e non posso più fare variazioni, tratto il sw come se fosse hw, altrimenti rischio di fare casini; semmai, con tutto il tempo si potrà pensare di proporre una versione 2 con altre implementazioni, vedremo....

AGGIORNAMENTI Al solito buone e cattive notizie, purtroppo la ricerca vuole i suoi morti, ma sono davvero sconvolto =( :fearful:

Nelle varie prove, ma non so come e perché, sono riuscito a cancellare la signature di un 2313 :disappointed_relieved: In pratica vedo e riesco a programmare i fuse e perfino a cancellare (ovviamente ha funzionato solo una volta) il micro ma la signature è FFFFFF; se cerco di inserire uno sketch tramite ISP naturalmente mi dà errore di signature. La prima volta che ho programmato questo 2313 un'anomalia sul programmatore ISP l'avevo notata, una delle tre spie collegate ai segnali MISO, MOSI, SCK era debolmente accesa ed in effetti ho dovuto tentare un paio di volte prima di riuscire a inviare il blink ma poi è andato correttamente; solo che a quel punto l'HV ha iniziato a darmi errore di signature; l'ho bypassato via firmware, eludendo i controlli e ho riscontrato questa lettura FFFFFF, ciò nonostante, ripeto, riesco ancora a programmare i fuse. Secondo Voi è possibile cancellare la signature?

La buona notizia è che sono riuscito a completare finalmente il firmware, ora il chip_erase funziona correttamente anche in modalità HVSP e nell'unica prova fatta, ho visto che va anche in HVP13, quindi vorrei tentare di aggiungere il lock bit, mi sembra abbastanza semplice.

Ma prima devo capire che cavolo è successo, solo che ora mi trovo un 4313 e vorrei provare un piccolo imbroglio sul core tiny, mi basta cambiare la signature al 2313 e raddoppiargli la ram. Dove la trovo la signature? è nei file del core tiny o devo mettere mano ad AVRDUDE.CONF?

EDIT: ho provato a cambiare in AVRDUDE.CONF la signature (tecnica adottata con successo per il 328 noP) in FF FF FF ma niente da fare. Il messaggio " use -F to override this check." significa che posso bypassare il controllo, ma come devo usarlo questo parametro, forse si riferisce alla riga di comando?

menniti: Secondo Voi è possibile cancellare la signature?

Non credo sia possibile farlo in nessuno modo normale, però non so se negli AVR questa informazione è scritta sotto forma di celle ROM, quindi non alterabili in nessun modo, oppure in una zona protetta della flash e pertanto potrebbe essere possibile alterare la signature con un qualche procedimento. Per avere la certezza che hai cancellato la signature prova a leggerlo con l'AVR Dragon, se con questo ti risulta sempre 0xFFFFFF vuol dire che l'hai cancellata sul serio. Al limite se non hai ne tempo ne modo di fare questo test spediscimi il micro con la prioritaria e te lo analizzo io.

Si, è possibile che per qualche ragione (falsi contatti o altra roba simile), durante la programmazione icsp venga cancellata la signature, ma questo non dovrebbe impedirti di riscriverla con la programmazione HV. Guarda qui, anche il video http://translate.google.it/translate?hl=it&sl=pl&u=http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/&ei=koRhT8PIOYSgOvLNiP0H&sa=X&oi=translate&ct=result&resnum=1&ved=0CCkQ7gEwAA&prev=/search%3Fq%3Dattiny%2Bwriting%2Bsignature%2Bffffff%26hl%3Dit%26client%3Dfirefox-a%26hs%3D7SP%26rls%3Dorg.mozilla:it:official%26biw%3D1024%26bih%3D412%26prmd%3Dimvns Penso che sia già presente il supporto per i 4313 nel core tiny , ricordo una vecchia discussione sul forum internazionale... eccola: http://arduino.cc/forum/index.php/topic,51984.60.html spero che aiuti :)

BrainBooster:
Si, è possibile che per qualche ragione (falsi contatti o altra roba simile), durante la programmazione icsp venga cancellata la signature, ma questo non dovrebbe impedirti di riscriverla con la programmazione HV.

Nei due link non ho visto nessun riferimento specifico alla signature, quello polacco illustra un apparato simile a quello che sta realizzando Menniti, il fatto che nel video appare la signature 0xFFFFFF è normale perché è quello che leggi se il micro è brickato e accedi tramite ISP, dopo averlo resettato tramite HV ritorna leggibile da ISP.

astro ma il "coso" costruito dal polacco non credo che faccia icsp, ma solo HVPP e HVSP, quindi l'output che si vede nel video è letto con una di quelle due modalità no?

BrainBooster: quindi l'output che si vede nel video è letto con una di quelle due modalità no?

Colpa della traduzione di google, sono andato a leggere il testo originale in Inglese, i link è sempre meglio metterli al sito originale e non tramite traduttore proprio per evitare le cavolate che questo combina vanificando eventuali ricerche nel testo. In effetti in fondo ci sono due screen capture, dove fa vedere un ATtiny 13 con signatura 0xFFFFFF, letto tramite HVSP, e brickato viene ripristinato introducendo manualmente il modello, però nella schermata successiva risulta si ripristinato, ma la signature rimane 0xFFFFFF il che crea non pochi problemi quando vai a programmarlo tramite ISP. Dopo provo a mandare un richiesta all'assistenza tecnica di Atmel per chiedere lumi su questa cosa della signature alterabile e se c'è un modo per ripristinarla.

io ho guardato in giro e credo che il problema sia causato da una cancellazione del registro di calibrazione dell'oscillatore interno e per riscriverlo bisogna applicare un clock con un quarzo esterno o altro di 1MHz. Ma non ho ancora avuto modo di cercare per bene.

Bene ragazzi, grazie di aver preso in cura il problema. Sul datasheet non mi pare si parli di scrittura della signature, i link non li guardo perché l'inglese mi è amico tanto quanto il polacco, quindi sarebbe inutile, però sono pronto ad ogni prova possibile, datemi indicazioni e sarà fatto. Confermo che con l'ISP è impossibile lavorare con ujna signature FF FF FF, ho provato a metterla in AVRDUDE.CONF e l'IDE si incazza come una bestia, segno che controlla prima se c'è un 1E iniziale. Con lo stesso metodo invece ho programmato regolarmente il 4313, ma non riesco ad integrarlo come supporto diretto, posso farlo solo dicendo al CONF che ho un tiny2313 con una signature, flash e fuse diversi; ho provato a duplicare le righe nel conf ma evidentemente l'elenco dei micro va aggiornato in qualche altra parte (ma dove?), comunque il link di BB sul 4313 lo guardo, lì dovrei capire qualcosa in più. Non credo sia possibile mettere un quarzo, i pin XTAL1 e 2 sono impegnati da segnali di programmazione e comunque ora non posso fare più niente sull'hw, al di là di una prova al volo; se poi il micro è comunque inutilizzabile via ISP non mi serve a niente. @ Astro: prova a vedere, aspetta la risp di ATMEL, se c'è qualcosa che posso fare io la faccio, anche perché sarebbe spettacolare implementare un recupero del genere; se invece non c'è nulla e vuoi comunque dare un'occhiata te lo spedisco.

Ieri comunque è successo, poi ho ricostruito, che col fatto di usare alternativamente Arduino UNO+ISP per mettere lo sketch e l'HV Programmer per cancellarlo, ad un certo punto ho notato che Win impiegava oltre un minuto per riconoscere l'USB di turno, e siccome deve fare un secondo riconoscimento di conferma mi è capitato di fare operazioni nelle fasi intermedie; dopo il fattaccio ho riavviato (e mi è uscito un errore di sistema di scrittura, stranissimo) e per tutta la sera ho rifatto i giochi col 4313 (non volevo aver costruito uno spara-micro), le USB sono andate benissimo, addirittura manco le ho scollegate a volte, senza avere più problemi.

Oggi pomeriggio implemento il lock bit, intanto datemi tutte le info possibili riguardo il recupero del 2313 e l'implementazione del 4313. Grazie!

Menniti quando dicevo "un quarzo o altro" in verità volevo dire che basta dare un clock stabile da 1 a 4mhz sul pin del clock dell'ic , poi cancellare tutto e provare a riprogrammare il fuse CLSEL. ... tel'avevo messo anche tradotto in italiano il link :D e neanche lo guardi? =( guarda almeno il video :D

BrainBooster: Menniti quando dicevo "un quarzo o altro" in verità volevo dire che basta dare un clock stabile da 1 a 4mhz sul pin del clock dell'ic , poi cancellare tutto e provare a riprogrammare il fuse CLSEL. ... tel'avevo messo anche tradotto in italiano il link :D e neanche lo guardi? =( guarda almeno il video :D

BB non prendere per il c...., mi sono fidato di quanto commentava Astro, ora al lavoro, pomeriggio mi guardo il filmino :P Ho scaricato invece il core tiny, ma sei sicuro che si tratti di una versione modificata dell'originale? Ricordo che per diverso tempo Leo fece riferimento ad un core che dava parecchi problemi, non vorrei che si trattasse di quello :disappointed_relieved: C'è un modo per capire questa cosa secondo te? comunque pomeriggio faccio qualche prova anche con questo, mi sa che questo pomeriggio durerà fin o alle tre di stanotte :sweat_smile:

Quella è una versione abbastanza antica (usala solo per il 4313), ricorda che se stai facendo esperimenti con avrdude devi anche modificare avrdude.conf per fargli riconoscere il 4313.

Ho la risposta di Atmel, la signature si trova in una zona protetta della flash ed è accessibile esclusivamente tramite le varie modalità di programmazione con gli specifici comandi. Se durante un erase della flash si verificano rilevanti spike, non mi hanno chiarito cosa intendono con rilevanti, sull'alimentazione del micro per quanto sia un evento rarissimo è possibile che venga cancellata anche la zona della flash dove si trova la signature, il motivo per cui leggi 0xffffff è proprio perché 0xff è il valore tipico di una cella flash appena cancellata. Non esiste nessun modo per ripristinare il corretto valore della signature, il micro rimane perfettamente funzionante e utilizzabile, però potrebbero esserci problemi con alcuni software e tool hardware per la programmazione perché se leggono il valore 0xffffff lo interpretano come micro non riconosciuto o guasto e non consentono di procedere ad una programmazione forzata. Morale della favola, non solo gli AVR è possibile brickarli sbagliando i fuse, ma è anche possibile cancellare la signature.

BB scusa ma dove lo vedi il problema risolto? in quel video prima mostra degli errori perché non c'è alcun micro, poi mostra la lettura di un attiny45 buono, poi mette un tiny2313 con signature FFFFFF e mostra che riesce a programmare i fusebit, e la novità dov'è? Tutto questo l'ho fatto già ieri sera; nemmeno lui è riuscito a rimettere a posto la signature, infatti se guardi attentamente lui ha tagliato la parte di verifica, ma è rimasto un fotogramma in cui c'è sempre FFFFFF, hai capito il furbo polacco? :stuck_out_tongue_closed_eyes:

riguardo il tuo ultimo post, che leggo al volo, come già detto (ma tu mi ignori e poi t'incavoli che non leggo quel che mi dici :P) AVRDUDE.CONF l'ho modificato ma non gliene f... niente, segno che il 4313 lo devo elencare da qualche altra parte; col core sono a posto, va benissimo quello del 2313, l'ho provato, dovete solo insegnarmi come aggiungere un micro all'elenco, ripeto che farlo nel solo AVRDUDE.CONF non basta.

@Astro: ok, grazie, ho spiegato prima i casini che sono successi quindi è tutto giustificato, sono tranquillo perché non è dipeso dal programmatore ma dal casino tra le usb, inoltre un suo problema doveva averlo perché come ho scritto ieri sera appena l'ho messo nell'ISP si è accesa debolmente una delle spie collegate ai MISO, MOSI, SCLK, quindi c'era qualcosa che non andava. Come immaginavo e avevo letto non c'è modo di ripristinarlo, e per usarlo si può solo programmarlo in modalità HV, cosa che ancora non ho fatto, lo conservo per "usi futuri" :) GRAZIE!

:D quella del frame non l'avevo vista... ma quando parli di inserire nell'elenco, a cosa ti riferisci?