Sto giocando con USBasp ma..............

Ciao a tutti, sto giocherellando con un programmatore USBasp che mi ha prestato un amico e nello specifico questo: http://www.aliexpress.com/store/product/USBasp-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-5PCS/812021_554471139.html

Per fare dei test e capire come funziona ho quindi deciso di prendere il mio arduino uno e metterci sopra uno sketch di esempio (blink), leggere la flash tramite ProgISP 1.72, sostituire il micro e scrivere nel nuovo micro (sempre un 328P) il contenuto della flash letta in precedenza.
Il tutto sembra funzionare alla perfezione perchè anche la procedura di scrittura va a buon fine senza dare nessun errore, però il led non blinka :frowning: e se provo a leggere la flash del nuovo micro il contenuto risulta essere diverso da quello che gli avevo detto di scrivere.
C'è un motivo particolare per il quale i dati scritti risultano diversi? E' forse un problema di ProgISP o è un problema mio che come al solito non ho capito nulla? :frowning:
Grazie.
Ciao.

dicci di preciso cosa fai,
tieni l'usb staccata quando fai queste operazioni, l'usbasp alimenta da solo l'arduino

Testato:
dicci di preciso cosa fai,

+1

Descrivo punto per punto cosa faccio:

  1. Tramite USB e Arduino IDE carico lo sketch su Arduino (Arduino UNO)
  2. Stacco l'USB e collego l'USBasp
  3. Carico ProgISP (versione 1.72) e lancio la funzione "Read Flash" e a questo punto vedo sul buffer i dati scritti
  4. Stacco il positivo del'USBasp in modo da disalimentare Arduino
  5. Cambio il Micro
  6. Ricollego il positivo del'USBasp
  7. Lancio la funzione "Write Flash" e parte la procedura di scrittura che va a buon fine.

A questo punto comunque lo sketch non funziona e se vado a rileggere la Flash del micro mi cambia i dati scritti e il checksum.
Ho provato però a scrivere dei dati direttamente sul buffer e a scriverli e quando li vado a rileggere vengono riletti correttamente, quindi il problema si presenta solo quando provo a "clonare" l'atmega.
Ora, diciamo che la cosa potrebbe essere ininfluente, nel senso che non è il mio scopo quello di clonare il micro anche perchè basta fare l'upload dello sketch e risolto, ma è una curiosita sapere perchè capita questo.
Spero di essermi spiegato bene :frowning:
Grazie.

Su win7 ricordo problemi con progisp, hai provato con altre gui o direttamente da avrdude via linea di comando ?
Cmq domani ti faccio un test con progisp per approfondire

Mi sono dimenticato di dire che sto usando windows xp 32bit perchè visto il tempo a disposizione non avevo voglia di mettermi a studiare tutta la sintassi di avrdude da riga di comando.
Per mal che vada farò anche questo sforzo :slight_smile:
Fammi sapere se a te da lo stesso problema.
Grazie.

Sparo 2 cose.

Il ATmega del Arduino ha il bootloader. Tu copi anche quello o no?

Il Tuo USBasp puó essere usato anche attraverso l' IDE?

Ciao Uwe

Io do per scontato che quando do "read flash" legga tutta la flash incluso bootloader, ma a questo punto forse non è così.
Ma il bootloader è scritto all'inizio o alla fine della flash?
Per quanto riguarda la seconda domanda, ti confermo che può essere usato anche con Arduino IDE, perchè proprio ieri l'ho
utilizzato per ripristinare un bootloader su un'atmega tramite l'IDE.
Ciao.

Il bootloader è scritto nella parte alta della Flash, in un'area di memoria protetta dalla scrittura.
Indipendentemente da dove esso è, se con l'USBasp scrivi uno sketch, questo poi deve esserci.
Tu dici che lo sketch scritto non funziona e che la Flash non contiene i dati scritti.

Se l'USBasp funziona bene, perché dici che da IDE lo usi senza problemi, allora è quel programma che usi che ha un comportamento strano. Prova ad usarlo direttamente da terminale tramite avrdude.

Confermo, con avrdude sembra funzionare correttamente :slight_smile:
Non ho però trovato una funzione leggere la flash con avrdude, me la sono persa o è perchè proprio non lo fa?

è uguale alla scrittura, devi usare l'opzione r invece di w e specificare il nome del file di destinazione a fine riga di comando

Stefanoxjx:
Confermo, con avrdude sembra funzionare correttamente :slight_smile:

Butta quello pseudo programma che usavi, allora :wink:

Beh, ormai che mi sono studiato anche avrdude da riga di comando di certo che lo butto.
Primo perchè mi piace molto di più lavorare da riga di comando e secondo perchè così posso usarlo anche sotto linux :slight_smile:

Con la presente mi accingo a confermare regolare funzionamento del programma ProgISP 1.7.2 su Win7-64 in tutte le sue funzioni.
Test eseguiti su 328P e 8A entrambi montati su una UNO R1

probabilmente sbagli a gestire la non user-frendly interfaccia

approfitto per una domanda su avrdude, ricordo male o piu' volte si e' detto che l'IDE prima di scrivere lo sketch sul micro fa un -e ?
se e' cosi', perche' facendo manualmente quanto di seguito, il micro rimane con il suo sketch funzionante ?

-c arduino -p m328p -P COM1 -b 115200 -e

"-e" cancella Flash, Eeprom e lock bit.
Se stai usando l'ArduinoISP per comunicare con il micro in standalone, credo che il tuo problema derivi dal fatto che specifichi una velocità di connessione di 115200 bps mentre lo sketch ArduinoISP lavora a 19200. Non ricevi nessun errore? Mi suona strano.

Così dovrebbe essere corretto:

-c arduino -p m328p -P COM1 -b 19200 -e

Sto lavorando durettamente via usb, quindi faccio in prarica quello che fa l'ide. Ma visto che -e dici cancelli intera flash allora è normale non funzioni perche via bootloader esso dovrebbe cancellare se stesso.
Ma allora ricirdavo uo male, quale è il comando cge l ide invia per cancellare la flash prima di scruverla ?

Inoltre in questa modalità cioè via usb non posso leggere i fuse, è twcnicamente impossibile oppure è il bootloadee che non lo prevede ?
C'è una documentazione sul cosa può fare il bootloader nel suo emulare il prigrammatore ? Esempio se una persona chiede di voler salvare su file il programma presente in flash la maggioe parte gli risponde che lo deve fare via ICSP, invece si puo fare anche via usb, e se il team volesse potrebbe aggiungere all ide un comanda Read Flash.

Testato:
Sto lavorando durettamente via usb, quindi faccio in prarica quello che fa l'ide. Ma visto che -e dici cancelli intera flash allora è normale non funzioni perche via bootloader esso dovrebbe cancellare se stesso.
Ma allora ricirdavo uo male, quale è il comando cge l ide invia per cancellare la flash prima di scruverla ?

Si legge a malapena :stuck_out_tongue_closed_eyes:
Ma il bootloader non fa queste cose. Queste le fa lo sketch ArduinoISP.
Se usi l'IDE, lui invia un unico comando avrdude con diversi parametri. E' avrdude che li esegue poi nel giusto ordine. La cancellazione della Flash è prioritaria alla scrittura per cui prima fa l'erase e poi scrive.
Se invece scrivi il bootloader, prima vengono flashati i fuse e poi viene scritto il bootloader, sono operazioni separate.

Inoltre in questa modalità cioè via usb non posso leggere i fuse, è twcnicamente impossibile oppure è il bootloadee che non lo prevede ?
C'è una documentazione sul cosa può fare il bootloader nel suo emulare il prigrammatore ? Esempio se una persona chiede di voler salvare su file il programma presente in flash la maggioe parte gli risponde che lo deve fare via ICSP, invece si puo fare anche via usb, e se il team volesse potrebbe aggiungere all ide un comanda Read Flash.

I fuse li leggi anche da sketch, il programmatore di Michele lo fa.
Però ripeto, sono cose da ArduinoISP, non da bootloader. Il bootloader può solo scrivere per singole pagine sulla propria memoria interna. Per operare su un micro esterno serve un programma più complesso, che è appunto l'ArduinoISP.

Il mio Programmatore HV legge i fuse ma sempre in modalità HV, però confermo che mediante AVRDUDE è possibilissimo leggere i fuse; onestamente però ho provato solo a leggere quelli di uno stand-alone collegato via ISP ad un Arduino, non credo ci siano problemi e leggere quelli dell'Arduino ma non ho mai provato, non avendone alcuna necessità, visto che li conosco perfettamente.

capisco che parlando di semifantascienza non mi seguiate :slight_smile:

Avrdude da anni supporta tanti ti pi di programmatori, uno dei tanti e' il programmatore che viene simulato dal bootloader. avrdude lo gestisce in modo diretto, via seriale (leggasi usb)
Quindi semplicemente stando collegati via usb si possono usare tutti i comandi di avrdude

si puo' salvare la flash da un micro verso un file, ad esempio, cosi' come logicamente la si puo' scrivere
si possono lanciare i comandi per leggere i fuse (ma non funziona)
si puo' lanciare il comando -e (ma non funziona)

questo chiedevo, cioe' se esiste documentazioni ssu cosa si puo' fare via bootloader e cosa no.

Di certo con una semplice modifica al solo IDE si potrebbe implementare la funzione Read Flash
Mentre per leggere i fuse si deve modificare il bootloader stesso, forse, infatti mi chiedevo se vi erano altri limiti tecnici

il programmatore viene chiamato proprio arduino nella stringa da usare con avrdude

No, ti seguo benissimo per il semplice fatto che quando mi sono dedicato ad AVRDUDE ho fatto alcuni test direttamente sull'Arduino, senza circuiti stand-alone a valle; per la verità ho scoperto per caso questa cosa, visto che la comune manualistica di AVRDUDE non ne parla (risposta alla tua domanda), e poi ne ho ricavato alcune info, ma in effetti mi pare che i fuse non sono riuscito a leggerli. Però.... la faresti una prova per me?
"C:\avr\bin\avrdude.exe" -C "C:\avr\etc\avrdude.conf" -p m328p -c arduino -P COM3 -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h
parliamo di Arduino UNO collegato all'USB e IDE 1.0.x, per la prima parte della sintassi usa la tua, come programmatore metti appunto arduino, la COM metti la tua MA NON deve essere superiore a 9, NON devi impostare alcun baud rate, quindi ignora l'opzione -b e vedi che ne esce, hai visto mai? :grin: