Forum: Mikrocontroller und Digitale Elektronik Wie 2 SPI out Datenleitungen machen


von Uli (Gast)


Lesenswert?

Hallo,

ich habe da ein Problem.

ich will jeweils 2 Werte parallel über SPI senden.

Die Werte kommen über einen I²S rein werden gewandelt und die beiden 
Kanäle werden nun nicht hintereinander sondern parallel weiter gesendet.

So weit zur Theorie, als Prozessor würde mir ein STM32F0 / F1 am besten 
gefallen. Aber da fehlt mir immer eine Schnittstelle, oder ich überlese 
ständig was. Aber 2 SPI / I²S Leitungen sind halt nicht 3.
Eigentlich bräuchte ich noch eine SPI zum Steuern, also 4.
Bin aber offen für viele andere kleine (Pin)Prozessoren.
Der Prozessor ist immer der Slave,also der Takt kommt von aussen!

Ich hatte schon dran gedacht einen Port per DMA zu benutzen und meine 
Werte von BIT in Bytes um zu mappen. Aber da rechne ich den armen 
Prozessor platt. Müsse ja 2* 16Bit in 1*16 Byte verpacken. Sind zwar nur 
48KHz aber die Daten müssen noch bearbeitet werden.

Hat jemand eine Idee wie ich die Daten raus senden könnte?

VG, Uli

von Ralph (Gast)


Lesenswert?

Hallo Uli,

Aus dem was du da geschrieben hast wird mir nicht so ganz klar was du da 
vor hast.

Also ich versuch es mal.

Du hast einen Sensor ( oder ähnliches) der mit 48 Khz 32 Bit über die 
I2S schickt.
Das wird von einem STM32 gelesen, der diese Daten dann verrechnen und 
über 2 SPI Kanäle weitersenden soll. An den gleichen, oder 2 
unterschiedliche Empfänger ?

Für was wird die SPI zur Steuerung benötigt ?

Passt das so ?

Es wäre wahrscheinlich sinnvoller wenn du beschreibst was du da machen 
willst und nicht eine Teillösung vorgibst.

P.s bei der Datenrate ist der STM gnadenlos überdimensioniert.

Gruß,
Ralph

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Uli schrieb:
> Hat jemand eine Idee wie ich die Daten raus senden könnte?
Müssen die Werte unbedingt bitsynchron an die jeweiligen Empfänger 
gesendet werden? Wofür brauchst du das? Was soll damit erreicht werden?

von LTC1043 (Gast)


Lesenswert?

Schau mal nach STM32 mit "Quad-SPI interface" wie z.B. die STM32L4x1 
Serie.

Mit dem "Quad-SPI interface" kannst ud 4bit-Streams synchron mit einem 
SPI Clk rausgeben. Wird zum schreiben lesen schneller SPI Flashes 
vervwendet, kann aber sicher für deine Zwecke angepasst werden.

Cheers

von Uli (Gast)


Lesenswert?

Die Quad-SPI ist nichts anderes was ich mit dem DMA-Port kram machen 
kann.
Leider kann ich da nicht auf den 2/4 SPI Daten Leitungen 
unterschiedliche Bytes senden. Da wird nur das Byte auf die Leitungen 
verteilt.

Der STM32L443CC würde mir zwar gefallen wegen der 4 SPI Leitungen aber 
der hat keine I²S Leitung und somit fallen die ganzen STM32L4x raus.
Leider die wären echt gut dafür.

Die normalen F4 Typen zB. STM32F410CBU6 wäre da vielleicht eine 
Alternative.
muss ich mir noch ansehen. Ist nur schwerer zu löten.

Was ich machen will?
Nun wie schon beschrieben bekomme ich Audio Daten, Rechne damit etwas.
Dann senden ich die Kanäle Parallel an 2 DACs raus.

Warum Parallel? Weil ich es so will und es in dieser Anwendung am besten 
passt.

VG, Uli

von Ralph (Gast)


Lesenswert?

Uli schrieb:
> Dann senden ich die Kanäle Parallel an 2 DACs raus.

Dann brauchst du keine parallele Datenübertragung sondern eine parallele 
Datenübernahme am DAC.
Das ist nicht das gleiche.

Also 2 getrennte SPI mit "hand" kontrolliertem Chipselect.
Datenübernahme beim DAC geschieht dann beim Wechsel des Chipselect von 
AKTIV auf PASSIV.
Du musst dann nur die beiden Chipselect parallel bedienen.

Übrigens, ist der STM hier der Master auf der SPI. Ich hab noch keinen 
DAC gesehen der als SPI Master läuft.

Oder, was fast noch eleganter ist.
Häng beide DAC hintereinander an die SPI mit einem gemeinsamen 
Chipselect. Sende dann die Daten für beide nacheinander raus.
Beim ersten DAC werden die Daten für den 2. durch geschoben und mit CS 
inaktiv werden dann bei beiden synchron die Daten übernommen.


Und immer noch bei 48000 Samples pro Sekunde mit 32 bit langweilt sich 
der STM.

von Uli (Gast)


Lesenswert?

Hast Ja recht die SPI vom Ausgang (DAC Eingang) ist ein Master.
Der Takt dafür kommt aber indirekt vom I²S Eingang, zu dem muss ich 
schon Synchron bleiben.

Meine ersten Überlegungen waren das ich direkt aus den I²S Signalen mir 
die SPI Signale erzeuge und somit der Slave wäre.

Hintereinander hängen wäre schön, die liegen aber Parallel am Bus mit 
getrennten Datenleitungen.
Würden die blöden CS nicht parallel hängen wäre es einfacher was zu 
machen.

So wie es aussieht wird es ein STM32F410CBU6.
Macht einen netten eindruck, ist scheller als benötigt und die Leitungen 
muss ich mir halt zurecht biegen. Aber selbst mit dem DMA-PORT System 
sollte der keine wirklichen Probleme bekommen.

Ich baue mir das demnächst mal auf und schaue dann ob es geht.

VG, Uli

von Robin E. (why_me)


Lesenswert?

Psoc 4M?

Kannst die ganze Synchronisation mittels programmierbarer Logik in 
Hardware erledigen.

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.