SD card wav player

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Re: SD card wav player

Postby legacy » 23 Aug 2014, 15:37

andrea_mori wrote:qualsiasi operazione, pur minima, da effettuare agli interrupt produrrà latenza, a meno che l'operazione si riduca ad alzare (o abbassare)semplicemente il livello di una porta


se riduci a zero il context switch necessario per eseguire la ISR e fai forte uso di variabili globali, p.e. puntatori alla FIFO, direi due cose

1) la latenza aggiunta dalla CPU e' molto bassa e confrontabile al piu' con un paio di istruzioni macchina, il che significa qualche colpo di clock (5 o 6 nel caso peggiore di architetture NON pipelined multiciclo) alla frequenza del CPU_clock che e' ordine dei Mhz, quindi relativamente poca cosa.

2) e in ogni caso, se a te da fastidio una qualsiasi cosa aleatoria, la latenza in oggetto e' sistemica, quindi non dovrebbe darti noia perche' volendo puoi anche correggerla (anticipando)
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: SD card wav player

Postby andrea_mori » 23 Aug 2014, 17:00

legacy wrote:se riduci a zero il context switch necessario per eseguire la ISR e fai forte uso di variabili globali, p.e. puntatori alla FIFO, direi due cose

1) la latenza aggiunta dalla CPU e' molto bassa e confrontabile al piu' con un paio di istruzioni macchina, il che significa qualche colpo di clock (5 o 6 nel caso peggiore di architetture NON pipelined multiciclo) alla frequenza del CPU_clock che e' ordine dei Mhz, quindi relativamente poca cosa.

2) e in ogni caso, se a te da fastidio una qualsiasi cosa aleatoria, la latenza in oggetto e' sistemica, quindi non dovrebbe darti noia perche' volendo puoi anche correggerla (anticipando)


Ok, grazie per i suggerimenti.
Ricapitolando, uso il contatore esterno del bit clock per gestire l'interrupt e comunicare alla cpu che deve avanzare al successivo bit sulle porte utilizzate per alimentare DL e DR del dac. Nel frattempo ho anticipato, nel senso che il bit è già presente all'uscita al momento del bit clock sul dac, l'interrupt farà avanzare il successivo.
Devo comunque fare in modo che sia la cpu ad abilitare il contatore solo quando il primo bit è presente, e a disabilitarlo in caso di eventi esterni che interrompono il flusso continuo dei dati, ma questo dovrebbe essere semplice da realizzare con poche porte logiche.
Il clock a 44.1 kHz sarà un'operazione completamente esterna alla cpu, dal momento che si verificherà quando i contatori raggiungeranno 256 e si resetteranno, continuando a leggere i bit in base al bit clock. Devo solo verificare dal datasheet del dac quali fronti utilizzare e se deve esserci un ritardo tra il latch dell'ultimo bit ed il clock sul pin LE che abilita il dac ad aggiornare gli switches. Rimane comunque tutto esterno al micro.
Non dovrebbero esserci in effetti problemi di latenza, dal momento che il bit clock avrà una frequenza molto più bassa della cpu.

Qual è il modo più efficace per implementare tutto questo nel micro?
Presumo l'interfaccia SDIO per leggere il file system della sd card.
Quali porte dovrei utilizzare per l'IO, 1 input per l'interrupt da clock esterno, 1 output per abilitare i contatori, 2 output per i dati da passare al dac (canale destro e sinistro)?
Non credo di poter utilizzare la SPI per i dati, dato che sulla base board mi sembra essercene 1 sola, insufficiente per alimentare simultaneamente i due canali del dac.
andrea_mori
 
Posts: 11
Joined: 21 Aug 2014, 14:15

Re: SD card wav player

Postby deluca » 23 Aug 2014, 18:30

@andrea
sei in possesso del TDA1541A o lo devi acquistare, cioè chiedo: come mai questa scelta obsoleta risalente al '91?
La scelta è dettata da qualche motivo in particolare o solo per il fatto che pensi di utilizzarlo in streaming simultaneo su L e R?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: SD card wav player

Postby andrea_mori » 24 Aug 2014, 00:39

deluca wrote:@andrea
sei in possesso del TDA1541A o lo devi acquistare, cioè chiedo: come mai questa scelta obsoleta risalente al '91?
La scelta è dettata da qualche motivo in particolare o solo per il fatto che pensi di utilizzarlo in streaming simultaneo su L e R?


Posso utilizzarlo anche in I2S, e probabilmente lo userò in questo modo poiché mi semplifica le cose con il uC, dal momento che necessita di una sola linea dati per i due canali.
Di TDA1541A ne posseggo almeno una decina, ma è possibile recuperarli anche oggi da qualche vecchio CD player in disuso acquistabile per pochi euro.
Tuttavia la scelta è legata ad una ragione molto più semplice: per quel che ho potuto ascoltare fino ad ora, e ne ho ascoltati tanti, è il miglior dac mai costruito per quanto riguarda le qualità soniche, anche se non è semplice da implementare.
Comunque rimane anche l'alternativa del dac discreto R2R, che prenderò in considerazione in seguito.

E non è l'unico dispositivo obsoleto con il quale sono solito "giocare". Trovo che i tubi siano tuttora superiori al silicio e dove posso ne faccio uso. I tubi sono dispositivi tendenzialmente lineari, e questo è un grande vantaggio in audio perché permette di eliminare completamente la controreazione.
andrea_mori
 
Posts: 11
Joined: 21 Aug 2014, 14:15

Re: SD card wav player

Postby andrea_mori » 24 Aug 2014, 17:31

Riflettendo un po' ho concluso che mi è più conveniente utilizzare il protocollo I2S.
Ho una sola line dati seriali da gestire sulla quale transiteranno i bits dei due canali.
Posso svincolare i clock necessari al DAC dal micro: partendo dall'oscillatore esterno a 11.2896 MHz e utilizzando un paio di contatori 74LVC161 otterrò su QD del secondo i 44.1 kHz necessari per il WS del DAC, e su QC del primo i 1.4112 MHz per il bit clock SCK del DAC.
Questi possono "frullare" tranquillamente a prescindere da cosa sta facendo il micro, l'unica condizione è che l'ingresso DATA del DAC sia a livello basso, in modo che acquisendo tutti i bit a zero anche il segnale analogico in uscita sarà 0 (l'I2S utilizza 2's complement MSB first, quindi x'00 00' è effettivamente lo zero analogico).
A questo punto ho bisogno di implementare un paio di interrupt: il primo servirà al micro per sincronizzare l'inizio della trasmissione, ossia l'MSB del canale sinistro. Per questo posso utilizzare il carry out del secondo contatore, che segnalerà il reset e ripartenza del conteggio.
Il secondo è il bit clock che posso prelevare da QC del primo contatore.
L'unica accortezza da considerare è che quando WS cambia stato (clock a 44.1 kHz) il DAC si aspetta di leggere il primo bit della parola (MSB) al bit clock successivo.
A livello micro, il primo interrupt dovrà gestire semplicemente l'inizio assoluto di invio dei bit sulla linea dati partendo dal MSB del canale sinistro.
Il secondo interrupt si occuperà di far avanzare i dati dal buffer ad ogni occorrenza.
Salvo sincronizzare il tutto in funzione di WS, e quindi del protocollo I2S, non dovrebbero esserci problemi di latenza.

Passando al micro, dove evidentemente non ho sufficienti competenze (ma vedrò di attrezzarmi in seguito), avrei bisogno del consiglio di un esperto sull'architettura da utilizzare.
Ricapitolando, devo leggere i dati in formato Wav dalla SD (presumo utilizzando SDIO), devo accodarli ad un FIFO e gestirne l'overflow (inibendo temporaneamente la lettura della SD), devo gestire i due interrupt suddetti e quindi mi necessitano 2 ingressi, devo far avanzare i dati leggendoli dal FIFO per alimentare la linea dati seriale per il DAC, quindi ho bisogno di un'uscita.
Oltre a questo ho bisogno di gestire l'LCD ed il touch,e se possibile anche un IR per un telecomando minimale, ed ovviamente tutti i relativi interrupt.
andrea_mori
 
Posts: 11
Joined: 21 Aug 2014, 14:15

Re: SD card wav player

Postby js-bascom » 24 Aug 2014, 22:26

Non so se questo progettino aiuta in qualche modo, forse e' troppo semplice. http://elm-chan.org/works/sd8p/report.html

Comunque ben ritornati a tutti! :D
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: SD card wav player

Postby legacy » 25 Aug 2014, 13:39

andrea_mori wrote:devo leggere i dati in formato Wav dalla SD (presumo utilizzando SDIO)


Questo dipende fortemente dalla libreria o modulo che utilizzi per la parte filesystem. Lo standard input output e' un concetto tipo del C rivolto pero' al support offerto dal sistema operativo, sia questo DOS (dove STDIO si sposava con CONIO, console input output, di fatto erano integrati) piuttosto che UNIX o Windows.

In un sistema bareboard … e' a tua discrezione o dipende da come e' stata confezionata la toolchain e relative librerie di supporto. Nel mio caso non ho altro che un compilatore C, un assembler, un linker, e nessuna librerie preconfezionata, ovvero mi sono scritto tutto da me e devio parecchio dal modello STDIO perche' per molti versi e' una inutile complicazione che si paga cara sopratutto in termini di memoria codice occupata (e ne ho poca).

Il tizio jappo del progetto qui sopra si e' scritto un modulo fs_fat16/32 a cui poi ha aggiunto delle primitive fs_open, fs_close, fs_seek, fs_read, fs_write, etc e con queste si giostra di fatto l'accesso LL al data chunk.

Tu potresti p.e. avere una f_open verso il file.wav seguita da una serie di f_read per il prelievo dal data_chunk.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: SD card wav player

Postby deluca » 25 Aug 2014, 14:27

@legacy,
andrea, parla della modalità STIO al posto della SPI e non di STDIO che è un'altra cosa.
Si tratta di un aspetto puramente hardware legato all'interfaccia di comunicazione con la sd-card.
SDIO a cui si riferisce andrea, è la modalità di accesso al alta velocità delle sd-card di nuova generazione che i micro stm32 supportano.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: SD card wav player

Postby legacy » 25 Aug 2014, 15:11

ops, guarda cosa può fare una lettera in meno
nell'assunzione che sia un errore di battitura :lol:

in pratica e' un modo per aumentare la banda

mi era del tutto nuova, buono a saperti
Last edited by legacy on 01 Sep 2014, 23:43, edited 1 time in total.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: SD card wav player

Postby deluca » 28 Aug 2014, 11:26

@andrea
Questo forse un progetto che potrebbe interessarti..... Mr. Bumpei presenta l' SDTrans192/384
Il fatto è che non è rilasciato nulla, niente firmware, niente hardware.... i giapponesi per loro natura sono molto riservati :)

https://translate.google.it/translate?h ... ns192.html

Dalle foto e da quello che ho potuto leggere, il progetto si basa fondamentalmente su uC 8051 silabs e su un FPGA Cyclone III di Altera.

Cosa ne pensi?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Previous

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 2 guests

cron