Ist es möglich, mehrere verschiedene ICs auf derselben Datenleitung zu kaskadieren, um weniger CS-Pins zu verwenden , indem der digitale Ausgang eines jeden mit dem digitalen Eingang des nächsten verbunden wird? Ich bin mit diesem Ansatz auf ähnlichen/gleichen Geräten vertraut, aber ich bin mir nicht sicher, ob es einige zusätzliche Probleme gibt, auf die ich achten sollte.
BEARBEITEN: Bei digitaler Ausgabe pinne ich den Ausgangspin, den viele SPI-Geräte bereitstellen, z. B. MAX395- oder 74HC595-Schieberegister.
Nein, Sie können nicht mit beliebigen SPI-Geräten tun, was Sie denken (wenn Sie denken, was ich denke, dass Sie denken).
Die Geräte, auf die Sie hingewiesen haben, sind keine SPI-Geräte, sondern Schieberegister. Sie funktionieren nicht ganz so wie SPI, aber SPI kann verwendet werden, um sie anzutreiben.
Sie ähneln eigentlich eher JTAG als SPI.
In einem Schieberegister oder JTAG-Gerät wird der Dateneingang (TDI im JTAG-Jargon) in ein einfaches Schieberegister eingespeist, und der letzte Bitausgang des Schieberegisters fällt in den Datenausgang (TDO in JTAG). So funktioniert SPI nicht.
In SPI sind die SDI- und SDO-Pins vollständig getrennt, und die Beziehung zwischen den Daten in einem und den Daten in dem anderen hängt ausschließlich von den Launen des Chips ab. Es ist üblich, eine Befehls- oder Registerstelle in den SDI-Pin einzutakten, und beim nächsten Byte wird der Inhalt dieses Registers aus dem SDO-Pin ausgetaktet.
Also nein, der Eingang "fällt" nicht wie ein Schieberegister in den Ausgang.
Wenn Sie die Anzahl der verwendeten CS-Pins reduzieren möchten, können Sie beispielsweise einen 74HC154 4-zu-16-Decoder verwenden, um 15 Geräte an nur 4 CS-Pins anzuschließen (reservieren Sie 1 Pin für "kein Gerät ausgewählt").
Wenn alle Ihre Geräte Schieberegister sind oder wie Schieberegister arbeiten und keine echten (registerbasierten) SPI-Geräte, können Sie sie möglicherweise kaskadieren, wenn sie alle auf die gleiche Weise funktionieren. Dies ist natürlich nicht garantiert, es sei denn, es handelt sich bei allen um dasselbe Gerät.
Es gibt mehrere Geräte (insbesondere ADCs), die einen Datenausgangs-Pin haben, und "Daisy-Chaining" ist gängige Praxis. Wenn Sie also mit 3 Geräten sprechen möchten, müssen Sie die Daten durch das erste und zweite Gerät leiten, um zum dritten zu gelangen. Wenn dies kein Problem verursacht, wird es funktionieren: -
Hoffe, das Diagramm macht Sinn - beachten Sie, dass es eine gemeinsame CS-Leitung gibt, die alle drei Geräte speist. Für verschiedene Geräte müssen sie einen kompatiblen Datenausgang haben, und einige erfordern einen Pull-up für den Datenausgang, aber ich sehe nicht, warum dies nicht erreicht werden kann. Hier ist ein allgemeineres Bild: -
Auf diesem können Sie tatsächlich in den Master zurücklesen, was Sie "ausgegeben" haben - das Schöne daran ist, dass Sie überprüfen können, wie viele Bitübergänge erforderlich sind, um das auf den Slave-Chips verteilte Array von Schieberegistern zu füllen.
Wiki kann auch sehr hilfreich sein
Majenko
joaocandre