Moduły do odtwarzania plików MP3 (1)

Kiedyś na łamach Elektroniki Praktycznej był opisywany słynny odtwarzacz Yampp. Yampp został zaprojektowany przez Jespera Hansena, a oprogramowanie do niego było rozwijane przez Romualda Białego. Dzisiaj budowanie takich odtwarzaczy plików mp3 nie ma większego sensu. Każdy komputer, tablet czy smartfon potrafi je odtwarzać z lepszą lub gorszą jakością. Są jednak zastosowania, w których wykorzystanie urządzeń mobilnych do odtwarzania zapisanych wcześniej materiałów dźwiękowych jest nie możliwe, lub bardzo utrudnione. Załóżmy, że mamy zbudować urządzenie, które musi informować obsługę o ważnych zdarzeniach za pomocą komunikatów głosowych. W przypadku, kiedy to urządzenie będzie wykorzystywać komputer, lub moduł embeded z wbudowanym systemem operacyjnym np. Linux, to sprawa jest w miarę prosta. Ale kiedy nie mamy do dyspozycji takich środków, to nawet przy zastosowaniu prostego mikrokontrolera można sobie poradzić, dołączając kartę pamięci SD i sprzętowy kodek. Jednak wtedy potrzebne będzie napisanie oprogramowania odtwarzania. Będzie to zadanie tym trudniejsze, im „słabszy” to będzie mikrokontroler. Najprostszym i zarazem najtańszym rozwiązaniem może się okazać zastosowanie specjalizowanego modułu. Jednym z takich modułów jest moduł firmy Catalex z układem YX5300

Moduł z układem YX5300

Moduł z układem YX5300 jest oferowany przez firmę CATALEX. Po krótkim przeszukaniu Internetu nie znalazłem ani strony tej firmy, ani dokumentacji samego układu YX5300. Jest za to dostępny dokument Serial MP3 Player Manual, zupełnie wystarczający do zaaplikowania układu.

Za kompletną płytkę z układem YX5300 , stereofonicznym gniazdem słuchawkowym Jack 3,5mm i złączem karty microSD, zapłaciłem razem z przesyłką ok. 5 USD . Jest to cena bardzo atrakcyjna zważywszy na możliwości układu:

  • Możliwość odtwarzania plików skompresowanych w formacie mp3 i nieskompresowanym WAV
  • Wspierane częstotliwości próbkowania: 8kHz, 11,025KHz, 12KHz, 16kHz, 22,05kHz, 24kHz, 32kHz, 44,1kHz i 48kHz
  • Możliwość użycia kart Micro SD (max 2GB) i Micro SDHC (max 32GB). Format FAT16, lub FAT32
  • Sterowanie odtwarzaniem z wykorzystaniem interfejsu szeregowego UART pracującego z prędkością 9600 bodów
  • Poziomy logiczne na magistrali: UART 3,3V, lub 5V TTL
  • Napięcie zasilania: 3,2V….5,2V maksymalny pobór prądu 200 mA dla 5 VDC
  • Wbudowany wzmacniacz słuchawkowy
  • Cyfrowa regulacja poziomu sygnału audio w 30 krokach

Oprócz wspomnianego gniazda słuchawkowego Jack, na płytce umieszczono 4-pinową listwę golpinów, przeznaczoną do podłączenia zasilania – piny GND i VCC – oraz linii interfejsu UART: RX i TX. Kierunek przesyłania danych jest oznaczony z punktu widzenia modułu. Zielona dioda D1 sygnalizuje gotowość do odtwarzania, pauzę odtwarzania (ciągłe świecenie) lub stan odtwarzania pliku (świecenie przerywane).

Komendy sterujące

Odtwarzacz wymaga, by pliki i katalogi na karcie SD miały nazwy zaczynające się od cyfr. Nazwa katalogu może być wyłącznie liczbą dwucyfrową na przykład 01, 02, 11, 23 itp. Nazwa każdego pliku musi się zaczynać od liczby trzycyfrowej na przykład 001-test1.mp3, 002-test2.mp3. Przykładowa struktura katalogów i nazw plików została pokazana na rysunku 1.

Rysunek 1. Struktura plików na karcie SD

Odtwarzacz identyfikuje pliki na dwa sposoby: komenda odtwarzania może podać numer katalogu i numer pliku w katalogu, stąd struktura plików pokazana na rysunku 2. Można też identyfikować pliki za pomocą indeksu. Indeks jest nadawany w momencie wgrywania na kartę. Inaczej mówiąc o kolejności odtwarzania decyduje kolejność nagrania plików na kartę.

Sterowanie odtwarzaczem odbywa się poprzez wysyłanie do niego komend. Komendy mają format pokazany w tabeli 1.

Tabela 1. Format komend

Bajt (hex) opis
$S 0x7E Bajt startu – zawsze 0x7E
VER 0xFF Informacja o wersji
LEN 0x06 Ilość bajtów komendy bez bajtów startu i końca
CMD Kod komendy
Feedback 0x00, lub 0x01 Potwierdzenie komendy: 00 – bez potwierdzenia, 01 – z potwierdzeniem
Data[0]

Data[1]

….

Data[n]

Parametry komendy – zazwyczaj 2 bajty, ale są dłuższe
$0 0xEF Bajt końca komendy

Zestaw najważniejszych komend sterujących pokazano w tabeli 2.

Tabela 2. Komendy sterujące

Komendy odtwarzania plików Bajty komendy bez sumy CRC Opis
Następny utwór 7E, FF, 06, 01, 00, 00, 00, EF Odtwarzaj następny utwór
Poprzedni utwór 7E, FF, 06, 02, 00, 00, 00, EF Odtwarzaj poprzedni utwór
Odtwarzanie pliku z indeksem 7E, FF, 06, 03, 00, 00, 01, EF

7E, FF, 06, 03, 00, 00, 02, EF

Odtwarzaj pierwszy plik

Odtwarzaj drugi plik

Odtwarzaj pliki na podstawie numeru folderu i pliku w folderze 7E, FF, 06, 0F, 00, 01, 01, EF

7E, FF, 06, 0F, 00, 01, 02, EF

Odtwarzaj plik 001-test1.mp3 z katalogu 01

Odtwarzaj plik 002-test2.mpe z katalogu 01

Itp.

Cykliczne odtwarzanie plików w folderze 7E, FF, 06, 17, 00, 00, 01, EF Cykliczne odtwarzanie plików w folderze 01
Grupowe odtwarzanie plików z indeksem 7E, FF, 09, 21, 00, 05, 01, 02, 03, 04, EF

7E, FF, 0C, 21, 00, 05, 01, 02, 03, 04, 06, 07,08, EF

Odtwarzanie 5 plików w kolejności 05, 01, 02, 04

Odtwarzanie 5 plików w kolejności 05, 01, 02, 04, 06, 07, 08

Stop 7E, FF, 06, 16, 00, 00, 00, EF Zatrzymaj odtwarzanie
Play 7E, FF, 06, 0D, 00, 00, 00, EF Wznów odtwarzanie
Pause 7E, FF, 06, 0E, 00, 00, 00, EF Wstrzymaj odtwarzanie
Shuffle Play 7E, FF, 06, 18, 00, 00, 00, EF Odtwarzanie w przypadkowej kolejności
Play with volume 7E, FF, 06, 22, 00, 1E, 01, EF Ustaw głośność 1E (30) i odtwarzaj plik 01
Set volume 7E, FF, 06, 06, 00, 00, 1E, EF Ustaw głośność 1E (30)
Volume Up 7E, FF, 06, 04, 00, 00, 00, EF Zwiększ głośność o 1
Volume down 7E, FF, 06, 05, 00, 00, 00, EF Zmniejsz głośność o 1
Komendy dodatkowe
Sleep mode 7E, FF, 06, 0A, 00, 00, 00, EF Wprowadź w stan uśpienia
Wake Up 7E, FF, 06, 0B, 00, 00, 00, EF Wybudź układ
Reset 7E, FF, 06, 0C, 00, 00, 00, EF Zerowanie układu
Set DAC 7E, FF, 06, 1A, 00, 00, 00, EF

7E, FF, 06, 1A, 00, 00, 01, EF

Włączenie wyjścia DAC

Wyłączenie wyjścia DAC

Jeżeli bajt feedback (tabela 1) ma wartość 01, to po każdym wysłaniu komendy moduł odpowiada sekwencją 7E, FF, 06, 41, 00, 00, FE, BA EF. Wyzerowany szósty bajt oznacza, że dane zostały odebrane prawidłowo.

Oprócz potwierdzenia przesłania komendy mogą być wysyłane przez moduł ramki spontaniczne, nie będące reakcją na komendę, ale na zdarzenie np. zakończenie odtwarzania konkretnego pliku, lub włożenie/wyjęcie karty SD. Ponadto można wysyłać komendy pytające o status urządzenia. Zostało to pokazane w tabeli 3.

Tabela 3. Ramki spontaniczne i komendy statusowe

Komenda

Odpowiedź

opis

spontanicznie

7E, FF, 06, 41, 00, 00, 00, FE, BA, EF

Dane odebrano prawidłowo

spontanicznie

7E, FF, 06, 3A, 00, 00, 02, FE, BF, EF

7E, FF, 06, 3B, 00, 00, 02, FE, BE, EF

Włożono kartę pamięci

Wyjęto kartę pamięci

spontanicznie

7E, FF, 06, 3D, 00, 00, 04, FE, BA, EF

Zakończono odtwarzać plik 04

7E, FF, 06, 42, 00, 00, 00, EF

7E, FF, 06, 42, 00, 00, 00, FE, B6, EF

Stan – odtwarzanie zatrzymane (stop)

7E, FF, 06, 42, 00, 00, 00, EF

7E, FF, 06, 42, 00, 00, 01, FE, B6, EF

Stan – odtwarza (play)

7E, FF, 06, 42, 00, 00, 00, EF

7E, FF, 06, 42, 00, 00, 02, FE, B6, EF

Stan – pauza

7E, FF, 06, 48, 00, 00, 00, EF

7E, FF, 06, 48, 00, 00, 07, FE, AC, EF

Znaleziono 7 plików

7E, FF, 06, 4C, 00, 00, 00, EF

7E, FF, 06, 4C, 00, 00, 04, FE, AB, EF

Odtwarzany plik nr 4

7E, FF, 06, 43, 00, 00, 00, EF

7E, FF, 06, 43, 00, 00, 1E, FE, 99, EF

Poziom siły głosu =1F

O autorze

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC.
Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.