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?
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.
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.
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.
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 :)
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.
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.
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.
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
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?
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.
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.
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.
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?
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?
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!
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)
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.
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...
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.
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)...
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.
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 ...