si, al fatto della velocità che in debug è più lenta ci ho pensato anche io. Adesso provo a spegnere la board e a caricare una versione non debuggata, secondo il tuo ragionamento (che è logico) non dovrebbe funzionare...
Comunque si, ricordi bene, la SD deve essere inizializzata prima a velocità bassa e dopo la velocità può essere aumentata. Questo lo prevede già il programma, nella funzione di disk_initialize(). Prima viene inizializzata a 100kHz, poi io aumento la velocità a 10 MHz. E' difficile che mi sono sbagliato qui perché queste velocità le ho impostate io, erano due delle poche parti di codice che si dovevano modificare.
Adesso faccio altre prove (anche in scrittura) e dopo scrivo qui i risultati
Problema velocità SPI PIC32MX
Moderatore:
Paolino
29 messaggi
• Pagina 3 di 3 • 1, 2, 3
0
voti
Alla fine era ovviamente come dicevi tu, chiudendo la board e riaprendola si blocca. Come avevi previsto, durante la programmazione la board non stacca l'alimentazione quindi la SD rimane inizializzata dalla fase di debug e quindi funziona, ma spegnendo la board ovviamente non funziona.
Ho anche provato a sostituire tutto il contenuto della funzione disk_initialize() con le funzioni di mikroC per l'inizializzazione della SD (funzioni da me testate e funzionanti su altri programmi) ma si blocca in ogni caso.
L'unica soluzione è cambiare compilatore.
Grazie bobina mi hai dato un grande aiuto nella comprensione del problema anche se non lo abbiamo risolto...a presto
Ho anche provato a sostituire tutto il contenuto della funzione disk_initialize() con le funzioni di mikroC per l'inizializzazione della SD (funzioni da me testate e funzionanti su altri programmi) ma si blocca in ogni caso.
L'unica soluzione è cambiare compilatore.
Grazie bobina mi hai dato un grande aiuto nella comprensione del problema anche se non lo abbiamo risolto...a presto

0
voti
Almeno abbiamo capito dov'era il problema, sicuramente cambiare compilatore può essere un buon punto di partenza, ma credo che anche il codice fatFS implementato per PIC24 potrebbe crearti problemi per PIC32 se non rivisto in qualche punto. Già il fatto che in debug funziona ma con le ottimizzazioni no, vuol dire che il compilatore sta facendo il suo lavoro, quel codice di fatto funziona se viene eseguito senza ottimizzazioni. Ma almeno senza ottimizzazioni la read è veloce?

Di nulla, grazie a te per avermi dato questa possibilità...Grazie bobina mi hai dato un grande aiuto nella comprensione del problema anche se non lo abbiamo risolto...a presto
0
voti
bobina ha scritto:AMa almeno senza ottimizzazioni la read è veloce?
la velocità non l'ho testata, perché prima volevo vedere se funzionavano tutte le funzioni di base (lettura, scrittura ecc). Non ho nemmeno tanto tempo per sviluppare la mia applicazione altrimenti sarei subito passato ad un altro compilatore.
Comunque se in futuro (non troppo lontano ovviamente) avrò aggiornamenti li scriverò qui, almeno se qualcuno cerca con google il problema si ritrova qui, essendo electroyou in buona posizione nell'indicizzazione di google.
0
voti
Do un rapido aggiornamento. Mi sono scaricato MPLA X IDE, con compilatore XC32. Devo dire che non è stato molto traumatico il passaggio. Ho fatto il porting del codice, e me lo compila senza alcun problema, solo che rimane bloccato all'interno delle funzioni f_read e f_write. Purtroppo, non disponendo di un debugger per MPLAB, non so esattamente dove si blocca. Le funzioni f_mount e f_open funzionano correttamente.
Allego il mio codice, e ne spiego brevemente il funzionamento: se f_mount restituisce un valore diverso da FR_OK, si accende il LED A9. Se f_open restituisce un valore diverso da FR_OK, si accende il LED A10. Ho testato la funzionalità di questi due comandi e funzionano: i LED rimangono spenti, se provo a togliere la SD si accendono entrambi, se lascio la SD ma provo ad aprire un file che non esiste si accende solo A10. Quindi il funzionamento è corretto.
Inoltre alla fine del programma si deve accendere il LED A6. Se uso solo quei due comandi, si accende. Se aggiungo i comandi f_read o f_write non si accende più, sintomo che appunto si blocca all'interno di questi due.
Ho usato due diversi adattamenti del codice, ed entrambi mi portano a questo risultato. Il primo, ho semplicemente preso gli esempi per PIC24 dal sito dell'autore, e ho sostituito i comandi "platform dependent" per la mia configurazione. Il secondo, ho preso un codice già adattato per lo stesso identico PIC32 mio (795), e qui ho dovuto cambiare solamente i numeri dell'SPI e del chip select.
Il fatto che arrivo allo stesso risultato mi porta a pensare che ci sia un problema, non che sbaglio la configurazione (che comunque sono davvero pochissime righe di codice).
Un utente sul forum della microchip ha suggerito che ciò accade perché l'alimentazione deve essere staccata prima dell'inizializzazione della SD, cosa che la mia board non fa.
Allego il mio codice, e ne spiego brevemente il funzionamento: se f_mount restituisce un valore diverso da FR_OK, si accende il LED A9. Se f_open restituisce un valore diverso da FR_OK, si accende il LED A10. Ho testato la funzionalità di questi due comandi e funzionano: i LED rimangono spenti, se provo a togliere la SD si accendono entrambi, se lascio la SD ma provo ad aprire un file che non esiste si accende solo A10. Quindi il funzionamento è corretto.
Inoltre alla fine del programma si deve accendere il LED A6. Se uso solo quei due comandi, si accende. Se aggiungo i comandi f_read o f_write non si accende più, sintomo che appunto si blocca all'interno di questi due.
Ho usato due diversi adattamenti del codice, ed entrambi mi portano a questo risultato. Il primo, ho semplicemente preso gli esempi per PIC24 dal sito dell'autore, e ho sostituito i comandi "platform dependent" per la mia configurazione. Il secondo, ho preso un codice già adattato per lo stesso identico PIC32 mio (795), e qui ho dovuto cambiare solamente i numeri dell'SPI e del chip select.
Il fatto che arrivo allo stesso risultato mi porta a pensare che ci sia un problema, non che sbaglio la configurazione (che comunque sono davvero pochissime righe di codice).
Un utente sul forum della microchip ha suggerito che ciò accade perché l'alimentazione deve essere staccata prima dell'inizializzazione della SD, cosa che la mia board non fa.
0
voti
mi ero dimenticato di allegare il file, lo allego ora
- Allegati
-
provaFatFS.X.rar- (611.05 KiB) Scaricato 138 volte
0
voti
La variabile scritti non ha un inizializzazione.
Così dovrebbe andare:
Così dovrebbe andare:
- Codice: Seleziona tutto
UINT scritti;
res=f_read(&file1,&caratt,1,&scritti);
0
voti
incredibile! hai ragione! Il bello è che se non ricordo male una prova del genere l'avevo fatta...ma è impossibile visto che adesso funziona...
io pensavo fosse la stessa identica cosa usare UNIT *scritti e poi nella funzione mettere scritti, invece che usare UNIT scritti e poi nella funzione mettere &scritti.
Sono un niubbo...
Adesso ho anche provato la funzione f_write. Essa viene completata, nel senso che il programma raggiunge la fine, ma viene scritto un solo byte su file. Ad esempio:
res=f_write(&file1,stringa,4096,&scritti);
dove stringa è una stringa di 4096 byte di carattere 'a'. Su file mi viene scritta una sola 'a'.
io pensavo fosse la stessa identica cosa usare UNIT *scritti e poi nella funzione mettere scritti, invece che usare UNIT scritti e poi nella funzione mettere &scritti.
Adesso ho anche provato la funzione f_write. Essa viene completata, nel senso che il programma raggiunge la fine, ma viene scritto un solo byte su file. Ad esempio:
res=f_write(&file1,stringa,4096,&scritti);
dove stringa è una stringa di 4096 byte di carattere 'a'. Su file mi viene scritta una sola 'a'.
29 messaggi
• Pagina 3 di 3 • 1, 2, 3
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 23 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


