Forum: Mikrocontroller und Digitale Elektronik Benötigt aber nicht vorhanden: 8xSPI, was tun?


von SPI (Gast)


Lesenswert?

Huhu,
angenommen ich hab 8 Sensoren welche über eine SPI Schnittstelle 
verfügen und ich möchte einen STM32 Mx Cortex verwenden.

Auf der Webseite von ST finde ich nur STM32 mit maximal 6xSPI.

Besagter, geheimer Sensor, verfügt nicht über eine "Chip Select"-Leitung 
sondern nur SCLK und MISO.
Ebenfalls unterstützt dieser Sensor kein "Daisy Chaining".

CLK beträgt ca. 10MHz.

Was tun?

von Purzel H. (hacky)


Lesenswert?

Der Clock kann 10MHz betragen, oder muss ?

Man kann bei langsameren Peripherien auch pins im Bitbang Mode 
betreiben. Einfach das Pin Timing, welche in der Geschwindigkeit nach 
unten nicht begrenzt ist nachbilden. Ausser eben man benoetige die 
Geschwindigkeit fuer die Daten des Peripherals.
Alternativ : Einen Mux an die drei Pins MISO, MOSI und Clock. Dabei aber 
das Ruhepotential des Clocks pro Peripheral beachten.

von Peter D. (peda)


Lesenswert?

SPI schrieb:
> Besagter, geheimer Sensor

Sensor klingt nicht nach riesen Datenraten. Da kann man einfach 
beliebige IO-Pins nehmen und mit den Bits wackeln.

SPI schrieb:
> CLK beträgt ca. 10MHz.

Typisch ist das nur der Maximalwert, d.h. es gibt keine untere Grenze. 
Interrupts dürfen also beliebig dazwischen funken.

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich glaub ja die Geschichte von dem seltsamen Sensor nicht - ist wohl 
eher was ausgedachtes.
8:1-Multiplexer, vor dem Auslesen schaltest du den entsprechenden Kanal 
auf MISO.
Jetzt kommst du wahrscheinlich daher und behauptest das wäre zu langsam 
:-)

Du willst bestimmt nur sagen, dass es keine STM32 mit 8 SPI gibt.

edit: 74HC151 z.B.

: Bearbeitet durch User
von SPI (Gast)


Lesenswert?

Danke für die Rückmeldungen :) Ja es ist in der Tat ein hypothetisches 
Problem. Mich interessierte ob Ihr, also die Profis, das ähnlich lösen 
würdet wie ich als Laie oder ob Ihr mit speziellen Tricks/ICs daher 
kommt.

Den Multiplexer auf MISO empfinde ich als schöne Lösung.

Die 10MHz waren ein relativ hoher SCLK der mir schon begegnet ist und es 
wäre im Idealfall dann natürlich auch wünschenswert diesen voll 
auszuschöpfen aber ggf. muss man dann runter gehen :)

Ich hab mal noch bei Microchip geschaut die haben sogar bis 12xSPI im 
Angebot :)

von Johannes S. (Gast)


Lesenswert?

bei NXP gibt es sowas auch, nennt sich Flexcomm und eine Schnittstelle 
kann USART, SPI oder I2C sein. Die LPC546xx (Cortex-M4) haben z.B. 10 
Stück davon.

von A. S. (Gast)


Lesenswert?

SPI schrieb:
> Die 10MHz waren ein relativ hoher SCLK der mir schon begegnet ist und es
> wäre im Idealfall dann natürlich auch wünschenswert diesen voll
> auszuschöpfen

Wie willst Du denn 10MB ne Sekunde sinnvoll verarbeiten?

Bei soviel Sensoren und ohne csl ist paralleles bitbanging das 
einfachste. Din ist einfach einen Port einlesen und die 8 Bit auf 8 Byte 
verteilen.

Ausgerollt sind das ein paar Takte pro empfangenem sensorbit. Und das 
Timing ist eh völlig unkritisch.

von Peter D. (peda)


Lesenswert?

SPI schrieb:
> Die 10MHz waren ein relativ hoher SCLK der mir schon begegnet ist und es
> wäre im Idealfall dann natürlich auch wünschenswert diesen voll
> auszuschöpfen

Meistens schaffen "geheime Sensoren" eh nicht viel, vielleicht 10 
Messungen/s. Da wären 10MHz völlig oversized.

von Oliver S. (oliverso)


Lesenswert?

SPI schrieb:
> Was tun?

Eigene CPU mit ARM-Core und ausreichend vielen SPIs backen. Das ist für 
die geheime Anwendung mit den geheimen Sensoren die passenden Lösung.

Manche Probleme sollte man erst dann lösen, wenn die sich wirklich 
stellen.

Oliver

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


Lesenswert?

SPI schrieb:
> Besagter, geheimer Sensor, verfügt nicht über eine "Chip Select"-Leitung
> sondern nur SCLK und MISO.
Das ist üblicherweise eine schlechte Idee.

Wie erkennt besagter geheimer Sensor dann den Telegramm-Anfang? Wie 
machst du da den Frame-Sync? Wwie erkennt dein Sensor, dass er mit dem 
nächsten Takt das erste Bit des Datentelegramms schicken soll?

Oder ist dann nach dem ersten ESD-Spike auf der Taktleitung fürderhin 
den Rest vom Tag alles um 1 Bit versetzt?

von Wolfgang (Gast)


Lesenswert?

SPI schrieb:
> angenommen ich hab 8 Sensoren welche über eine SPI Schnittstelle
> verfügen und ich möchte einen STM32 Mx Cortex verwenden.
>
> Auf der Webseite von ST finde ich nur STM32 mit maximal 6xSPI.

Du weißt, dass SPI ein Bus ist, auf dem mehrere Sensoren sitzen können?
Es ist normalerwiese nicht erforderlich, zur Kommunikation mit 8 
Sensoren über SPI auch 8 SPI Schnittstellen vorzuhalten.

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


Lesenswert?

Wolfgang schrieb:
> Es ist normalerwiese nicht erforderlich, zur Kommunikation mit 8
> Sensoren über SPI auch 8 SPI Schnittstellen vorzuhalten.
Allerdings hat ein richtiger SPI-Teilnehmer eben auch die dafür nötigen 
SlaveSelect-Leitungen, um einen der Slaves auszuwählen und das Telegramm 
zu synchronisieren.

: Bearbeitet durch Moderator
von H. (Gast)


Lesenswert?

Lothar M. schrieb:
> Wie erkennt besagter geheimer Sensor dann den Telegramm-Anfang? Wie
> machst du da den Frame-Sync? Wwie erkennt dein Sensor, dass er mit dem
> nächsten Takt das erste Bit des Datentelegramms schicken soll?

Dieses Spielchen ist doch schon vom allseits beliebten HX711 bekannt, es 
gibt auch noch weitere Sensoren, die auf CS verzichten. Finde ich 
persönlich auch nicht toll, gibt es aber trotzdem.

Holziges Protokoll beim HX711, die Anzahl der CLKs steuert den Chip.

von Wühlhase (Gast)


Lesenswert?

Paralleles Bitbanging wäre in diesem Fall tatsächlich am Einfachsten.

Wenn nicht genug Pins zur Verfügung stehen, könnte man aber den CS immer 
noch durch ein UND-Gatter hinzufügen (ist das die Lösung mit dem 
erwähnten 47xx?).

Auch wenn der Sensor so oder so eine miese Wahl ist, wie Lothar schon 
erläutert hat. Hat das Ding wenigstens einen Time-Out, sodaß er nach 
kurzer Wartezeit wieder "im Takt" liegt?

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


Lesenswert?

H. schrieb:
> Dieses Spielchen ist doch schon vom allseits beliebten HX711 bekannt
Der behauptet von sich aber auch nicht, SPI-konform zu sein. Und er 
teilt ja wenigstens seinen eigenen Frame-Sync (= nächster Takt liefert 
das erste Bit) über eine fallende Flanke am Dout mit.

Wühlhase schrieb:
> Hat das Ding wenigstens einen Time-Out, sodaß er nach
> kurzer Wartezeit wieder "im Takt" liegt?
Oder kann man ihn mit einem MagicPattern/Startmuster synchronisieren?

von Axel S. (a-za-z0-9)


Lesenswert?

Lothar M. schrieb:
> Wühlhase schrieb:
>> Hat das Ding wenigstens einen Time-Out, sodaß er nach
>> kurzer Wartezeit wieder "im Takt" liegt?
> Oder kann man ihn mit einem MagicPattern/Startmuster synchronisieren?

Da es ja ein rein hypothetisches Szenario ist, gelten die 10MHz SPI Takt 
sicher als Minimum und der Timeout ist 1µs. Bestimmt!

von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> Allerdings hat ein richtiger SPI-Teilnehmer eben auch die dafür nötigen
> SlaveSelect-Leitungen, um einen der Slaves auszuwählen und das Telegramm
> zu synchronisieren.

Dafür braucht man aber nicht für jeden Teilnehmer eine eigene 
SPI-Schnittstelle, sondern es reicht ein eigener Chip-Select Pin 
(beliebiger GPIO)

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Oliver S. schrieb:
> Eigene CPU mit ARM-Core und ausreichend vielen SPIs backen.

Für viele Fälle interessant ist in solchen Fällen auch ein FPGA mit 
Softcore, z.B. ein Spartan/Artix/Virtex mit Microblaze. Oder auch gleich 
ein Zynq. Wenn man dann auch noch nicht einfach separate normale 
SPI-Blöcke instantiiert, sondern sich den passendem 100*SPI-Block 
zusammenklöppelt, kann man dank identischer Geschwindigkeiten auch noch 
alle in einer gemeinsamen Treiberinstanz bearbeiten statt 100 separate 
Interrupts zu verarbeiten.

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


Lesenswert?

Wolfgang schrieb:
> Dafür braucht man aber nicht für jeden Teilnehmer eine eigene
> SPI-Schnittstelle, sondern es reicht ein eigener Chip-Select Pin
Logisch, dafür ist der didizierte SS# Pin pro Slvae ja da.

Und letztlich muss man dann nur noch ausrechnen, ob die Übertragungsrate 
(samt SS# Umschaltung) hoch genug ist, um nacheinander alle Slaves in 
der nötigen Zeit einzulesen.

BTW: wenn ich da "8 Sensoren" höre, dann würde ich mir auch mal Gedanken 
um die räumliche Ausdehnung des gesamten Konstrukts und der Auswahl 
einer geeigneten Baudrate samt Leitungsterminierung machen...

von Christian G (Gast)


Lesenswert?

Also rein auf das SPI nur mit CLK und MISO und das x 8 bezogen, wenn man 
jetzt einen anderen controller z.B. den rp2040 nimmt, sollte es doch mit 
einem eigenen PIO Programm theoretisch möglich sein Anzahl gpios / 2 
solcher Schnittstellen zu betreiben, solange man halt das Verhalten der 
slaves berücksichtigt timeout etc. Ohne Gewähr, hab erst vor ein paar 
Tagen angefangen mich mit den pi picos zu beschäftigen und soll auch 
keine Werbung für die sein.

von c-hater (Gast)


Lesenswert?

SPI schrieb:

> Besagter, geheimer Sensor, verfügt nicht über eine "Chip Select"-Leitung
> sondern nur SCLK und MISO.
> Ebenfalls unterstützt dieser Sensor kein "Daisy Chaining".
>
> CLK beträgt ca. 10MHz.
>
> Was tun?

a) Den verfickten geheimen Sensor durch etwas tatsächlich Brauchbares 
ersetzen.
...
y) Den verfickten geheimen Sensor durch etwas tatsächlich Brauchbares 
ersetzen.
z) Den STM32 durch etwas etwas besser für die Zusammenarbeit mit so 
einer Ansammlung schwachsinnigster Sensoren geeignetes ersetzen. Z.B. 
ein FPGA. Als Multiplexer. Der STM32 redet dann bloß noch mit dem FPGA, 
der sich als standargerechte Versammlung von SPI-Devices präsentiert, 
mit 1xMOSI, 1xMISO und Nx/CS.

Also ich würde alles lieber machen als z)...

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


Lesenswert?

c-hater schrieb:
> Also ich würde alles lieber machen als z)...
z) wäre meine erste Wahl... ;-)
Ein kleiner MachXO2/3 macht locker die obigen 8 VSSI-Busse ("Very 
Specific Serial Interface") samt Timeout und/oder MagicPattern.
Und zum µC hin kann das FPGA ja ganz einfach über 1 einzigen 
artgerechten SPI mit allen üblichen Steuerleitungen angebunden werden.
Morgen Abend ist das Design fertig.

von Johannes S. (Gast)


Lesenswert?

oder eben die LPC5xxxx angucken, andere Mütter haben auch schöne 
Töchter. Ohne jetzt komplett den Planeten zu wechseln.

von jo (Gast)


Lesenswert?

SPI schrieb:
> Danke für die Rückmeldungen :) Ja es ist in der Tat ein hypothetisches
> Problem. Mich interessierte ob Ihr, also die Profis, das ähnlich lösen
> würdet wie ich als Laie oder ob Ihr mit speziellen Tricks/ICs daher
> kommt.

So so, "ein hypothetisches Problem" also.
Also ob ich Langeweile hätte, um mich als Pausenclown vorführen zu 
lassen ...

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.