S/PDIF mit STM32F446RE empfangen geht nicht

Gast #7097170
Lesenswert?

Hi,

ich scheitere gerade daran, mit einem Nucleo STM23F446-Board einen 
S/PDIF Datenstrom zu empfangen.

Meine Vorgehensweise:

- In CubeMX habe ich mir den STM auf 180 MHz Systemclock konfiguriert

- PB7 ist als GPIO_INPUT konfiguriert

- wenn ich mit dem so erzeugten Code im main-Loop eine Funktion 
HAL_GPIO_ReadPin(GPIOB,0x80) aufrufe, so liefert die abwechselnd 
GPIO_PIN_SET und GPIO_PIN_CLEARED zurück, das S/PDIF-Signal liegt also 
grundsätzlich an und die HIGH/LOW werden erkannt

- im nächsten Schritt ändere ich PB7 in CubeMX auf SPDIFRX_IN und 
verwende folgende Initialisierung (generiert von CubeMX):
1
  hspdif.Instance = SPDIFRX;
2
  hspdif.Init.InputSelection = SPDIFRX_INPUT_IN0;
3
  hspdif.Init.Retries = SPDIFRX_MAXRETRIES_63;
4
  hspdif.Init.WaitForActivity = SPDIFRX_WAITFORACTIVITY_OFF;
5
  hspdif.Init.ChannelSelection = SPDIFRX_CHANNEL_A;
6
  hspdif.Init.DataFormat = SPDIFRX_DATAFORMAT_MSB;
7
  hspdif.Init.StereoMode = SPDIFRX_STEREOMODE_ENABLE;
8
  hspdif.Init.PreambleTypeMask = SPDIFRX_PREAMBLETYPEMASK_OFF;
9
  hspdif.Init.ChannelStatusMask = SPDIFRX_CHANNELSTATUS_OFF;
10
  hspdif.Init.ValidityBitMask = SPDIFRX_VALIDITYMASK_OFF;
11
  hspdif.Init.ParityErrorMask = SPDIFRX_PARITYERRORMASK_OFF;

- wenn ich jetzt in main-Loop 
HAL_SPDIFRX_ReceiveDataFlow(&hspdif,spdifData,8,10000) aufrufe, liefert 
mir diese Funktion immer nur einen Timeout, es werden also keine 
S/PDIF-Daten erkannt

- der Datenstrom ist korrekt, ein Kontrollgerät empfängt diesen 
problemlos

- die Verwendung des Callbacks HAL_SPDIFRX_RxCpltCallback() macht keinen 
Unterschied, auch dieser wird niemals aufgerufen

- das S/PDIF-Signal habe ich bereits invertiert um einen Logikfehler in 
meiner Schaltung auszuschließen, das hilft auch nicht

- wenn ich mit dem Oszi an Pin 59 des STM nachsehe, dann liegt dort das 
S/PDIF-Signal an, das passt also ebenfalls

Wo kann das PRoblem hier noch liegen? Hat jemand eine Idee?

Danke!
Gast #7097734
Lesenswert?

Das mit dem GPIO war nur ein Test, ob die Hardware überhaupt etwas an 
dem Eingang erkennt.

Tatsächlich soll der STM32 das Signal erkennen -> deswegen wird im 
zweiten Schritt ja auch die native SPDIF-Hardware verwendet, welche die 
gesamte Synchronisation und den Empfang der Daten übernehmen sollte.
Gast #7100388
Lesenswert?

PittyJ schrieb:
> Ich mache immer den Fehler, zwar die Callbacks zu installieren. aber den
> Interrupt zu vergessen.
> Schau doch noch einmal nach, ob alle notwendigen Interrupts auch
> aktiviert sind

Ja, den hatte ich auch vergessen, aber das ist leider auch nicht die 
Ursache, da die Polling-Funktion ja ebenfalls nichts empfängt
Gast #7102283
Lesenswert?

OK, ich suche mir eine andere MCU samt anderem Hersteller. Der Support 
von ST ist unter aller Sau, mehr als ein müdes Schulterzucken ist dort 
nicht zu bekommen. Das lässt für deren Hardware nichts gutes vermuten.
Gast #7102645
Lesenswert?

Jobst M. schrieb:
> Wenn Du denen genau so umfangreiche Informationen hast zukommen lassen
> wie uns, finde ich das eigentlich gar nicht verwunderlich.

Welche Informationen fehlen dir denn noch? Das war eine vollständige 
Beschreibung des gesamten Codes, der Rest wurde von CubeMX generiert und 
sollte ST bekannt sein.

Aber du kannst mir gerne Verraten, mit welchen magischen 
Zusatzinformationen du das Problem auf Anhieb und umassend lösen kannst!
(Firma: matzetronics) #7102712
Lesenswert?

Es gibt sogar mehrere PDF dazu. Erstens die o.a. AN5073:
https://www.st.com/resource/en/application_note/an5073-receiving-spdif-audio-stream-with-the-stm32f4f7h7-series-stmicroelectronics.pdf
und dann noch was etwas anderes, das hauptsächlich für den F7 gedacht 
ist:
https://www.st.com/resource/en/product_training/STM32F7_Peripheral_SPDIF_RX.pdf

Mir fällt in deinem Codefetzen auf, das nirgends Taktquellen 
konfiguriert werden. Mit S/PDIF Empfänger habe ich hier noch nichts 
gemacht, aber für I2S sind die Clocks absolut notwendig - und sie müssen 
auch korrekt sein.
Gast #7102930
Lesenswert?

Matthias S. schrieb:
> Mir fällt in deinem Codefetzen auf, das nirgends Taktquellen
> konfiguriert werden. Mit S/PDIF Empfänger habe ich hier noch nichts
> gemacht, aber für I2S sind die Clocks absolut notwendig - und sie müssen
> auch korrekt sein.

CLock ist vorhanden, ich habe den S/PDIF ebenfalls auf 180 Mhz 
konfiguriert - Überblick im Anhang (auch die Frage, ob das korrekt ist, 
habe ich im ST-Forum mehrfach gestellt und sie wurde genau so ofr von 
deren "Support" ignoriert).
Angehängte Dateien:
Gast #7102933
Lesenswert?

Jobst M. schrieb:
> Du musst nur lesen, dann könnte Dir auffallen, welche Frage Du (von mir)
> nicht beachtet hast.

Ich habe diese Frage von dir beantwortet - wenn du mein ursprüngliches 
Posting bis zum Ende gelesen hättest, hättest du die übrigens nicht mal 
stellen müssen.

Ach, halt, du willst hier nur rumpöbeln - ja, dann mach' nur weiter, 
wenn es dir hilft!
Gast #7102966
Lesenswert?

Die AN5073 sagt ziemlich deutlich dass die Anbindung des S/PDIF Signal
an den STM32 nicht trivial ist und die Erkennung im STM32 z.B. 
empfindlich
auf Jitter reagiert.

Auch wenn man also am STM32 Pin sieht dass da ein sich änderndes Signal
anliegt heisst das noch lange nicht dass der STM32 damit etwas anfangen
kann (im Bezug auf S/PDIF).

Von daher ist die Frage wie das S/PDIF Signal an den STM32 angebunden
ist durchaus berechtigt.

Es gibt übrigens auch Discovery Boards mit fertiger S/PDIF Hardware,
das wäre eventuell eine Alternative um Probleme bei der Anbindung
auszuschließen.
Gast #7102997
Lesenswert?

Dieter schrieb:
> Auch wenn man also am STM32 Pin sieht dass da ein sich änderndes Signal
> anliegt heisst das noch lange nicht dass der STM32 damit etwas anfangen
> kann (im Bezug auf S/PDIF).
>
> Von daher ist die Frage wie das S/PDIF Signal an den STM32 angebunden
> ist durchaus berechtigt.

Die Quelle liefert ein 3,3V S/PDIF-Signal, oder mit anderen Worten: ich 
greife das Quellsignal direkt hinter dem Erzeuger ab und leite es dann 
ohne Umwege auf den STM. Es ist absolut keine Konvertierung in optische 
Signale oder sonstwas vorhanden.

Wenn der STM tatsächlich mit einem "rohen" S/PDIF-Signal nicht klar 
kommt, dann ist die Hardware Mist und ich weiß ehrlich gesagt nicht, wie 
der mit einem realen S/PDIF-Signal klarkommen soll (welches IMMER einen 
Jitter haben wird, speziell wenn da moch irgendwelche 
Signalkonvertierungen vorkommen).
Gast #7103065
Lesenswert?

Wenn ich es richtig sehe verwendest Du den HSI als Quelle für den Clock.
Hast Du es schon mal mit dem externen Quarz, also HSE versucht?

Hintergrund ist dass man Kommentare findet die die schlechte Qualität
des HSI Clock bei bestimmten Anwendungen erwähnen. Ob das in diesem
Fall etwas ändert weiss ich nicht, aber einen Versuch ist es eventuell
wert (sollte ja recht schnell machbar sein).
(Firma: Schweigstill IT) Persönliche Seite #7104863
Lesenswert?

ZanSouth schrieb:
> Welche Informationen fehlen dir denn noch? Das war eine vollständige
> Beschreibung des gesamten Codes, der Rest wurde von CubeMX generiert und
> sollte ST bekannt sein.

Und natürlich kommst Du nicht auf die Idee, Deine IOC-Datei zu 
veröffentlichen oder auch nur ansatzweise zu erwähnen, welche Version 
von STM32CubeMX Du verwendest.

Aber das ist jetzt eh egal. Vielleicht hilft Dir Mutti ja dabei, nachdem 
sie Dir die Schuhe zugebunden hat.
Gast #7154758
Lesenswert?

Update für alle, die nicht nur dumm rumpampen wollen sondern an einer 
ernsthaften Lösung interessiert sind/ein ähnliches Problem haben:

Ich habe mittlerweile auf den MIMX RT1010 von NXP gewechselt und dort 
funktioniert der S/PDIF-Empfang auf Anhieb.

Es ist also kein Problem mit meiner Verdrahtung/der Anbindung an das 
Evaluationboard, die sind hier beim STM und beim RT1010 nämlich 
identisch gelöst - direkte 3,3-V-Leitungen von der Quelle auf den 
Eingang der jeweiligen MCU.

Fazit: es dürfte ein Problem in der STM-Hardware oder in der 
CubeMX-Software des STM sein, an dem der STM-Support aber auch in 
keinster Weise interessiert ist.

Mit der MCUexpresso-IDE lässt sich eine funktionierende Lösung mehr oder 
weniger auf Anhieb erstellen. Und der Support von NXP ist auch 
wesentlich reaktionsfreudiger und kompetenter.
Gast #7155262
Lesenswert?

ZanSouth schrieb:
> - das S/PDIF-Signal habe ich bereits invertiert um einen Logikfehler in
> meiner Schaltung auszuschließen, das hilft auch nicht
Das kann nichts bringen, weil man das S/PDIF grundsätzlich invertieren 
darf und es dann trotzdem noch funktioniert.

ZanSouth schrieb:
> Fazit: es dürfte ein Problem in der STM-Hardware oder in der
> CubeMX-Software des STM sein
Abtastrateninkompatibilität?
Oder kommt S/PDIF mit 24 und er kann nur 20?
Gast #7157311
Lesenswert?

ZanSouth schrieb:
>
> Möglich. Das ist dann aber etwas, was der Support von ST wissen müsste.
> Aber von da kam ja gar nix brauchbares.

Es wäre aber auch relativ einfach gewesen von HSI auf HSE zu wechseln
und zu schauen ob das was ändert. Dazu braucht man nicht den Support
von ST.
#7359373
Lesenswert?

Ich weiss, das Thema ist schon eine Weile her.

Ich hatte inzwischen die Gelegenheit SPDIF-Rx in der selben Konfiguration auszuprobieren (STM32F446 Nucleo-64 Board, SPDIF Quelle mit 3.3 Volt Pegel direkt an Pin PB7). Das funktioniert hier problemlos, sowohl mit HSE als auch HSI als Taktquelle (getestet mit Samplerate 48 kHz und 44.1 kHz).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren