Pages: 1 ... 27 28 [29] 30 31 ... 36   Go Down
Author Topic: Topic permanente di programmazione newbie  (Read 32878 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa Mike ma ogni tanto perdo il filo del tuo ragionamento e delle tue necessità....
Scrivi:
NON riesco a leggere con AVRDUDE (bene!)
RIESCO a scrivere con AVRDUDE (male!).

Poi affermi invece:
il micro non è sovrascrivibile via ISP(bene!) ma non è più neanche leggibile (male!)

Quindi ora non ti va bene che sia leggibili ma ti va bene che non sia riscrivibile però ieri dicevi l'esatto opposto  smiley-sweat
Logged


Rovereto
Offline Offline
Full Member
***
Karma: 0
Posts: 152
La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ Astro: ma un firmware all'interno di un micro è capace di gestire una autoscrittura nella flash? mi torna utile questa info per l'articolo, se me la confermi smiley

Scusa se rispondo io.
E' proprio quello che fa il bootloader. Scrive nella zona definita Application section che è la flash decurtata della quantita riservata all'area del bootloader. Per farlo, il codeice del bootloader fa uso di macro in assembly che utilizzano l'istruzione (assembly) SPM.
Un esempio tratto da boot.h, alla 7a riga

Code:
#define __boot_page_fill_short(address, data)   \
(__extension__({                                 \
    __asm__ __volatile__                         \
    (                                            \
        "movw  r0, %3\n\t"                       \
        "out %0, %1\n\t"                         \
        "spm\n\t"                                \
        "clr  r1\n\t"                            \
        :                                        \
        : "i" (_SFR_IO_ADDR(__SPM_REG)),        \
          "r" ((uint8_t)__BOOT_PAGE_FILL),       \
          "z" ((uint16_t)address),               \
          "r" ((uint16_t)data)                   \
        : "r0"                                   \
    );                                           \
}))

Ciao
QP
Logged

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

Se è per questo, è possibile per lo stesso codice scrivere all'interno di sé stesso, ossia un programma può cambiare in tempo reale il contenuto della memoria che occupa. A parte le considerazioni sul fatto che se si sbaglia locazione di memoria poi si rende il codice ineseguibile, la possibilità c'è ed è documentata dal datasheet.
Logged


Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Menniti , quindi obbiettivo raggiunto smiley
....anche se
http://www.cl.cam.ac.uk/~sps32/mcu_lock.html  smiley-wink
Logged

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

@ QP: grazie del chiarimento, ma in condizione FC ho messo il chip con bootloader caricato direttamente su Arduino e sono riuscito ugualmente a caricare un blink, quindi il blocco continua a non avere alcuna utilità. Forse, come dicevi tu stesso mi pare, bisognerebbe mettere mano anche ai BLB, però l'uovo non vale la candela.

@ Leo: vuoi farmi passare per un rincoglionito smiley-mr-green? La premessa fondamentale è che io NON voglio proteggere alcun firmware, ma devo solo presentare un progetto del Programmatore HV spiegandone caratteristiche ed uso, quindi immagino che uno che lo voglia realizzare voglia poi provare a sfruttarne tutte le caratteristiche. La prima coppia di affermazioni era legata al settaggio FC che, teoricamente, doveva impedirmi sia di leggere che di scrivere, non è così, una bene, una male. La seconda coppia riguarda il fatto che in condizione FE (solo write protect), con l'ausilio della SPI disabled mi aspettavo di non poter più scrivere ma di poter continuare a leggere, così non è, uno bene, uno male. I miei giudizi riguardano le prove che faccio rispetto a ciò che mi aspetto come esito, non sono assoluti, perché sto usando uno strumento che deve poter agire parzialmente su questi parametri; non sto cercando, come premesso di proteggere un micro. Chiaro ora?  smiley la mia mente è salva per ora smiley-grin?

@ BB: come battuta va benissimo, ma restando in tema l'obiettivo è raggiunto; scusa, se sto progettando uno strumento che ha la funzione chip erase non ho certo bisogno di ricorrere ad un tesista russo per farmi cancellare un micro (ciò che ho "intuito" dando un'occhiata al volo al tuo link).
Logged


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

@ Leo: vuoi farmi passare per un rincoglionito smiley-mr-green? La premessa fondamentale è che io NON voglio proteggere alcun firmware, ma devo solo presentare un progetto del Programmatore HV spiegandone caratteristiche ed uso, quindi immagino che uno che lo voglia realizzare voglia poi provare a sfruttarne tutte le caratteristiche. La prima coppia di affermazioni era legata al settaggio FC che, teoricamente, doveva impedirmi sia di leggere che di scrivere, non è così, una bene, una male. La seconda coppia riguarda il fatto che in condizione FE (solo write protect), con l'ausilio della SPI disabled mi aspettavo di non poter più scrivere ma di poter continuare a leggere, così non è, uno bene, uno male. I miei giudizi riguardano le prove che faccio rispetto a ciò che mi aspetto come esito, non sono assoluti, perché sto usando uno strumento che deve poter agire parzialmente su questi parametri; non sto cercando, come premesso di proteggere un micro. Chiaro ora?  smiley la mia mente è salva per ora smiley-grin?
No, il rinco... sono io perché siccome non mi ricordo le cose, poi mi tocca andare a ricercare ciò che uno scrive per seguire il filo del discorso, solo che poi mi intreccio lo stesso  smiley-lol
Ti chiedo, tu vuoi impedire la scrittura E la lettura, giusto?
Logged


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

no, il mio intento esatto è: impedire la lettura e/o la scrittura, ecco perché NON ho raggiunto il 100% del mio scopo: oggi posso impedire la lettura, posso impedire la lettura e la scrittura, ma NON posso impedire la scrittura lasciando libera la lettura.
Questa è da incorniciare smiley-mr-green
Logged


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

Mike, ma questo non potrai mai ottenerlo.
I lock bit servono proprio per impedire primariamente la lettura della memoria: sono nati come una sorta di "lucchetto" (da "lock") per bloccare ogni tentativo di copia del firmware non autorizzata. Lo scopo primario è proprio quello di evitare che un cinese si svegli la mattina e decida di clonare un certo dispositivo basato su un micro. Anche se non è in possesso del codice del firmware, che gliene frega? Compra uno di quei dispositivi, fa un dump del firmware, dopo di che realizza 100000 copie del dispositivo ed in ogni micro inserisce il firmware che ha prelevato dal micro. A lui non importa che sia in codice macchina, tanto lo deve semplicemente rimettere in un altro micro.

Se usciamo da questo presupposto, usciamo dal significato di lock bit.
Logged


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

Mike, ma questo non potrai mai ottenerlo.
I lock bit servono proprio per impedire primariamente la lettura della memoria: sono nati come una sorta di "lucchetto" (da "lock") per bloccare ogni tentativo di copia del firmware non autorizzata. Lo scopo primario è proprio quello di evitare che un cinese si svegli la mattina e decida di clonare un certo dispositivo basato su un micro. Anche se non è in possesso del codice del firmware, che gliene frega? Compra uno di quei dispositivi, fa un dump del firmware, dopo di che realizza 100000 copie del dispositivo ed in ogni micro inserisce il firmware che ha prelevato dal micro. A lui non importa che sia in codice macchina, tanto lo deve semplicemente rimettere in un altro micro.
Se usciamo da questo presupposto, usciamo dal significato di lock bit.
Forse vuoi dire una cosa diversa da ciò che intendo io, rileggiti il mio post in cui ho copiato le caratteristiche dei due lb, in breve:
FE: write protect
FC: write & verify protect
quindi in FE teoricamente dovrei poter leggere (e lo faccio) ma non scrivere (ma lo faccio lo stesso); poi mettiamola sul filosofico ed hai ragione tu, ma il datasheet parla chiaro. smiley-wink
Logged


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

Ma astro ti ha spiegato che l'impedimento alla scrittura non si applica ai tentativi "interni", fatti cioè dal bootloader.
Ecco perché ti dicevo che secondo me dovresti togliere il bootloader e disattivare il pin di reset.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9897
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse vuoi dire una cosa diversa da ciò che intendo io, rileggiti il mio post in cui ho copiato le caratteristiche dei due lb, in breve:

Michele stai travisando completamente il significato, e l'uso, dei L.B., adesso non ho tempo per darti una spiegazione dettagliata, devo uscire e vado di fretta, più tardi ti spiego per bene il tutto.

Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6021
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

intervengo giusto per spezzare una lancia
Michele in genere non travisa niente, a limite sono i manuali che sono scritti criptici ed interpretabili  smiley

Io anche mi sarei aspettato che usando protezione massima non avrei potuto programmare il micro

attendiamo illuminanti delucidazioni al fine di buttarci in test atti a conferme/smentite (in genere con voi e' la prima opzione che si avvera  smiley)
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9897
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto un paio di prove veloci settando tutte le varie possibilità dei lock bit tramite Avrstudio e l'Avrisp MKII, più che altro per essere certo di quello che stavo facendo senza dover combattere con lo sketch AvrIsp e avrdude.
Tramite i due lock bit per la flash è possibile bloccare solo la scrittura da parte di un applicativo della stessa e la lettura tramite un qualunque sistema esterno, però rimane completamente accessibile ad un programma che si trova nell'area del bootloader se dichiarato come tale tramite gli appositi fuse.
In pratica anche attivando i lock bit della flash il bootloader può sempre leggere e scrivere la porzione dove si trova il programma, è possibile impedire al bootloader di leggere la flash bloccando la modalità LPM nella zona applicazione, il che permette di continuare a riprogrammare il micro ma non di leggerne il contenuto, il che crea problemi nella fase di verify, se si blocca anche la SPM diventa impossibile programmare il micro tramite bootloader.
La stessa cosa è applicabile alla sola zona del bootloader, ovvero è possibile impedire che tale area venga letta o scritta oppure tutti e due.
Per farla breve, i due lock bit per la flash agiscono solo su questa esclusa l'eventuale zona del bootloader, i quattro lock bit relativi al bootloader permettono di bloccare lettura e scrittura da parte di questo sia del resto della flash che della zona del bootoader stesso, se non c'è il bootloader ovviamente non serve settare i relativi bit.
Se si cerca di caricare un nuovo sketch tramite l'IDE con la modalità SPM in area applicazione del bootloader bloccata con i relativi l.b. questo è l'errore che ritorna avrdude:

Code:
avrdude: verification error, first mismatch at byte 0x0000
         0x0c != 0x62
avrdude: verification error; content mismatch
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6021
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se ho capito bene tu dici che a massima protezione e' possibile programmare la flash via bootloader ma non via ICSP.
Mentre il Menny sta dicendo che anche via ICSP riesce a caricare il blink  smiley
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9897
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se ho capito bene tu dici che a massima protezione e' possibile programmare la flash via bootloader ma non via ICSP.

Via ICSP lo programmi sempre per il banale motivo che prima devi comunque cancellarlo, quindi vengono rimosse tutte le eventuali protezioni, per proteggerlo contro questa eventualità va disattivato l'apposito fuse che blocca la programmazione (SPIEN).
Logged

Pages: 1 ... 27 28 [29] 30 31 ... 36   Go Up
Jump to: