Ich verwende Atmega328 als Master in der SPI-Kommunikation mit einem einzelnen Slave. Gibt es eine Möglichkeit, die Verwendung des SS-Pins (Slave Select) für SPI zu vermeiden? Dieser Pin kann auch für den PWM-Ausgang verwendet werden, den ich verwenden möchte.
Ob Sie den "Select"-Eingang eines SPI-Slaves dauerhaft aktiv binden können oder nicht, hängt sowohl vom spezifischen Slave als auch vom Gesamtsystemdesign ab. Einige Slaves verlassen sich auf Kanten an ihren ausgewählten Eingängen für Dinge wie Flusskontrolle und/oder Byte-Ausrichtung.
In manchen Systemen, in denen Master und Slave immer zusammen zurückgesetzt werden (z. B. durch Ein- und Ausschalten) und niemals Taktstörungen auftreten, können Sie damit davonkommen, aber es ist sicherer (zuverlässiger), eine aktive Slave-Auswahl einzuplanen in Ihrem Entwurf.
ATmega ist hier ein Meister, wie Sie selbst sagten.
Schauen wir uns an, was das Datenblatt über den Slave-Select-Pin sagt:
SS: Slave Select input. When the SPI is enabled as a Slave, this pin is configured as an input regardless of the set- ting of DDB2. As a Slave, the SPI is activated when this pin is driven low. When the SPI is enabled as a Master, the data direction of this pin is controlled by DDB2. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB2 bit.
Wie Sie sehen können, wird es nur verwendet, wenn ATmega ein Slave ist. Wenn es sich um einen Master handelt, verwenden Sie normale GPIO-Pins, um einen Slave auszuwählen. Es gibt sogar einen Absatz darüber im Datenblatt:
When configured as a Master, the SPI interface has no automatic control of the SS line. This must be handled by user software before communication can start.
Da Sie in Ihrem Fall nur einen Slave haben, können Sie den Slave-Select-Pin des Peripheriegeräts so festverdrahten, dass er immer ausgewählt ist, und sich nicht mehr darum kümmern müssen.
Im Allgemeinen sollte eine aktive Slave-Select-Leitung verwendet werden. Die Slave-Auswahlleitung sollte den Slave vor Beginn der Übertragung aktivieren und nach Beendigung der Kommunikation deaktivieren. Dazu kann jeder freie Pin des ATmega verwendet werden.
Der Begriff „SPI“ wird verwendet, um eine Vielzahl von Protokollen zu beschreiben, bei denen ein Master-Gerät mit einem oder mehreren Slave-Geräten kommuniziert. Ein übliches Schema besteht darin, dass ein Slave-Gerät eine "Auswahl"-Leitung hat, die zu Beginn jeder Transaktion aktiviert und am Ende freigegeben wird. Bei Verwendung eines solchen Ansatzes dient die Auswahlleitung dem doppelten Zweck, Bytegrenzen zu synchronisieren und auch anzuzeigen, wo "Befehle" beginnen und enden. Bei der Kommunikation mit einem solchen Slave muss einer der Ausgangspins des Masters mit dem Slave-Select-Kabel verbunden sein, aber für diesen Zweck kann jeder Pin verwendet werden.
Einige andere SPI-Slaves verwenden andere Ansätze zur Synchronisation. Es gibt keinen konzeptionellen Grund, warum Sklaven einen ausgewählten Draht verwenden sollten, aber viele von ihnen tun dies. Sofern Sie den Slave nicht entwerfen, wird die Notwendigkeit des ausgewählten Drahts vom Slave selbst bestimmt.
Nach meiner Erfahrung mit einem aktuellen Projekt ohne Slave-Select-Pin sollten Sie Wege finden, um die Synchronisierung / Desynchronisierung zwischen Master und Slave zu überprüfen. Wie zum Beispiel: CRC in Hardware, Prüfsumme in Software, Pakete mit fester Größe und Verzögerung zwischen Paketen hinzufügen, damit der Slave das letzte Paket verarbeiten kann, bevor Daten für das Master-Gerät verfügbar sind. Jedes Mal, wenn eine Desynchronisierung stattfindet, muss der Slave die SPI-Maschine zurücksetzen und wartet mindestens die Zeit zwischen den Paketen, um Daten zu akzeptieren. Nach diesen Überlegungen würde ich empfehlen, dass Sie SPI nicht ohne SLVE-Auswahl verwenden, da Sie am Ende zu viel Komplexität für etwas sehr Einfaches hinzufügen werden: das Zuweisen eines GPIO-Pins auf dem Master als Chip-Auswahl.
Wouter van Ooijen