Un dispositivo lettore MP3 ha un driver audio?
Solo pochi mesi fa, ho scritto il codice per un lettore MP3 per il framework Harmony 3 di Microchip, che supporta i loro microcontrollori MIPS (PIC32) e ARM (SAM) a 32 bit.
Ecco lo schema a blocchi del lettore:
I componenti principali di un lettore multimediale sono:
- B host library, per ospitare un dongle USB con un file system (o)
SD media card library (per ospitare una scheda SD o micro-SD con un file system) - Audio decoder library (WAV, MP3 ecc.)
- Libreria audio (driver I2S, driver per periferiche I2S, e driver codec)
- Libreria grafica (se fornisce una GUI)
Questo lettore legge i file da un dongle USB, mostrato in basso a sinistra del diagramma, ma ho anche una versione che legge i file da una scheda SD.
I file MP3 vengono letti e poi decodificati usando la libreria MP3 Audio Decoder (in verde), in un flusso PCM. Questo viene poi inviato al driver AK4954 Codec (in blu) che invia l'audio digitale utilizzando un protocollo I2S tramite un driver I2S (blu) e una periferica (nera) al codec esterno AK4954, che converte il flusso I2S in uscita analogica per un paio di cuffie.
Piuttosto che scrivere il mio decoder MP3, che sarebbe un compito enorme, ho usato uno open-source chiamato Helix che ho aggiunto ad Harmony 3 come libreria. Helix è usato nella linea di prodotti RealPlayer, ed è disponibile sotto diverse licenze open-source. Ho poi aggiunto del codice per visualizzare le informazioni nei tag ID3, come il titolo della canzone, l'artista, l'album alla libreria.
Questo è l'aspetto del programma nel grafico del progetto MPLAB X Harmony Configurator (MHC) di Harmony:
Il terzo superiore sono principalmente i componenti per l'interfaccia grafica. Sono tutti riuniti insieme selezionando un modello grafico per il display (TM4301B). In base al tipo di scheda di sviluppo (PIC32MZ EF Curiosity 2.0), le periferiche appropriate e le assegnazioni dei pin sono selezionate automaticamente.
Poi hai l'audio. Ancora una volta, questo viene portato selezionando un modello audio per il codec AK4954. Ancora una volta in base al tipo di scheda di sviluppo (PIC32MZ EF Curiosity 2.0), le periferiche appropriate (I2C1 e I2S2) sono selezionate automaticamente.
In fondo ci sono i componenti per l'interfaccia host USB per un thumb drive (MSD=mass storage device), insieme a un file system.
I blocchi STDIO e UART nell'angolo in basso a sinistra non sono in realtà parte dell'applicazione, ma piuttosto aggiunti per il debug - qualsiasi output tramite un'istruzione printf nel mio codice viene inviato tramite la porta di debug a una porta COM virtuale sul mio PC dove posso visualizzarlo con un programma terminale come RealTerm.
Molti dei componenti hanno opzioni di configurazione; io ho selezionato il codec AK4954 (contorno in verde nel grafico del progetto) e il suo menu di configurazione è mostrato sul lato destro.
Una volta che tutti i componenti sono stati selezionati, premendo un pulsante Code si genera tutto il codice per i componenti mostrati. Si deve poi scrivere l'applicazione che lega tutto insieme - rispondendo a eventi come l'inserimento della chiavetta USB (causando la lettura della directory), rispondendo ai pulsanti dell'utente nella GUI che vengono premuti (play/pausa, avanti veloce, volume, ecc.).
L'applicazione deve anche aprire il file selezionato, passarlo al decoder appropriato (come MP3), e poi passare i campioni PCM decodificati al DMA che alimenterà il codec sul bus I2S.
Tutto il codice dell'applicazione è disponibile in un repo GitHub.
Ho questa applicazione in esecuzione sia su un microcontrollore MIPS (PIC32MZ2048EFM144) che ARM (ATSAME70Q21B), con esattamente lo stesso codice dell'applicazione - tutte le differenze nel codice sorgente sono nei driver e nelle librerie periferiche il cui codice è generato automaticamente da Harmony dal grafico del progetto e dal menu di configurazione associato.
Ecco una foto di esso in esecuzione sulla scheda PIC32MZ EF Curiosity 2.0. Il codec AK4954 è sulla daughterboard in alto a destra dell'immagine.
Articoli simili
- Un radioamatore può inviare audio a un lettore mp3 o qualsiasi altro dispositivo che riproduce audio o ha un altoparlante?
- Cos'è il firmware? So come scrivere i driver, so cosa si fa nello sviluppo dei driver, ma dove sta il bisogno di un firmware?
- Come risolvere il mio lettore MP3 formato di file non supportato anche se uso MP3 come estensione della mia canzone
- Come risolvere OnePlus Bullets Wireless Z nessun audio durante il gioco e Discord su un laptop/PC MSI con driver audio Nahimic