Hallo zusammen, ich möchte ein Audio Codec(PCM3060) betreiben. Datenblatt schreibt vor, dass der Master (System) clock MCK=128*fs (oder 256, 384, 512, 768) betragen muss. Der Bit clock BCK hingegen muss BCK=64*fs betragen, wobei fs Sampling frequency ist, also in dem Fall sagen wir mal 96kHz. (Zudem gibt's noch ein Left-right CLK aber den stelle ich mal mit einer GPIO zur Verfügung) Daraus berechnet sich: fs=96kHz MCK=24,576MHz BCK=6,144MHz LRCK=192kHz die STM32(Master) dem Codec(Slave) zur Verfügung stellen muss. Der Kern ist getaktet auf 216MHz. D.h. ich kann obengenannte Peripherie Clocks nicht durch Divider erreichen. Da bin ich doch etwas verwirrt. Ich kann theoretisch MCK und BCK an die nächstmöglichen Werte einstellen aber dann kann ich nicht mein fs=96kHz (oder von mir aus 48 etc. ) nicht exakt einhalten. Wie gehe ich jetzt am Besten vor? Wie stelle ich solche blöden Frequenzen zur Verfügung? (Anbei paar Bilder) Vielen Dank und Grüße
:
Bearbeitet durch User
Du machst da ganix per GPIO. Das macht dir alles der SPI im I2S Modus oder der SAI. Guck dazu in das passende Referencemanual zu deinem spezifischen STM32. Für den MCK gibts meistens sogar noch ne extra Audio PLL und einen Takt Eingang für ein "Audiofrequenzquarz"
Ich kämpf gerade mit dem 2000Seiten HAL manual. Ich bin noch nicht fündig geworden wie ich diese "Audiofrequenzquarz" rummultiplizieren kann... Es gibt im Abschnitt SAI schon die Audio-Frequenzen-Clock. Wie stelle ich die Potenzen davon zur Verfügung? Eben das finde ich noch nicht. TrollJäger schrieb: > Dein Stichpunkt: Clock-tree Was meinst du denn mit Clock-tree genau? In CubeMX ist ja ein Clock-Tree, der aber nichts von Audio-Frequenzen wissen will.
Nimm nicht den gammligen HAL, sondern guck doch erstmal in die Beschreibungen im RefMan. Die Hardware wird dir da erst ausführlichst erklärt und dann werden die Register und Bits erklärt. Erst wenn du DAS verstanden hast verstehste auch den HAL. RefMan Kapitel für dich: -RCC -SAI
Mw E. schrieb: > Nimm nicht den gammligen HAL, sondern guck doch erstmal in die > Beschreibungen im RefMan. Der Meinung bin ich allerdings auch. Seit CubeMX scheint es nichts anderes mehr zu geben... CubeMX an, Augen zu, Hirn aus... traurig... Es gibt einen I2S_CKIN-Pin über den du I2S/SAI mit einem externen Takt versorgen kannst. Ein typischer Wert für so einen Quarz wäre z.B. 12,288 MHz. Alternativ gibt es aber für I2S/SAI separate PLLs. So als Tipp: 16/10*270/2 = 216 16/10*270/9 = 48 16/10*192/5/5 = 12,288
:
Bearbeitet durch User
Hast du in CubeMX auch eines der I2S-Interfaces aktiviert?
Vielen Dank für zahlreiche Inputs. Nun bin ich -zumindest in der Theorie und Verständnis- weitergekommen. Die Clocks, die ich generieren will, scheinen doch mit den internen Uhren und PLLs machbar zu sein. Meine Lösung hänge ich an. Mit dem letzten Teiler kann man sogar problemlos zwischen 49152kHz, 24576kHz und 12288 kHz etc. wählen. Ein sehr hilfreiches und ausführlich geschriebenes Dokument dafür ist: https://www.st.com/content/ccc/resource/training/technical/product_training/group0/35/bb/c4/23/6a/74/4a/2b/STM32F7_Peripheral_SAI/files/STM32F7_Peripheral_SAI.pdf/_jcr_content/translations/en.STM32F7_Peripheral_SAI.pdf Alternativ könnte ich auch einen externen Quarzoszillator mit Audiofrequenz nehmen. Scheint auch problemlos zu funktionieren mit STM32. Ich glaube, ich werde so einen als alternative Clock in meine Platte reindesignen. Viele Grüße und vielen Dank noch mal P.S: Zum Thema HAL und CubeMX: Klar, ich schätze auch richtig Low-Level auf der Registerebene zu arbeiten. Bei genügendem Wissen ist das der beste Weg. Allerdings bin ich noch kein Held in STM32 und so eine Konfigurationssoftware und eine Bibliothekensammlung mehr als hilfreich! Ich schalte natürlich nicht den Hirn aus, versuche sondern, durch die generierten Beispiele mich tiefer einzuarbeiten. Für einen schnelleren Einstieg finde ich diese sehr sehr hilfreich - viel besser als unendliche RefMans durchzuarbeiten ohne jegliche Beispiele. Das ist auch wichtig, um das Rad nicht zwei mal zu erfinden. Ich merke, ich habe selber wenig Verständnis für die High-Level tools bei den Sachen, die ich sehr gut beherrsche. Aber wir müssen ins Kenntnis nehmen, dass diese doch sehr nützlich sein können und aufhören diese pauschal zu diffamieren.
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.