SPI und ein Flash-Speicher-IC, die Grundlagen

In SPI habe ich ein paar Fragen ...

Ich verstehe, wie Bits durchgetaktet werden, aber wie werden Bytes begrenzt?

Wird der Slave-Select-Pin nur benötigt, um den Datenausgang hochohmig zu schalten? Oder wird es auch zum Abgrenzen von Bytes/Wörtern benötigt?

Außerdem: Ich habe den Eindruck von dem, was ich gelesen habe ( PIC16f74-Datenblatt ), dass SPI 3-Draht sein kann, und es gibt Adressierungsmodi, über die ich so verwirrt bin, dass ich glaube, ich werde so tun, als hätte ich im Moment nichts gelesen!

Ich verbinde nur einen PIC16F mit 8-Bit-Flash-Speicher Atmel AT45DB011D , also nichts anderes auf den SPI-Leitungen. Es hat auch Multi-Byte-Befehle, also wie begrenzt es diese?

SPI und die Verwendung des Flash-Chips sind völlig neu für mich, eine schnelle Starthilfe wäre großartig!

Antworten (1)

Es gibt kein Konzept zur „Begrenzung“ von Bytes in SPI. Die einfache Tatsache, dass 8 Bits übertragen wurden, stellt ein Byte dar, und das neunte Bit wäre das erste Bit des nächsten Bytes.

Bei SPI beginnt der Empfang, wenn die Chipauswahlleitung abgesenkt (oder bei einigen Chips angehoben) wird. Die Daten werden dann bitweise in ein Schieberegister getaktet. Wenn jedes Bit ankommt, schiebt das Schieberegister alle Bits um eins nach unten.

Ein SPI-Chip hat typischerweise eine feste Schieberegistergröße und ist nicht an Bytegrößen gebunden. Einige haben Vielfache von 8 Bit, was schön ist, einige haben 10 Bit, einige 17 Bit usw.

Wenn Sie mehr als die erforderliche Anzahl von Bits eintakten, fallen die ersten Bits am Ende des Schieberegisters ab und gehen verloren. Wenn Sie also ein 10-Bit-Schieberegister haben, können Sie nur Vielfache von 8 Bits senden (was wie bei den PIC-Chips üblich), wenn Sie dann das erste Byte als 6 Bits von 0 gefolgt von 2 Datenbits senden, dann ein zweites Byte von 8 Bits Daten, die ersten 6 Bits werden verworfen, wenn sie am Ende abfallen. und das Schieberegister enthält nur die letzten 10 Bits.

Adressierungsmodi nehmen im Grunde ein paar zusätzliche Bits im SPI-Datenstrom und vergleichen sie mit einer Reihe von Pins, die entweder hoch oder niedrig auf dem Chip verbunden sind. Wenn sie übereinstimmen, sollten die Daten im Schieberegister bearbeitet werden. Wenn sie es nicht tun, sollte es verworfen werden.

Eine Reihe von SPI-Chips enthalten eine Pass-Through-Funktion, mit der Sie sie miteinander verketten können, und wenn Daten in den ersten Chip getaktet werden, wird das, was sich am Ende seines Schieberegisters befindet und normalerweise verworfen würde, an einen Ausgangspin gesendet. Dies kann dann zum Eingang des nächsten Chips gehen, wodurch die Daten von Chip zu Chip die Leitung hinunter geleitet werden. In diesem Fall ist es wichtig sicherzustellen, dass Ihre Daten in einen einzigen Stream ohne Bits gepackt werden, die Sie normalerweise verwerfen würden (kann schwierig sein, wenn die Chips keine Vielfachen von 8 Bit verwenden).

Die Anzahl der "Drähte" in SPI ist bestenfalls irreführend, da sie Ihnen nicht wirklich sagt, wie viele echte Drähte benötigt werden.

Typischerweise haben Sie:

  • Uhr
  • Chipauswahl
  • Daten in
  • Daten raus

Einige Chips haben möglicherweise keinen Datenausgang und akzeptieren nur Daten in sich hinein. Einige kombinieren den Ein- und Ausgang miteinander, also müssen Sie sie irgendwie trennen - entweder in Software, wenn Sie können, oder in Hardware.

Wenn Sie sowohl Daten ein- als auch Daten ausgeben, kann SPI im Vollduplexmodus arbeiten (aber nicht immer), wobei beim Eintakten von Daten in das Schieberegister auch Daten zum Lesen ausgetaktet werden. Dies wird nicht oft verwendet, da die meisten Systeme darauf angewiesen sind, dass ein Befehl gesendet wird, bevor eine Antwort erfolgen kann. Manchmal gibt es eine weitere Leitung, die signalisiert, wenn die Daten vollständig an das SPI-Gerät gesendet wurden und die Antwort gesendet werden sollte. Häufiger passiert es jedoch, wenn eine bestimmte Anzahl von Bits oder eine bestimmte Kombination von Bits empfangen wurde. Es ist üblich, den Beginn einer Übertragung mit 0 aufzufüllen und dann dem Gerät mit einem Startbit zu signalisieren, mit dem Empfang zu beginnen.

Es gibt viele Möglichkeiten, dies zu tun, und niemand scheint jemals dasselbe zu tun wie jemand anderes – oder manchmal sogar wie er selbst.

SPI definiert, wie die Daten übertragen werden, nicht wie die Daten gebildet werden.