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.
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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.
oder eben die LPC5xxxx angucken, andere Mütter haben auch schöne Töchter. Ohne jetzt komplett den Planeten zu wechseln.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.