Hallo ihr lieben Mitprogrammierer :)
Die einen habens sicher bemerkt... Ich war fleissig mit den SD Karten am
werk :)
So das lesen und schreiben von dateien sowie sektoren klappt
problemlos...
Das Endziel soll ein MP3 Player sein... ich weiss ich weiss gibt es en
mass aber selber bauen ist halt schon ein meilenstein :)
Ich habe früher mal mit einem 16 Bit Mikrocontroller mit 20Mhz von
Renesas 36049
ein SRAM über die Serielle Schnitstelle des PC's mit Daten befüllt (8Bit
PCM WAV Files). Die adressierung des SRAMS ging über Schieberegister...
Der Datenbus war parallel. Danach habe ich einfach mit fullspeed eine
adresse nach der anderen ausgelesen und hab die daten an einen Port
geleitet.
Dort hatte ich ein DAC aus Widerständen wie es hier im AVR Tut
beschrieben ist angehängt. (Mir ist und war klar das dies so ziemlich
die schlechteste qualität war dies gibt). Daran war ein spannungsfolger
(OP) mit daran gehängtem Lautsprecher...
Und voila... es hat geklappt :) zwar sehr grausige qualität aber man
hats erkannt.
So nun zum eigentlichen thema...
Ich kan nun die SD Karte auslesen. Ich habe mit SUPER (C) ein MP3 in
8bit PCM 22050KHz Sampling rate umgewandelt.
Dieses möchte ich nun auslesen und wie früher an einen port ausgeben.
Klappt eigentlich ganz gut... nuuuur.... seeehr langsam.
Wenn ich das file ins nichts öffne
1 | unsigned char file_name2[20]="MLTT WAV";
|
2 | // Datei existiert, also kann man lesen.
|
3 | if(MMC_FILE_EXISTS == ffopen(file_name2)){
|
4 | // setzen einer Variable und dann runterzaehlen geht am schnellsten !
|
5 | unsigned long int seek=file.length;
|
6 | // lesen eines chars und Ausgabe des chars.
|
7 | // solange bis komplette Datei gelesen wurde.
|
8 | do{
|
9 | ffread();
|
10 | }while(--seek);
|
11 |
|
12 | ffclose();
|
13 | }
|
Dan habe ich gut 20 Sekunden zum auslesen der 2.5MB bei 18.5MHz SPI
Clock
Wenn ich nun jedoch die Daten am Port ausgebe:
1 | *Buffer5 = ffread();
|
2 | GPIO_Write(GPIOB,(Buffer5[usCount]<<8));
|
So war das auslesen auch nach 5Minuten noch nicht zuende...
Mein STM32F103 hat 72MHz Systemclock... da sollte doch mehr drinn liegen
als bei nem 20MHz 16Bitter oder?
Ist es grundsätzlich schwierig den Helix MP3 Decoder zu verwenden?
Diese Aufgabe ist doch ideal für den Internen DMA (Direct Memory Access)
oder?
Ich habe hier noch ca 50 MAX9850 Stereo DAC's
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4525
Denkt ihr das es sehr Rechenintensiv sein würde I2S in Software zu
implementieren?
Ich würde mich freuen wenn ihr mir eure meinungen und Tipps dazu
schreiben würdet...
Grüsse
Claudio