MP3 přehrávač s pevným diskem

   Na této stránce budou nové verze firmwaru pro tento přehávač. Program je volně k dispozici pod GNU GPL licencí a v zipu je vždy přiložen i licenční soubor. Pokud se rozhodnete SW upravovat nebo jakkoliv využívat, tak doporučuji licenci prostudovat. Dále bych uvítal, kdyby případní konstruktéři poslali foto vlastních realizací apod.
Konstrukce vyšla v časopisech PE6,7,8/2006.


Výtah z "ReadMe.txt" aneb co to umí:
HDD/CF MP3 player založený na dekodéru VS1003 (www.vlsi.fi)
MCU: ATmega64-16AI
XTAL: 16MHz
Překladač: AvrAsm32 v1.74 date dec-2003
Podporované formáty: MP3(CBR, VBR), WMA(CBR, MBR), WAV(IMA ADPCM, PCM),
                     MID(format 0), MOD(4 channels, 15 or 31 samples)
Podporované tagy: MP3 - ID3v1, ID3v2.3 (CP1250 or unicode)
                  WMA - standard tag
                  WAV - standard RIFF tag, ID3v2.3 (CP1250 nebo unicode)
                  MID - standard RIFF tag (RMI), ID3v2.3 (CP1250 nebo unicode)
                  MOD - název skladby (20 znaků z ofsetu 0x0000)
                  Pro všechny soubory bez tagů se zobrazí dlouhý název souboru
                  (s podporou UTF16) nebo krátký 8.3 DOS název          
Disk: parallel ATA do 128GB (LBA28) nastavený na MASTER nebo SINGLE
Souborový systém: FAT32/16/12 ve kterékoliv partition (podpora fragmentace dat), 
                  libovolná velikost clusteru od 512B do 64kB, ideální je použít 
                  více než 8kB
Maximální délka souboru: 98107 clusteru (383MB @ 4kB cluster)
Maximum adresářů/souborů v každém adresáři: 254
Znakové sady: přehrávač podporuje všechny textové znaky z kódování CP1250 
              a jejich ekvivalnety v kódování Unicode/UTF16
USB: podpora Mass Storage protokolu, testováno ve Win 98, Win XP, Win Vista
     a Linuxu Mandriva 2006
     přenosová rychlost se pohybuje v rozmezí 400-600kB/s

Historie verzí:

1.6.2006 - První verze programu, mělo by to být plně funkční. Download v1.0.
9.9.2006 - Doplněn USB Mass Storage protokol. Interface je popsán níže. Download v2.0.
6.1.2007 - Menu adresářů přepracováno do ovladatelnější formy. Podpora až 16 úrovní adresářů, ovládání je nyní realizováno pomocí SKLADBA+/- pro výběr adresáře. Pro vstup do adresáře se používá tlačítko ADRESÁŘ, pro spuštění přehrávání PLAY. V adresáři, který neobsahuje další podadresáře je jen položka ".." pro návrat zpět. V další verzi bude (snad) vstup do takových adresářů blokován, protože je to trochu matoucí. Download v3.0.


Konstrukční návod

   Původně jsem neměl v úmyslu žádný MP3 player stavět, ale během experimentování s HDD a FAT systémy vznikly jako vedlejší produkty konstrukce jako PCM wav player. Pak jsem se přeci jen rozhodl připojit místo D/A převodníku nějaký MP3 dekodér. Jako nejlepší dekodéry se mi jeví produkty firmy VLSI. Tyto dekodéry jsou po několika málo instrukcích po resetu schopny dekódovat MP3 bez jakéhokoliv dalšího nastavování. Navíc tato firma neustále pracuje na vývoji nových typů, takže jsou to velmi perspektivní obvody. V ČR je lze zakoupit u Snail instruments za ceny srovnatelné s cenami výrobce (dnes už bohužel jen doprodej). Rozhodl jsem se zakoupit rovnou nejnovější model VS1003. Ten mimo MP3 dokáže dekódovat také WMA, PCM WAV, ADPCM WAV a MIDI. Předevsím ale disponuje mnohem vyšším výkonem, než obvyklý VS1001, takže nemá žádné problémy ani s MP3 na 320kbps. Zároveň bez problému zvládá korektor basů a výšek a klidně i další pluginy, které lze nahrát do RAM.
   Jako první jsem zkonstruoval skorokapesní přehrávač "Cihla player", který fungoval celkem uspokojivě, takže jsem se rohodl pro propracovanější konstrukci s grafickým LCD. Nová verze je určena pro pevný disk, takže podporuje nejen původní FAT16, ale také FAT32. Navíc jsem přidal i podporu FAT12, protože se mimo FAT neliší od FAT16. Přehrávač je založen na víc než dostačujícím MCU ATmega64-16. Externě je doplněna 512kB SRAM, která velmi usnadňuje práci s FAT souborovými systémy. Celý zbytek RAM, který se nevyužije pro uložení řetězce clusterů souboru, je automaticky využit pro vyrovnávací paměť. Ta sice není nezbytná pro MP3, ale např. pro přehrávání PCM WAV už může být přístupová doba HDD příliš velká. Díky RAM jsem do přehrávače mohl implantovat i můj MOD player, který zabírá jen pár kB.
Návod z PE6,7,8
Výkresy desek plošných spojů

Modul USB interface

   Přibližně od začátku roku 2006 sleduji web podobného open source přehrávače Ikoras. Jeho autorovi se povedlo celkem uspokojive rozchodit USB Mass Storage protokol a ješte k tomu na dostupných a levných součástkách. K Mass Storage protokolu zrovna moc dokumentace není, takže jsem se konečně odhodlal prostudovat SW tohoto přehrávače a pokusit se pochopit princip. Po prostudování jsem tuto implementaci přepsal z C do ASM a zabudvoal do svého přehrávače.


   Datasheet USB obvodu PDI USB D12 z nepochopitelných důvodů neobsahuje žádné schéma, takže i zapojení, a hlavně hodnoty kondenzátorů okolo XTALu, jsem převzal z konstrukce Ikoras 2. Deska USBinterface je připájena na desce přehrávače tam, kde měla být rozšiřující RAM. Zároveň tento modul potřebuje 2 ze 3 volných pinů (PG1 a PC0). Další 2 řídící signály jsou odebrány z ISP konektoru. Jde o nevyužité linky PDO a PDI. Desku je tedy třeba připájet jako rozšiřující modul RAM, dále na konektoru zbývajících pinů a nakonec je ji ještě třeba externím káblem propojit s ISP konektorem. Vlastní programátor se pak připojuje až do tohoto modulu.
   Na desce je rovněž místo pro další 512kB SRAM. Pokud se ji rozhodnete osadit, tak nezapomeňte na IC6 na hlavní desce! Deska je jednostranná a je otočena mědí nahoru. ISP konektor K1 je osazen ze strany součástek. Případná SRAM a USB konektor je osazen ze strany mědi! V žádém případě nesplést! Také je třeba dávat velmi dobrý pozor na zkraty v napájení USB! Před připojením proměřit. Stínění USB konenktoru by nemělo být spojeno s GND. Nakonec jsem to poněkud neelegantně vyřešil ustřižením postranních plechů a konektor jsem přilepil k desce. Samozřejmě není třeba konektor osazovat na desku a pak používat prodlužku na panel, ale konektor vést na panel pomocí obyčejné 4-linky. Na těch pár cm se vlatnosti vedení nijak výrazně nezhorší.


   Vlastní implementace protokolu má pouhých 1500 řádků a k programu přibyly jen 3kB. Po odstranění pár překlepů a troše optimalizace to překvapivě začalo fungovat. I když "fungovat" možná naní ten pravý výraz. Zařízení se sice zinicializuje a celekem šlo i komunikovat, ale přenos byl neskutečně pomalý (asi 250kB/s) a často zcela "zatuhl". Po kompletním přepracování rutin pro zápis/čtení sektorů a dalších úpravách pro co nejvyšší optimalizaci jsem to konečne rozchodil. Chyby přenosu zmizely a přenosová rychlost vzrostla na asi 400-600kB/sec.
   První experimenty jsem prováděl ve Win XP, ale komunikace se mi vůbec nepozdávala. Ovladače v PC se zcela nepochopitelně vyptávaly mnohokrát dokola na tytéž descriptory. Moc jsem se tím nezabýval, protože se po pár vteřinách PC přes tyto zmatky přenese a začne komunikovat s HDD. Ale přenos nebyl nějak zvlášť rychlý a především inicializace trvá klidně i 30s (někdy i bez podsložek, které XP ovladače prochází hned při připojení). V rámci experimentování jsem vyzkoušel přehrávač připojit do starých Win98. Mám tam nainstalovány nějaké univerzální ovladače "U-Storage Win98". Překvapivě to fungovalo a to o dost rychleji, než ve Win XP. Především inicializace proběhne během asi 2s, protože se tyto ovladače vyptávají jen na nejdůležitější descriptory a pak hned přejdou na komunikaci s HDD. Přehrávač jsem testoval i ve Win Vista a Linuxu Mandriva 2006 a funguje rovněž velmi dobře.
   Během experimentování jsem přenesl několik GB dat tam i zpět v několika OS a nezaznamenal jsem už žádné chyby, takže mé úpravy nejspíš budou 100% funkční. Ze zajímavosti jsem ještě na jednom Win98 disku (4GB) spustil defragmentaci a po pár hodinách se vše zdá kupodivu funkční.


   K této úpravě jsem již nevymýšlel žádné další SW složitosti. Přítomnost tohoto modulu detekuje firmware automaticky po zapnutí. USB kabel je možné připojit kdykoliv v menu adresáře. Jindy kabel nepřipojujte a po odebrání zařízení v OS kabel vždy ODPOJTE. Rovněž nepřipojujte kabel před zapnutím zařízení. Během komunikace s PC je na LCD patřičná informace a žádné ovládací prvky nereagují. Po odpojení kabelu se přehrávač (snad) vrátí do menu adresáře a ovládací prvky se odblokují. Někdy to může trvat dost dlouho. Závěrem bych jen doporučil zálohovat data i jinde, než v přehrávači. Přenos se sice zdá být zcela bezpečný, ale např. při výpadku proudu by mohlo dojít k úplné ztrátě dat.
DPS v rozlišení 600dpi, osazení (pohled shora).

Poslední aktualizace: 2.3.2007

(c) 2006, Stanislav Mašláň - využití konstrukce ke komečním účelům není povoleno!