Aggiornare firmware PIC diretto al CS

Ciao a tutti ! è possibile aggiornare il firmware di un pic "16F876" direttamente nel CS in cui lavora ? senza doverlo togliere dallo zoccolo e usare un programmatore esterno. Naturalmente il CS in questione ha già una porta seriale per il controllo di alcune funzioni. Grazie a tutti fin da ora

Reply to
Geppo
Loading thread data ...

"Geppo" ha scritto nel messaggio news:4b0492f9$0$34599$ snipped-for-privacy@reader1.news.tin.it...

La via più breve è quella di implementare un bootloader, ovvero un programma residente, che si occupa della riprogrammazione del dispositivo tramite la ricezione di comandi sulla linea seriale. Questo comporta però una ricompilazione del fw originale per lasciare spazio al loader in flash, inoltre occorre verificare se negli 8k del dispositivo c'è spazio sufficiente per farci stare anche il loader.

La soluzione che non richiede di mettere mano al fw è la programmazione in circuit. Devi però verificare di avere a disposizione in modalità esclusiva (anche per il solo tempo necessario alla programmazione) i pin PCD PGD e poter comandare MCLR verificando che quando questo si porta alla tensione di programmazione (circa 12V) non si creino danni al rimanente circuito.

Reply to
Roberto P.

Approfitto del thread per chiedere spiegazioni su un aspetto dei bootloader "commerciali"

giorni fa ho dovuto ripristinare il mio iPhone causa interruzione dell'aggiornamento del firmware

in ogni caso, leggendo fra i vari forum, ho imparato che è possibile avviare l'iphone in due modalità distinte quando si parla di recupero....

la recovery mode e la DFU mode (Direct Firmware Upgrade)

Posso supporre dai nomi il loro funzionamento generico , mi chiedo però il perchè di questa scelta... (Ho notato che in entrambe le modalità la apple ha sviluppato un driver windows per supportarlo...immagino sia per riuscire a sfruttare maggiore banda disponibile sulla usb...)

Un altra curiosità era la difficoltà nell'implementare soluzioni di questo tipo anche nei nostri piccoli "progetti" amatoriali...

Grazie ancora una volta per il vostro tempo

Contrario

Reply to
Contrario

Uhm... non penso sia fattibile, perchè il 16Fxxx non può programmarsi la sua memoria. Quelle cose le puoi fare con la serie 18...

Ciao

Pasu

Reply to
Pasu

Ho decine di applicazioni che girano con bootloader con 16F876, 16F876A e fratelli.... Quindi la fattabilità c'è. Altra cosa è la convenienza: oggi ci sono 18F compatibili con 16F che costano meno ed hanno maggiori potenzialità. Se però il fw è già scritto e va bene...non vedo il motvo di cambiare.

Reply to
Roberto P.

Hai ragione. Dunque o ci sono alcuni 16F che sanno programmarsi e non lo sanno, oppure c'è qualche altro barbatrucco che ignoro.

Verissimo.

Neanch'io.

P.

Reply to
Pasu

Pasu ha scritto:

ci sono pic16f con il self-write della flash, tutto qui; sono quindi identici alle sorelle 18f da questo punto di vista...

-ice-

Reply to
ice

Grazie a tutti per le risposte! Ho trovato il bootloader del 16F876 con clock a 10 mhz. Ho provato a programmarlo e utilizzando il suo software pc sono riuscito a caricare il programma ma alla fine il programma originale non partiva. Ho letto che ad inizio codice dovrei aggiungere qualche riga di programma, io programmo con Mikrobasic. Qualcuno sa darmi qualche altra dritta ;-) ?

Graz a tutti fin da ora !

"ice" ha scritto nel messaggio news:0FDNm.96666$ snipped-for-privacy@twister2.libero.it...

Reply to
Geppo

"Geppo" ha scritto nel messaggio news:4b071df0$0$34595$ snipped-for-privacy@reader1.news.tin.it...

Devi inserire le opzioni di compilazione nel tuo programma in modo da 'creare' spazio per il bootloader. In genere i bootloader ridiedono o nella parte bassa oppure nella parte alta della memoria di programma. Per il pic in oggetto sarebbe preferibile adottare un loader residente nella parte alta, in modo da lasciare libere le aree di gestione degli interrupt. Sicuramente sul sito dal quale hai scaricato il loader ci sono anche indicate le modifiche da apportare al tuo fw per renderlo compatibile. Puoi anche dare uno sguardo qui

formatting link
dove c'è un buon loader con relative istruzioni.

Reply to
Roberto P.

Ciao Roberto grazie fin da ora per le tue risposte! Ti chiedo questa info se puoi aiutarmi ulteriormente Io ho fatto un programma utilizzando mikrobasic. composto cosi :

dove dovrei mettere il comando che mi fa iniziare il programma ad un certo intervallo di memoria che per il 16F876 penso sia 1FFFF ? prima riga del MAIN() ?

Grazie mille!

"Roberto P." ha scritto nel messaggio news:he84vb$d1e$ snipped-for-privacy@tdi.cu.mi.it...

Reply to
Geppo

"Geppo" ha scritto nel messaggio news:4b0acfbf$0$8854$ snipped-for-privacy@reader5.news.tin.it...

Non conosco il mikrobasic... Dovrebbe comunque avere una istruzione ORG che indica al compilatore le aree di memoria da utilizzare per non sovrascrivere il loader. Sicuramente fra gli esempi installati con il tuo linguaggio c'è almeno un esempio di utilizzo del bootloader. Sono quasi certo anche che ci sia già anche il bottloader..

Reply to
Roberto P.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.