Forum: Mikrocontroller und Digitale Elektronik DAC/Audio-Playback von SD mit hoher Geschwindigkeit


von Josef (Gast)


Lesenswert?

Ich habe aktuell ein Projekt, bei dem es darum geht, vorgefertigte 
"Audiofiles" mit Samplingraten bis 500 kHz bei 24-32 bit von einer 
SD-Karte auf einen Trigger hin abzuspielen (gibt also gern mal knapp 40 
MBit/s Datenverkehr). Es gibt mehrere verschiedene Dateien, und eine 
Playlist, die festlegt, in welcher Reihenfolge (mit Wiederholung) die 
gespielt werden sollen Vor und nach jeder Wiedergabe ist relativ lang 
Zeit (>5x Länge der Datei), eine Datei selbst ist nicht länger als 2 s. 
Soweit so einfach, der eigentliche Trick ist aber, dass das Abspielen 
getriggert sein soll. Also auf einen Pin Change hin, soll mit 100 us 
Zeitgenauigkeit die Wiedergabe der nächsten Datei starten.
Wie würdet an so eine Aufgabe rangehen? Je "einfacher", desto besser. 
Das Teil soll wirklich nur Daten von SD lesen und die an einen DAC 
weiterreichen, nur halt zeitgenau auf einen Trigger hin.

von Elektriker (Gast)


Lesenswert?

Einen entsprechenden Bereich im RAM für die Sample-Datei reservieren 
sowie die Playlist ebenfalls bereits im RAM ablegen.
Bei Port IRQ einen DMA auziehen und die richtige Datei von SD-Karte in 
Ram kopieren - zeitgleich einen zweiten One Shot-Timer starten. Länge 
des Timers auf 100us einstellen
Bei Timer-IRQ dann einen zweiten DMA starten um aus dem RAM in den DAC 
zu schreiben.

Die SD Karte muss natürlich schnell genug sein dun das Filesystem muss 
innerhalb der 100us die richtige Datei ausspucken - aber durch die 
Trennung der beiden Datenströme werden die beiden Zugriggs-Funktionen 
etwas entkoppelt

von Frank K. (fchk)


Lesenswert?

SD-Karten sind nicht deterministisch. Die machen zwischendurch einfach 
mal bis zu einigen 100ms Pause, wenn der Controller irgendwas anderes zu 
tun hat. Du hast auf das interne Zeitverhalten Null Einfluss. Und das 
ist von Karte zu Karte auch unterschiedlich. Deine 100us Reaktionszeit 
kannst Du so nicht garantieren.

SD-Karten sind daher das falsche Medium.

Es gibt mehrere Möglichkeiten:

1. alle Samples vorher ins RAM laden, oder wenn das reicht, nur das 
nächste. Du brauchst dann natürlich genug RAM.

Es gibt SPI PSRAM, z.B.:
https://www.apmemory.com/wp-content/uploads/APS1604M-3SQR-SN.pdf

2. anderes Flash-Speichermedlum, und zwar eines OHNE internen 
Controller. NOR-Flash ist einfach, aber die verfügbaren Kapazitäten sind 
begrenzt (so bis 16 oder 32MB). NAND-Flash ist komplizierter, weil es 
defekte Blöcke haben kann. Dafür hast Du viel mehr Kapazität. Dadurch, 
dass Du das Flash direkt steuerst, ist das Zeitverhalten absolut 
deterministisch, d.h. bei jedem Takt kommt zuverlässig ein Byte/Wort 
heraus, auf die ns genau.

fchk

: Bearbeitet durch User
von Josef (Gast)


Lesenswert?

Danke, die Idee mit DMA hatte ich auch. Ich frage mich nur, ob ich mit 
einem Raspberry nicht besser aufgehoben bin. Ich könnte doch die 
SD-Schnipsel in dessen umfangreichen RAM laden und das dann per Software 
abspielen. Habe ich da eine chance, oder macht mir da das Betriebssystem 
bei 100 us einen Strich durch die Rechnung? Die 100 us sind der erlaubte 
Jitter..., einige ms zusätzlicher, deterministischer delay wären auch 
ok.

von Frank K. (fchk)


Lesenswert?

Josef schrieb:
> Danke, die Idee mit DMA hatte ich auch. Ich frage mich nur, ob ich mit
> einem Raspberry nicht besser aufgehoben bin.

Ich weiß nicht ob der Pi die geforderten 500 kHz Samplerate auf dem I2S 
kann. Ich denke, mehr wie die üblichen 48kHz werden nicht drin sein. Die 
Doku schweigt sich dazu leider aus.

fchk

von -gb- (Gast)


Lesenswert?

Ist das denn ein I2S DAC? Da gibt es ja doch welche mit schnelleren 
Schnittstellen ...

von Josef (Gast)


Lesenswert?

Gibt welche mit 384 kHz, das wäre gerade noch akzeptabel...

von Falk B. (falk)


Lesenswert?

Josef schrieb:
> dass das Abspielen
> getriggert sein soll. Also auf einen Pin Change hin, soll mit 100 us
> Zeitgenauigkeit die Wiedergabe der nächsten Datei starten.
> Wie würdet an so eine Aufgabe rangehen? Je "einfacher", desto besser.
> Das Teil soll wirklich nur Daten von SD lesen und die an einen DAC
> weiterreichen, nur halt zeitgenau auf einen Trigger hin.

Sowas hab ich vor Jahren mal gebaut, wenn gleich nur für 44.1kHz. Die 
Dateien lagen in einem parallelen Flash mit 1Gbit. Da konnte man sehr 
einfach taktgenau (44.1kHz) starten und stoppen, ohne Handstände. Lief 
über ein kleines FPGA. Vorher wurden die Dateien per AVR von SD-Card in 
den Flash geschrieben.

von PittyJ (Gast)


Lesenswert?

Ich habe mal in die Doku vom Arm Prozessor STM32H743 geschaut. Der hat 
einen recht frei programmierbaren I2S Kanal. Allerdings ist die maximale 
Frequenz dort auch nur 192 KHz. Mehr wird von den 'normalen' 
Audiospielern wohl nie gefordert.
Ich denke, dass Standardwege über I2S für 500 KHz nicht mehr gehen, weil 
es für alle Chips ausserhalb der Specs liegt.

Und das Raspi-Betriebssystem wird wir auf jeden Fall Knüppel in den Weg 
legen. Die Genauigkeit mit einem Linux auf dem kleinen Prozessor, das 
geht kaum.

Da ist dann wohl eigene Hardware und Software fällig.

von Olaf (Gast)


Lesenswert?

> Ich habe aktuell ein Projekt, bei dem es darum geht, vorgefertigte
> "Audiofiles" mit Samplingraten bis 500 kHz bei 24-32 bit von einer

Von welchem Planeten kommst du eigentlich? Weil es klingt irgendwie
nicht so als wenn Menschen das hoeren koennten.

Und sollte dir irgendeine Messtechnikanwendung im Sinn kommen,
dir ist schon klar das Audio-DACs eben auch auf Audio optimiert
sind und fuer Messtechniksachen oftmal unbrauchbar?

Olaf

von Peter D. (peda)


Lesenswert?

Josef schrieb:
> 500 kHz bei 24-32 bit

Soso, welchen 32Bit-DAC mit 2µs Settling-Time hast Du Dir denn dafür 
ausgesucht?

von Falk B. (falk)


Lesenswert?

Peter D. schrieb:
> Josef schrieb:
>> 500 kHz bei 24-32 bit
>
> Soso, welchen 32Bit-DAC mit 2µs Settling-Time hast Du Dir denn dafür
> ausgesucht?

Er schrieb "Audiofiles", weil ihm der Begriff programmierbarer 
Funktionsgenerator nicht geläufig ist.

von Josef (Gast)


Lesenswert?

Naja, es reicht wenn Mäuse und Fledermäuse die Töne hören können. Ist 
für eine Anwendung in der Verhaltensforschung im Tierreich, und da die 
natürlichen Rufe der Tiere teilweise bis 120 kHz gehen, reichen 192 kHz 
DAC halt nicht aus.

von avr (Gast)


Lesenswert?

Frank K. schrieb:
> SD-Karten sind nicht deterministisch. Die machen zwischendurch einfach
> mal bis zu einigen 100ms Pause, wenn der Controller irgendwas anderes zu
> tun hat.

Bei rein lesendem Zugriff gibt es sicherlich keine 100ms Pause. Ob die 
100us eingehalten wegen können müsste man prüfen, aber mit einem 
entsprechend schnellen Controller, kann ich mir das schon vorstellen.

von Gunnar F. (gufi36)


Lesenswert?

Josef schrieb:
> reichen 192 kHz DAC halt nicht aus.

ja ok, aber hören die Viecher 24-32 Bit? Weißt du was das für ein 
Störabstand ist (wäre...)? Sind das audiophile Fledermäuse?

von olaf (Gast)


Lesenswert?

> ja ok, aber hören die Viecher 24-32 Bit?

Yep, wuerde auch empfehlen mal testweise das aktuelle Radioprogramm
auf 8Bit runterzurechnen. So schlecht ist das garnicht mal.

Andererseits wenn eine Fledermaus goldene Ohren hat dann sind
die natuerlich auch sehr gross. :-D

Olaf

von Josef (Gast)


Lesenswert?

Die hören nicht 32 bit, aber es wäre sehr praktisch, wenn die Lautstärke 
der Töne über einen weiten Bereich direkt in der Datei codiert werden 
könnte, ohne zusätzlich am Gain rumdrehen zu müssen. Aktuell nehmen die 
Leute 16 bit, aber das ist nicht optimal. 24 bit müssten schon drin 
sein.

von H. H. (Gast)


Lesenswert?

Gunnar F. schrieb:
> Sind das audiophile Fledermäuse?

Das große Goldohr!

von Nosnibor (Gast)


Lesenswert?

Wenn die Reihenfolge, in der die Dateien abgespielt werden, feststeht, 
kann man die jeweils nächste Datei rechtzeitig vorher ins RAM laden, 
dann sind Timing-Unregelmäßigkeiten der SD-Karte schonmal egal. Dazu ist 
natürlich genug RAM nötig (4MB), aber Controller, an die man SDRAM 
anflanschen kann, gibt es ja genug.
Zum Abspielen ist dann nicht einmal DMA nötig, weil die CPU in der Zeit 
ja sowieso nichts anderes zu tun hat.

von Gunnar F. (gufi36)


Lesenswert?

Josef schrieb:
> 24 bit müssten schon drin sein.

Dann will ich sehen, wie du 140dB Dynamikumfang zum Schallwandler 
bringst. Nochmal: Ist dir klar was das bedeutet?

von Josef (Gast)


Lesenswert?

Ist mir klar. Es soll halt einfach etwas besser als 16 bit sein. Wenn da 
effektiv 19-20 bit rauskommen ist das auch ok. Es muss nicht perfekt 
sein.

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
Noch kein Account? Hier anmelden.