Hi,
ich suche gerade für ein bevorstehendes Projekt die passende Plattform
und bin dabei auf das STM32F4 Discovery Board gestoßen.
Bisher habe ich ausschließlich Erfahrung mit Arduino Plattformen und
Einplatinencomputern.
Mich würde interessieren, ob das STM32F4 Discovery Board für das Projekt
geeignet wäre, bzw. ob es die Anforderungen erfüllt, vor allem ob es die
benötigte Performance leisten kann.
Die Anforderungen:
- sehr kurze Bootzeit von max. 3-4 Sekunden (sollte bei Mikrocontrollern
ja kein Problem darstellen)
- gleichzeitige Wiedergabe mehrerer (mindestens 4) Audiodateien (wav, 16
Bit Stereo 44,1 oder 48 kHz) von Speicherstick (alternativ auch von
SD-Karte, egal)
- möglichst kurze Latenzzeiten für die Audio-Wiedergabe, also die Zeit
vom Beginn der Anforderung bis zum Ertönen des Sounds (am liebsten im
Bereich bis ca. 20ms)
Es sind hunderte Soundfiles in sehr unterschiedlichen Längen vorhanden,
von denen mehrere gleichzeitig in nicht vorhersehbarer Reihenfolge
abgespielt werden müssen. Vergleichbar wäre das ganze mit einem
elektronischen Keyboard, das irgendwelche Samples abspielt.
Die Audioqualität sollte möglichst gut sein, mindestens Hifi. Diese
hängt ja grundsätzlich vom verwendeten DAC ab. Aber ich habe irgendwo
was von 12-Bit Sound in Verbindung mit dem STM32F4 Discovery Board
gelesen. Stimmt das? Wenn ja, hat jemand Erfahrung mit der Qualität der
Audioausgabe des Discovery Boards? Das hat ja soweit ich gesehen habe
eine Mini-Klinkenbuchse.
Ich habe Grundkenntnisse in c++ und hoffe, dass diese für das Projekt
ausreichen. Gibt es fertige Libraries für die Audiowiedergabe, die das
stemmen können? Ein Problem das ich sehe (ohne mich damit näher
auszukennen) ist, dass ich für die Ausgabe DMA verwenden muss, aber ob
es damit möglich ist, mehrere Dateien gleichzeitig wiederzugeben, kann
ich nicht beurteilen. Sobald ich auf Softwarebasis Audiokanäle mixen
muss, ist's nach meinem Verständnis mit DMA vorbei.
Für Antworten wäre ich sehr dankbar. Habe schon viel gegoogelt, aber
dafür sind meine Fragen einfach zu speziell.
Grüße,
Manu
Manu schrieb:> Sobald ich auf Softwarebasis Audiokanäle mixen> muss, ist's nach meinem Verständnis mit DMA vorbei.
Nich ganz korrekt: Man gibt einen Puffer per DMA aus, und mixt
gleichzeitig den nächsten ab. Spannend wird das erst wenn die
unterschiedlich schnell und unterschiedlich laut abgespielt werden
sollen.
Manu schrieb:> Die Audioqualität sollte möglichst gut sein, mindestens Hifi.
Dann würde ich da eher einen externen DAC via I2S ranhängen.
Manu schrieb:> Es sind hunderte Soundfiles in sehr unterschiedlichen Längen vorhanden,> von denen mehrere gleichzeitig in nicht vorhersehbarer Reihenfolge> abgespielt werden müssen.
Würde ich mit einer dicken SDXC Karte lösen, das ist die billigste und
am einfachsten zu programmierende Variante - siehe FATFS. Ich weiss
allerdings nicht wie die Dinger bei mehreren Streams gleichzeitig
performen - da kann es durchaus deutliche Unterschiede zwischen Karten
geben.
Jim M. schrieb:> Würde ich mit einer dicken SDXC Karte lösen, das ist die billigste und> am einfachsten zu programmierende Variante - siehe FATFS. Ich weiss> allerdings nicht wie die Dinger bei mehreren Streams gleichzeitig> performen - da kann es durchaus deutliche Unterschiede zwischen Karten> geben.
Das STM32F4 Discovery hat leider keinen SD Slot. Sehr schade, weil die
Controller auch 4Bit SDIO können (in Hardware).
Ich würde mir daher ein Board suchen, dass schon einen SD Slot hat ...
Ah und SDRam nicht vergessen ;)
Mampf unterwegs schrieb:> Ich würde mir daher ein Board suchen, dass schon einen SD Slot hat ...> Ah und SDRam nicht vergessen ;)
Warum dann nicht gleich das F7 Discovery?
Ram, SD, I2S-DAC und Audioprojekte im Netz, die man als Grundlage nehmen
kann. Und ein Display, damit sich der F746 nicht so langweilen muß ...
chris schrieb:> Was spricht dagegen, den OnBoardAudioCodec CS43L22> zu nutzen?
Eigentlich nix, und er klingt auch brauchbar. Allerdings hat er nur 2
Kanäle, so das man an einen der I2S Busse noch einen 2ten DAC ranhängen
muss.
12 Bit bezieht sich nur auf die Onboard AD und DA Wandler, die man
deswegen für Audio nur in Mittelwellenradio Qualität nutzen kann.
Das grosse Problem ist der kleine RAM des Boards, denn es hat im
Gegensatz zum z.B. Disco F429 Board keinen SDRAM, sondern nur 64kByte
Corecoupled- und 128kByte normalen RAM. Da wird das puffern von USB
Stick oder SD schon etwas hektisch.
Matthias S. schrieb:> Das grosse Problem ist der kleine RAM des Boards, denn es hat im> Gegensatz zum z.B. Disco F429 Board keinen SDRAM, sondern nur 64kByte> Corecoupled- und 128kByte normalen RAM. Da wird das puffern von USB> Stick oder SD schon etwas hektisch.
Was willst du denn da groß puffern, wenn nur gelesen wird? Da reichen
ein paar KB ram. Der stm32f407 könnte sogar ohne zusätzlichen ram 4 MP3
Dateien mischen und ausgeben.
avr schrieb:> Was willst du denn da groß puffern, wenn nur gelesen wird?
Das Lesen von SD Cards kann durchaus mal Latenzen haben, die der Puffer
überbrücken muss. 'Echte' USB Sticks, also keine USB-SD Adapter,
verhalten sich da meistens besser.
Wenn also 4 Kanäle ausgegeben werden sollen, bleiben pro Kanal noch
32kByte, vorausgesetzt, man benutzt für MC-Variablen konsequent den CC
Ram, auf den der DMA Controller nicht zugreifen kann. Das sind 16kWords,
also bei z.B. 48kHz/16bit SampleRate noch 0,33s.
Matthias S. schrieb:> Das Lesen von SD Cards kann durchaus mal Latenzen haben, die der Puffer> überbrücken muss. 'Echte' USB Sticks, also keine USB-SD Adapter,> verhalten sich da meistens besser.
Wo sollen die Latenzen denn herkommen? Da ist ein NAND-Flash und ein
Controller drin. Schreiben kann durchaus länger dauern und da kann auch
noch Wear-Leveling zuschlagen. Ich würde mal behaupten, dass ein 50ms
Puffer gut ausreicht, solange man nicht gleichzeitig auf die Karte
schreibt. Wahrscheinlich sogar weniger. Wenn man die FAT-Table am
Anfang ausliest, kann man das ganze noch beschleunigen.
Also ich bedanke mich schon mal für die vielen Ratschläge. Das hilft mir
schon weiter.
Jim Meba schrieb:
> Man gibt einen Puffer per DMA aus, und mixt gleichzeitig den nächsten ab.> Spannend wird das erst wenn die unterschiedlich schnell und> unterschiedlich laut abgespielt werden sollen.
Das könnte kompliziert werden. Die Abspielgeschwindigkeit bleibt zwar
konstant, problematisch wirds dann trotzdem wenn die Dateien mit
unterschiedlicher Samplerate vorliegen. Deinen Ausführungen entnehme ich
jedenfalls, dass ich mich um diese Dinge selbst kümmern muss. Demnach
gibt's da wahrscheinlich keine Library, die mir das abnimmt.
>> Die Audioqualität sollte möglichst gut sein, mindestens Hifi.> Dann würde ich da eher einen externen DAC via I2S ranhängen.
Perfekter Tipp, das macht auf jeden Fall Sinn.
Horst schrieb:
> Warum dann nicht gleich das F7 Discovery?
Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert
werden, da zählt fast jeder Euro.
avr schrieb:
> Der stm32f407 könnte sogar ohne zusätzlichen ram 4 MP3 Dateien mischen und
ausgeben.
Echt? Das wäre gigantisch. Hast du da eine Beispielanwendung? Das
besagte Discovery Board hat ja eh einen STM32F407.
Matthias S. schrieb:
>'Echte' USB Sticks, also keine USB-SD Adapter, verhalten sich da meistens besser.
Darauf wird's wohl rauslaufen. Passt ja auch.
avr schrieb:
> Da ist ein NAND-Flash und ein Controller drin. Schreiben kann durchaus> länger dauern und da kann auch noch Wear-Leveling zuschlagen. Ich würde> mal behaupten, dass ein 50ms Puffer gut ausreicht, solange man nicht> gleichzeitig auf die Karte schreibt.
Das muss ich wohl austesten. Daten werden grundsätzlich nicht während
der Wiedergabe auf die Karte geschrieben. Wobei, in einem bestimmten
Modus schreibe ich Log-Informationen auf den Stick. Aber daran soll's
nicht scheitern. Das sind erstens nur wenige Bytes pro Sekunde und
zweitens ist das nicht der Normalmodus.
avr schrieb:
> Wenn man die FAT-Table am Anfang ausliest, kann man das ganze noch
beschleunigen.
Hab ich das selbst in der Hand? Bzw. geben das die entsprechenden
Libraries her? Ich hab ehrlich gesagt keine Lust, Low-Level-Routinen für
den direkten Zugriff auf das FAT32-Dateisystem zu schreiben...
Die Frage ist bei Allem was du schaffen kannst. Es gibt eben nicht alles
fertig.
Manu schrieb:> Die Abspielgeschwindigkeit bleibt zwar> konstant, problematisch wirds dann trotzdem wenn die Dateien mit> unterschiedlicher Samplerate vorliegen.
Für Samplerate Conversion mit festen Faktor gibts eine Library von ST.
Manu schrieb:> avr schrieb:>> Der stm32f407 könnte sogar ohne zusätzlichen ram 4 MP3 Dateien mischen und> ausgeben.> Echt? Das wäre gigantisch. Hast du da eine Beispielanwendung? Das> besagte Discovery Board hat ja eh einen STM32F407.
ne, ich hatte nie den Fall, dass ich mehrere MP3-Dateien mischen musste.
Der Helix MP3 Decoder sollte gleichzeitiges kodieren von 4 MP3 Dateien
packen. Aber das setzt ein effizientes Softwarekonzept voraus. Es könnte
durchaus sein, dass dann nicht mehr genug für Samplerate Conversion
bleibt.
Manu schrieb:> Hab ich das selbst in der Hand? Bzw. geben das die entsprechenden> Libraries her? Ich hab ehrlich gesagt keine Lust, Low-Level-Routinen für> den direkten Zugriff auf das FAT32-Dateisystem zu schreiben...
Mir ist keine FAT-Library für Mikrocontroller bekannt, die das tut.
Praktisch macht es jedes PC-Betriebssystem. Also ohne Modifikation einer
FAT-Library scheidet das aus.
Falls jemand zufällig über dieses Thema stolpert und noch was dazu weiß
oder Erfahrung mit der gleichzeitigen Ausgabe mehrerer Audiospuren (oder
sogar Beispielcode) hat: Ich schaue regelmäßig hier rein. In ca. 4-6
Wochen werde ich erste Tests mit dem STM32F4 Discovery Board machen.
Vorher schaffe ich es zeitlich leider nicht. Für jeden Hinweis, der mich
in irgendeiner Weise weiter bringt oder mir Tüfteleien erspart (da ich
bei Null anfangen muss), bin ich auf jeden Fall dankbar.
Manu schrieb:> Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert> werden, da zählt fast jeder Euro.
Das heißt? 100 Stück? Man nehme einen STM32 mit ein/zwei SAI oder I2S,
ein/zwei Cirrus 24bit I2S DAC und entwerfe sein eigenes Board. Das wird
ähnlich teuer wie das Discovery selber, jedoch hast du dann nicht so ein
Brett mit unnötig Platz und Komponenten verbaut.
Manu schrieb:> Für jeden Hinweis, der mich> in irgendeiner Weise weiter bringt oder mir Tüfteleien erspart (da ich> bei Null anfangen muss), bin ich auf jeden Fall dankbar.
Dazu bräuchte man, wenn es konkret wird, mehr Informationen.
Manu schrieb:> Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert> werden, [...]
Was übrigens laut Nutzungsbedingungen von STmictroelectronics für die
Eval-Boards nicht zulässig ist. Aber das nur am Rande.
Walter T. schrieb:> Manu schrieb:>> Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert>> werden, [...]>> Was übrigens laut Nutzungsbedingungen von STmictroelectronics für die> Eval-Boards nicht zulässig ist. Aber das nur am Rande.
Was ja bei vielen Eval-Boards der Fall ist.
>> Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert>> werden, da zählt fast jeder Euro.> Was übrigens laut Nutzungsbedingungen von STmictroelectronics für die> Eval-Boards nicht zulässig ist. Aber das nur am Rande.
Ah danke für den Hinweis. Lieber ist mir eh eine Eigenentwicklung.
Inwiefern ich das hin bekomme, weiß ich noch nicht. An den Grundlagen
scheitert es nicht (bin gelernter Elektroniker), aber ich habe bisher
keine Erfahrungen wenn es um die Entwicklung von Platinen mit
Mikrocontrollern geht.
> Das heißt? 100 Stück? Man nehme einen STM32 mit ein/zwei SAI oder I2S,> ein/zwei Cirrus 24bit I2S DAC und entwerfe sein eigenes Board.
Das wird die Nachfrage zeigen. Bei der ersten Auflage habe ich an ca. 50
Stück gedacht. Ursprünglich wollte ich die Platinen selbst herstellen.
Kann mir aber nicht vorstellen, dass ich die benötigte Leiterbahndichte
für den STM32 beim selber Ätzen erzielen kann, oder hat jemand Erfahrung
damit?
Meine Idee im Grunde ist nun folgende:
1. Discovery Board zum Testen und für die grobe Entwicklung der
Schaltung (DAC etc.) besorgen
2. Die Software entwickeln (in der Hoffnung dass das Projekt
realisierbar ist)
3. In Eagle oder vergleichbares Layoutprogramm einarbeiten und mit Hilfe
einer entsprechenden Library (z.B.
https://github.com/wicker/STM32F4-Eagle-Library) das Platinenlayout
entwerfen
4. Das ganze als fertig bestückte Platine bei einem Drittanbieter
erstellen lassen und hoffen, dass das irgendwie wirtschaftlich bleibt
Wie realistisch haltet ihr das? Wie würdet ihr vorgehen? Die
Selbstkosten pro Platine sollten natürlich möglich niedrig bleiben. Ich
denke an maximal 50 EUR. Ein Audioverstärker soll auch noch integriert
werden.
Was die Samplerate angeht:
Über I²S gibt man mit einer definierten Samplerate Daten zum DAC. Wenn
man mehrere Dateien mit verschiedenen Sampleraten hat, muss man diese im
Mikrocontroller "konvertieren"/Überabtasten etc...
Das Problem kann man recht gut lösen, indem man sagt, dass die wav-Files
auf der karte eine bestimmte Samplerate haben müssen. Damit spart man
sich das ganze konvertieren im Controller (weniger code, einfacher,
schneller). Sollten die Files in unterschiedlichen Raten vorliegen, kann
man sie ja leicht vorher am PC konvertieren.
Es gibt beim Chinamann fertige F407 Boards zum Preis des nackten
Controllers, z.B.
https://www.ebay.de/itm/STM32F407VET6-STM32-Cortex-M4-Development-Board-NRF2410-FMSG-SD-Card/172722032708
SD-Slot ist auch schon drauf. Kannst du mit machen was du willst und
wenn gewünscht, dann bekommst du aus Shenzhen wahrscheinlich auch einen
ganzen Container von den Dingern ;)
Für ein paar Euro mehr gibt es auch noch Boards mit F407ZET6 statt
F407VET6, also 144-Pin statt 100-Pin und bei den ZET6-Boards kannst du
auf der Rückseite einen SRAM einlöten, falls gewünscht.
M. H. schrieb:> Was die Samplerate angeht:>> Über I²S gibt man mit einer definierten Samplerate Daten zum DAC. Wenn> man mehrere Dateien mit verschiedenen Sampleraten hat, muss man diese im> Mikrocontroller "konvertieren"/Überabtasten etc...>> Das Problem kann man recht gut lösen, indem man sagt, dass die wav-Files> auf der karte eine bestimmte Samplerate haben müssen. Damit spart man> sich das ganze konvertieren im Controller
Ja das sehe ich auch so. Mit diesem Kompromiss kann ich leben.
Christopher J. schrieb:> Es gibt beim Chinamann fertige F407 Boards zum Preis des nackten> Controllers, z.B. Ebay-Artikel Nr. 172722032708
Danke für den Hinweis. Für die Entwicklung werde ich mir dann
voraussichtlich ein solches holen (plus Cirrus DAC, etc.). In das
Endprodukt darf ich ja leider keine Entwicklungsboards einbauen.
@Manu (Gast)
>- sehr kurze Bootzeit von max. 3-4 Sekunden (sollte bei Mikrocontrollern>ja kein Problem darstellen)>- gleichzeitige Wiedergabe mehrerer (mindestens 4) Audiodateien (wav, 16>Bit Stereo 44,1 oder 48 kHz) von Speicherstick (alternativ auch von>SD-Karte, egal)>- möglichst kurze Latenzzeiten für die Audio-Wiedergabe, also die Zeit>vom Beginn der Anforderung bis zum Ertönen des Sounds (am liebsten im>Bereich bis ca. 20ms)
Das gibt es schon fertig zu kaufen mit 8 Kanälen.
http://www.neurocore.de/modules.html
Es ist das Audiotaktile Modul, leider fehlen dort im Moment die Bilder.
Siehe Anhang.
>Es sind hunderte Soundfiles in sehr unterschiedlichen Längen vorhanden,
Im Moment unterstützt die Software bis zu 200 Soundfiles mit insgesamt
128MB (interner Flashspeicher).
>Ich habe Grundkenntnisse in c++ und hoffe, dass diese für das Projekt>ausreichen.
Das allein reicht nicht. Und laß dir gesagt sein, daß da EINIGES an
Arbeit drin steckt. Been there, done that.
@ Manu (Gast)
>konstant, problematisch wirds dann trotzdem wenn die Dateien mit>unterschiedlicher Samplerate vorliegen.
Dann musst du sie VORHER am PC auf eine einheitliche umrtechnen!
>> Warum dann nicht gleich das F7 Discovery?>Weil das zu teuer wäre. Das Projekt soll als (Klein-)serie produziert>werden, da zählt fast jeder Euro.
Na dann mal los. Kleinserie und Chinapreise sind ein Widerspruch.
>> Wenn man die FAT-Table am Anfang ausliest, kann man das ganze noch>> beschleunigen.>Hab ich das selbst in der Hand? Bzw. geben das die entsprechenden>Libraries her?
Ja.
http://elm-chan.org/fsw/ff/doc/lseek.html
@Manu (Gast)
>Ah danke für den Hinweis. Lieber ist mir eh eine Eigenentwicklung.>Inwiefern ich das hin bekomme, weiß ich noch nicht. An den Grundlagen>scheitert es nicht (bin gelernter Elektroniker), aber ich habe bisher>keine Erfahrungen wenn es um die Entwicklung von Platinen mit>Mikrocontrollern geht.
dann hast du SEHR viel vor dir. Gefühlt eher ZU viel auf einmal.
>Das wird die Nachfrage zeigen. Bei der ersten Auflage habe ich an ca. 50>Stück gedacht. Ursprünglich wollte ich die Platinen selbst herstellen.
Unsinn.
>Kann mir aber nicht vorstellen, dass ich die benötigte Leiterbahndichte>für den STM32 beim selber Ätzen erzielen kann, oder hat jemand Erfahrung>damit?
Geht schon, ist aber bei dein heutigen Möglichkeiten mit China & Co
Unsinn.
>Meine Idee im Grunde ist nun folgende:
Im Prinzip richtig.
>Wie realistisch haltet ihr das?
Bei deinem Wissenstand? SEHR sportlich. Zeitrahmen in Richtung 1 Jahr.
>Selbstkosten pro Platine sollten natürlich möglich niedrig bleiben. Ich>denke an maximal 50 EUR.
Auch SEHR sportlich!
> Ein Audioverstärker soll auch noch integriert>werden.
Und was soll das am Ende darstellen? Wofür wird es verwendet? Was ist
die Zielgruppe? Warzm muss es so extrem billig sein?
Zumindest weiß ich jetzt in welche Richtung es gehen soll. Und ich halte
es für machbar. Dass es nicht einfach wird, ist mir klar. Ob ich das in
einem Jahr hin bekomme, weiß ich auch noch nicht.
@Falk Brunner: Danke für den Hinweis auf die 8-Kanal-Karte. Ich gehe mal
davon aus, dass du Soft- und Hardware entwickelt hast. Im Prinzip kommt
das meinem Projekt ja schon einigermaßen nahe. Worum es dabei genau
geht, möchte ich hier nicht öffentlich breit treten. Das Netz "vergisst
nie" und ich möchte spätere Käufer nicht hinter die Kulissen schauen
lassen, da der Einsatzzweck hoch speziell ist und nur eine
verhältnismäßig kleine Zielgrupppe anspricht. In einer privaten
Nachricht würde ich dir das aber schon verraten.
@Manu (Gast)
>verhältnismäßig kleine Zielgrupppe anspricht. In einer privaten>Nachricht würde ich dir das aber schon verraten.
Dann schick mir eine Email. Einfach meinen blauen Namen anclicken.