Tento článek přináší přehled různých hardwarových a softwarových audio řešení od AKM Semiconductor , Adafruit , STMicroelectronics , a Cirrus Logic Inc. Obsahuje také některé „tipy a triky“, které pomohou zajistit úspěšnou implementaci.
Volba zvukového formátu
Pro embeded systém jsou vhodné tři audio formáty: pulzní kódová modulace (PCM), WAV, a MP3. Proč se obvykle dává přednost formátu MP3?
Pulzní kódová modulace PCM je nekomprimovaný, bezztrátový zvukový formát, který je pomocí kodeku používán pro převod digitálního zvukového streamu na analogový výstup. Je to poměrně rozšířený formát, který sahá až do doby CD. PCM by mohl být použit v embedded systému, ale problém je ve velikosti. PCM soubory jsou obvykle mnohem větší než soubory WAV nebo MP3. Pokud bychom používali PCM formát, embeded zařízení by museli obsahovat větší paměti, a to by vedlo k prodražení a zvětšení celkové velikosti zařízení
WAV soubory jsou také nekomprimované a bezztrátové, díky tomu jsou velmi podobné formátu PCM. WAV soubory mají o něco větší velikost než soubory MP3, a proto se stále doporučuje volit tento formát do zařízení, které již obsahují SD kartu nebo jiný typ paměťového média.
U většiny systémů se používá formát MP3. MP3 je ztrátový formát. To znamená, že u zvuku, který je kódován do formátu MP3 může dojít ke ztrátě zvukové informace. Soubory MP3 jsou výrazně menší než PCM nebo WAV. Takže mají menší nároky na velikost paměti. Přenos a ukládání trvá daleko menší čas.
Dospěli jsme k závěru, že vhodnou volbou je použít formát MP3 a nyní musíme nalézt způsob implementace daných funkcí pro zpracování MP3. Jakou formu implementace zvolíme? Pomocí hardwaru nebo softwaru?
Dekódování MP3 pomocí hardware
Nejrychlejší a nejjednodušší řešení je použit hardwarového MP3 dekodéru jako je Adafruit 1681 VS1053B (obrázek 1). VS1053B může přímo přijímat WAV, OGG, MP3 nebo MIDI soubor přes sériový stream a dekóduje bez většího zásahu vývojáře. VS1053B převede dekódovaný stream pomocí 18-bitového digitálně-analogového převodník (DAC) do analogového audio signálu.
Obrázek 1: VS1053B je hardwarový MP3 dekodér, který datový stream převádí do analogového audio signálu. Toto řešení nevyžaduje žádný software ani zkušenosti s převodem mp3 souboru. (Zdroj obrázku: Adafruit)
Zajímavostí je, že pro debugging a kontrolu VS1053B se používá jednoduchý UART, kdežto mnoho jiných dekodérů využívají I2C protokol. Má také osm univerzálních vstupně / výstupních pinů, které lze použít pro aplikaci například pro čtení různých stavů nebo nastavení stavové LED.
Ten, kdo chce vyzkoušet hardwarový kodek VS1053B nemusí stavět vlastní prototypovou desku. Adafruit poskytuje vývojovou desku 1381 VS1053B codek + MicroSD. Na ní je VS1053B, slot pro paměťovou kartu microSD, kterou lze použít pro ukládání zvukových souborů (obrázek 2). Deska je navržena tak, aby mohla být přímo připojena k mikroprocesoru. Ten může číst data z SD karty přes SPI nebo SDIO port a tento stream poslat do VS1053B k dekódování. Výstup VL1053B může být směrován přímo na konektor pro sluchátka nebo reproduktor.
Obrázek 2: 1381 VS1053B Codek + Micro deska od Adafruit obsahuje potřebný hardware, který se snadno připojí k mikrokontroléru. Deska má slot pro MicroSD kartu, ze kterého může mikrokontrolér číst audio data přes SPI a pak je posílat do VS1053B pro dekódování. (Zdroj obrázku: Adafruit)
Dekódování MP3 pomocí software
O něco složitějším řešením, je dekódovat MP3 soubory přímo v mikroprocesoru a potom tento soubor převést na zvukový signál. Ušetří se na součástkách, jelikož není nutné přidávat další komponenty, nicméně přibydou nové nároky na procesor. Je nutné mít několik softwarových komponent, které musí procesor zpracovávat:
- Knihovnu MP3 dekodéru
- Řadič paměťového úložiště
- Souborový systém stack
- Přímý přístup do paměti (DMA) řadič
- I2 S ovladač
- I2 C ovladač
- Audio kodek
Na první pohled to vypadá složitě. Nejlepší způsob, jak softwarově realizovat dekódování MP3 je využít řadu mikrořadičů, která přímo podporují kódování zvuku, dekódování a obecně zpracování zvuku.
I když existuje mnoho open source řešení, které lze nalézt na internetu, je lepší se spolehnout na profesionální řešení jako je sada nástrojů STM32 toolchain. K rodině mikroprocesorů STM32 existuje vývojový nástroj s názvem STM32CubeMx, který společně s STM32CubeIDE obsahuje audio příklady a potřebné vývojové knihovny. Příklady a nástroje jsou součástí STM32CubeMX jako plugin s názvem X-CUBE-AUDIO. Plugin poskytuje zvukové knihovny pro MP3 dekódování pro jakýkoli procesor STM32, který je ve třídě ARM Cortex-M4 mikroprocesorů.
Konkrétně existuje ukázkový projekt pro vytvoření MP3 přehrávače, který lze spustit na mikroprocesoru STM32F469IGH6TR . STM32F469IGH6TR obsahuje 1 Mbyte Flash paměť, 384 kByte RAM paměť a běží na 180 MHz. Mikroprocesor se vyrábí v pouzdře uBGA se 176 piny a poskytuje dostatek GPIO pro provedení jakékoliv aplikace.
Obrázek 3: STM32F469IGH6TR je Cortex-M4 procesor, který má 1 MB Flash a 384 kB RAM paměť a běží na 180 MHz. uBGA pouzdro se 176-piny poskytuje dostatek GPIO pro téměř všechny embeded aplikace. (Zdroj obrázku: STMicroelectronics)
MP3 přehrávač běží také na STM32F469I-DISCO discovery vývojovém kitu (obr.4). STM32F469I-DISCO obsahuje vše potřebné k dekódování a přehrávání MP3. Součástí je LCD displej, který má úhlopříčku 4 palce a rozlišení 800 x 480 pixelů. Na displeji jsou zobrazeny ovládací prvky přehrávače jako je přehrávání, zastavení, další a předchozí. Discovery deska obsahuje sluchátkový konektor, kde je výsledný signál ve stereo kvalitě. Jediná nevýhoda tohoto vývojového kitu je to, že MP3 soubory musí být uloženy mimo tuto vývojovou desku v USB paměti, který se připojí pomocí mikro USB konektoru.
Obrázek 4: STM32F469I-DISCO Discovery kit má 4 palcový LCD displej, který slouží k ovládání demonstračního MP3 přehrávače. Zvukové soubory jsou uloženy v externí velkokapacitní USB paměti připojené přes micro USB konektor. (Zdroj obrázku: STMicroelectronics)
Knihovny pro dekódování MP3 vyžadují ARM Cortex-M4 nebo lepší procesor, proto je vhodné si vše ověřit na vývojové desce včetně potřebného výkonu. Pomocí sériového ladění (SWD) a trace monitoringu (ITM) si lze ověřit schopnosti jádra Arm. Je možné provést statistické analýzy a přibližně určit, kolik výpočetního výkonu se používá k dekódování a přehrání MP3. Ukazuje se, že téměř 50% času CPU se používá pro aktualizaci LCD displeje a 10% nebo méně je vynaloženo na dekódování MP3. Tyto audio knihovny od STMicroelectronics jsou velmi účinné díky použití DMA řízení, které přesouvá dekódované rámce přes I2S audio kodek.
V případě aplikace, která nevyžaduje LCD displej lze použít procesor s omezenými funkcemi například STM32F469VGT6. STM32F469VGT6 obsahuje 1 MB Flash a 384 kB RAM paměť, a to vše ve 100 pinovém LQFP pouzdře. Tento procesor není v BGA pouzdře, které může být někdy zastrašující jak pro vývojáře, tak pro výrobce.
Obrázek 5: STM32F469VGT6 je procesor, který běží na 180 MHz a má 1 MB Flash paměť a 384 kB RAM paměť. Je součástí rodiny ARM Cortex-M4, který podporuje audio knihovny. Je proveden ve 100 pinovém LQFP pouzdře, které zjednodušuje výrobní proces. (Zdroj obrázku: STMicroelectronics)
Poté, co je vybrána možnost dekódování, následuje rozhodnutí, jakým způsobem se budou převádět dekódované MP3 soubory z digitální do analogové podoby.
Převod audio streamu na zvuk pomocí kodeku
Většina dekódování pomocí hardwaru obsahuje digitálně analogový převodník (DAC), který je použit pro konverzi digitálního formátu do analogového signálu. Tyto čipy často obsahují I2S rozhraní, které umožňuje přidat vlastní zvukový kodek. Softwarové dekódování také potřebuje kodek pro převod. Existují dva způsoby, jak to lze udělat.
Za prvé vzít digitální audio data, mikroprocesor společně s DAC periferií a generovat zvukový výstup. Tzv. diskrétní řešení. Obecně lze říci, že to není nejlepší způsob, protože to vyžaduje dodatečné diskrétní součástky a pečlivé navržení analogových obvodů. Obecně se vyžaduje navíc napájení pro DAC.
Druhá metoda je použít integrovaný zvukový kodek. Audio kodeky jsou v podstatě integrované obvody, které mají všechny obvody pro generování analogového výstupu, jako DAC převodníky a zesilovače třídy D. Audio kodek má výhodu oproti diskrétnímu řešení v tom, že zabírá velmi málo místo na desce a může mít zabudované digitální obvody pro ovládání zvukového streamu. Například CS43L22-CNZ DAC od Cirrus Logic poskytuje širokou škálu funkcí, jako je:
- Ovládání DAC přes I2C rozhraní
- Několik výstupů pro sluchátka a reproduktor
- Žádný externí filtr není nutný
- Digitální signálový procesor pro nastavení hlasitosti, basy a výšky
CS43L22-CNZ přijímá datový stream PCM přes I2S rozhraní z mikroprocesoru a převádí ho pomocí vnitřního DAC převodníku (obrázek 6). CS43L22-CNZ DAC může obsluhovat více výstupů (reproduktor i sluchátka). Pokud je použit jen mono výstup dosahuje výstupní výkon 2 W na výstup. Pokud bude výstup ve stereo formátu klesne výstupní výkon na 1W na výstup.
Obrázek 6: CS43L22-CNZ je audio DAC převodník, který dosahuje výstupního výkonu až 2 W mono nebo 1 W pro stereo na kanál. DAC integrovaná digitální signálová jednotka zajišťuje snadné ovládání hlasitosti, bas a výšek. (Zdroj obrázku: Cirrus Logic)
Někdy se nevyužijí všechny vlastnosti CS43L22-CNZ, ale volíme ho kvůli jeho malé velikosti, a tak se ušetří místo na desce. Volba převodníku samozřejmě záleží na požadavcích aplikace. Například AK4637EN je audio převodník od AKM (Obrázek 7). Jedná se o 24-bit mono kodek, který má výstupní DAC pro jediný reproduktor. Tento kodek obsahuje i mikrofonní zesilovač, takže jej lze použít také pro nahrání zvuku, pokud si to aplikace vyžaduje.
Obrázek 7: AK4637EN je audio DAC převodník v malém 20 pinovém QFN pouzdru, který dosahuje výstupního výkonu až 1W pro jeden mono výstup. Kodek disonuje rozhraním I2C, které slouží pro řízení výstupní hlasitosti a nastavení automatické regulace výkonu. (Zdroj obrázku: AKM Semiconductor)
Stejně jako většina zvukových kodeků AK4637EN má také rozhraní I 2 S pro příjem digitálních audio dat z mikroprocesoru. Čip obsahuje také I2C rozhraní, které se používá například pro ovládání hlasitosti.
Tipy a triky pro implementaci zpracování MP3
- Provést materiálovou analýzu nákladů. Použití externího dekodéru MP3 vs použít výkonnější mikroprocesor, který lze sám použít pro dekódování MP3.
- Zvolit audio kodek, který je schopen přijímat I2S data a převádí je na zvukový signál. Diskrétní řešení může být časově náročnější kvůli ladění.
- Provést analýzu výkonnosti MP3 softwarové knihovny pomocí vývojové desky a definovat minimální požadavky mikroprocesoru, které jsou nutné pro bezproblémový chod aplikace.
- Zvolit procesor s řadičem DMA pro přenos dekódovaných MP3 dat přes I2S rozhraní. Díky tomu nemusíme volit dražší výkonnější procesor.
- Pečlivě zkontrolovat licence použité softwarové knihovny pro formát MP3, zda může být použita v komerčních produktech. Většina open source knihoven vyžaduje placenou licenci pro komerční účely
Závěr
Přidání audio funkcí do embeded zařízení nemusí být složité. Na trhu je k dispozici široká škála řešení, ze kterých si lze vybrat. Jedná se o specializované externí kodeky nebo použít softwarové knihovny. Přesto je nutné vyhodnotit vlastnosti dané aplikace a určit, která řešení dává největší smysl. Porovnat materiálové náklady, komplexnost řešení, dobu vývoje a ladění diskrétního řešení a budoucí škálovatelnost. Z toho nám vyplyne vhodné řešení pro danou aplikaci
Článek vyšel v originále "How to Efficiently Decode and Play Audio Files in Embedded Systems" na webu DigiKey.com, autorem je Jacob Beningo.