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 ;)
>Dann würde ich da eher einen externen DAC via I2S ranhängen. Was spricht dagegen, den OnBoardAudioCodec CS43L22 zu nutzen? http://www.st.com/content/ccc/resource/technical/document/user_manual/70/fe/4a/3f/e7/e1/4f/7d/DM00039084.pdf/files/DM00039084.pdf/jcr:content/translations/en.DM00039084.pdf
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.
:
Bearbeitet durch User
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.
Ich werd's einfach mal ausprobieren. Danke vielmals für eure Hilfe! Tolles Forum!
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.