Frank (Diskussion | Beiträge) K (→Siehe auch) |
(→Serial Peripheral Interface) |
||
Zeile 1: | Zeile 1: | ||
==Serial Peripheral Interface== | ==Serial Peripheral Interface== | ||
+ | |||
+ | Die MCT Paul & Scherer Mikrocomputertechnik GmbH hat das Copyright an diesem Artikel. | ||
+ | Es handelt sich um eine Studienarbeit, die von Martin Schwerdtfeger, im Rahmen seines Praktikums bei der MCT GmbH erstellt wurde. | ||
+ | |||
+ | Die Links auf das Original sind: | ||
+ | |||
+ | http://mct.de/faq/spi.html Deutsche Version | ||
+ | |||
+ | http://mct.net/faq/spi.html Englische Version | ||
+ | |||
+ | |||
+ | |||
Das ''Serial Peripheral Interface'' wird in erster Linie für eine synchrone serielle Kommunikation von Hostprozessor und Peripheriebausteinen benutzt. Eine Verbindung zweier Prozessoren über SPI ist aber genauso denkbar und wird am Ende des Kapitels beschrieben. | Das ''Serial Peripheral Interface'' wird in erster Linie für eine synchrone serielle Kommunikation von Hostprozessor und Peripheriebausteinen benutzt. Eine Verbindung zweier Prozessoren über SPI ist aber genauso denkbar und wird am Ende des Kapitels beschrieben. | ||
Version vom 16. Februar 2007, 10:45 Uhr
Inhaltsverzeichnis
Serial Peripheral Interface
Die MCT Paul & Scherer Mikrocomputertechnik GmbH hat das Copyright an diesem Artikel. Es handelt sich um eine Studienarbeit, die von Martin Schwerdtfeger, im Rahmen seines Praktikums bei der MCT GmbH erstellt wurde.
Die Links auf das Original sind:
http://mct.de/faq/spi.html Deutsche Version
http://mct.net/faq/spi.html Englische Version
Das Serial Peripheral Interface wird in erster Linie für eine synchrone serielle Kommunikation von Hostprozessor und Peripheriebausteinen benutzt. Eine Verbindung zweier Prozessoren über SPI ist aber genauso denkbar und wird am Ende des Kapitels beschrieben.
In der Standardkonfiguration für ein Slavedevice sind zwei Steuer- und zwei Datenleitungen vorgesehen. Der Datenausgang SDO dient einerseits dem Rücklesen von Daten, bietet aber auch die Kaskadierbarkeit mehrerer Bausteine. Der Datenausgang des vorhergehenden Bausteins bildet dann den Dateneingang für das nachfolgende IC.
Beim SPI sind die zwei Betriebsmodi MASTER und SLAVE definiert. Das Device, das sich im MASTER-Mode befindet, gibt das Taktsignal vor und bestimmt über den Zustand der Chip-Select-Leitungen; es aktiviert also den Peripheriebaustein mit dem es kommunizieren möchte. Die Leitungen CS und SCKL sind somit Ausgänge.
Befindet sich ein Device im SLAVE-Mode erhält es Taktsignal und Chip-Select vom Master. Die Leitungen CS und SCKL sind somit Eingänge.
Damit ist die Anzahl der Master auf eins begrenzt, während die Anzahl der Slaves nur durch die Anzahl der Chip-Select-Leitungen begrenzt ist.
Je nach Betriebsart weist ein SPI-Baustein eine unterschiedlich hohe Komplexität auf, die von einem einfachen Schieberegister bis hin zu einem eigenem Subsystem reicht. Das Grundprinzip des Schieberegisters ist allerdings immer anzutreffen. Befehlscodes wie auch Datenwerte werden seriell über die Leitungen geschickt, in ein Schieberegister gepumpt und stehen dann im Baustein zur parallelen Weiterverarbeitung bereit. Hier zeichnet sich schon ein wichtiger Punkt ab, der bei der Konzeption eines SPI-Bussystems bzw. bei der Verarbeitung berücksichtigt werden muß: Die Länge der Schieberegister ist nicht fest definiert, sondern kann von Baustein zu Baustein verschieden sein. Normalerweise sind die Schieberegister 8Bit breit oder ein ganzzahlig Vielfaches davon. Natürlich existieren auch Schieberegister mit einer ungeraden Bitanzahl. So lassen sich beispielsweise durch die Kaskadierung zweier 9Bit EEPROMs Datenwörter mit einer Breite von 18Bit speichern.
Ist ein SPI-Bauteil nicht selektiert, so geht der Datenausgang in einen hochohmigen Zustand (Hi-Z) über. Somit ist gesichert, daß nicht mehrere SPI-Elemente gleichzeitig Daten ausgeben. Für die Kaskadierung mehrerer gleichartiger SPI-Elemente gilt, daß sie an derselben Chip-Select-Leitung angeschlossen sein müssen, und damit als ein einziger SPI-Slave betrachtet werden.
Demnach gibt es zwei sinnvolle Arten der Verbindung von Master und Slave-Bausteinen. Die nächste Abbildung zeigt die Art der Verbindung für die Kaskadierung mehrerer gleichartiger Bausteine.
Wie in der Abbildung ersichtlich werden die kaskadierten Bausteine als ein grösseres Element angesehen und erhalten daher auch nur ein Chip-Select. Die Datenausgangsleitung des vorherigen Bausteines ist jeweils mit der Dateneingangsleitung des nachfolgenden verbunden; sie bilden damit ein breiteres Schieberegister.
Möchte man verschiedene Slaves mit einem Master verbinden ist eine sternenförmige Busstruktur, wie in Abbildung 3 zu wählen. Hierbei werden jedem Slave die Taktleitung und die Datenleitung SDI zugeführt. Ebenso werden die Datenleitungen SDO miteinander verbunden und zurück auf den Master geführt. Lediglich die Chip-Select-Leitungen werden jedem SPI-Baustein separat zugeführt.
Schliesslich und letztlich gibt es noch die Möglichkeit diese beiden Arten zu kombinieren.
Darüberhinaus gibt es natürlich auch noch die Möglichkeit, zwei Mikrocontroller über SPI miteinander zu verbinden. Für eine derartige Vernetzung sind zwei Protokollvarianten denkbar. Bei der ersten gibt es nur einen Master und mehrere Slaves und bei der anderen hat jeder Mikrocontroller die Möglichkeit die Rolle des Masters zu übernehmen. Für die Auswahl des Slaves wären wiederum zwei Versionen denkbar, wobei allerdings nur eine Variante hardwaremäßig unterstützt wird. Die hardwareunterstützte Möglichkeit arbeitet weiterhin mit Chip-Select-Leitungen, während bei der anderen Realisierungsmöglichkeit die Auswahl des Slaves über eine in die Frames gepackte ID geschieht. Die Vergabe der IDs erfolgt am einfachsten softwaremäßig. Nur der angewählte Slave öffnet seine Ausgabeleitung, bei allen anderen Slave bleiben die Ausgangsleitungen im hochohmigen Zustand. Der Ausgang bleibt solange geöffnet, wie der Slave durch seine Adresse angesprochen wird.
Die erste Variante, Single-Master Protokoll genannt, ähnelt der normalen Master-Slave-Kommunikation. Die als Slave konfigurierten Mikrocontroller verhalten sich wie normale Peripheriebausteine.
Die zweite Möglichkeit arbeitet mit mehreren Mastern und wird deshalb Multi-Master-Protokoll genannt. Jeder Mikroprozessor hat die Möglichkeit die Rolle des Masters zu übernehmen und einen anderen Mikroprozessor anzusprechen. Dabei muß ein Controller ständig ein Taktsignal liefern. Für die Vernetzung als Multiple-Master-System stellen zumindest die Mikrocontroller von Motorola hardwaremäßig eine Fehlererkennung bereit. So kennt der MC68HC11 zwei SPI-Systemfehler. Der erste Fehler tritt auf, wenn mehrere SPI-Elemente gleichzeitig die Rolle des Masters übernehmen wollen. Der andere Fehler erkennt eine Kollision beim Schreiben und tritt zum Beispiel auf, wenn die SPI-Elemente mit unterschiedlichen Polaritäten arbeiten. Genaueres hierzu kann im Handbuch zum MC68HC11 nachgelesen werden.
Daten- und Steuerleitungen des SPI
Das SPI benötigt in der Ausgangskonfiguration zwei Steuerleitungen (CS und SCLK) und zwei Datenleitungen (SDI und SDO). In Anlehnung an Motorola besitzen diese beiden Leitungen die Bezeichnungen MOSI und MISO, was für Master-Out-Slave-In und Master-In-Slave-Out steht. Die Chip-Select-Leitung trägt den treffenderen Namen SS, was für Slave-Select steht.
Mit CS (Chip-Select) kann der entsprechende Peripheriebaustein selektiert werden. Wie bei vielen anderen Bausteinen auch ist dieser Pin active-low. Im unselektierten Zustand sind die SDO-Leitungen im hochohmigen Zustand und damit vom Datenbus abgekoppelt. Der Master kann somit bestimmen mit welchem Peripheriegerät er kommunizieren möchte. Die Clockleitung SCLK dient als Taktsignal und wird dem Device unabhängig vom Selektionszustand zugeführt. Die Taktleitung dient der Synchronisierung der Datenkommunikation.
Bei der überwiegenden Anzahl von SPI-Bausteinen sind diese vier Leitungen vorhanden. Es kommt allerdings auch vor, daß die Leitungen SDI und SDO gemultiplexed sind, so zum Beispiel beim Temperatursensor LM74 von National Semiconductor, oder daß eine der beiden Leitungen gänzlich fehlt. Ein Peripherieelement, welches nicht konfiguriert werden muß oder kann, benötigt beispielsweise keine Eingangsleitung, sondern nur einen Datenausgang. Sobald es angewählt wird beginnt es mit dem Verschicken von Daten. Bei einigen ADCs fehlt daher die SDI-Leitung (z.B. MCCP3001 von Microchip).
Daneben gibt es auch Bausteine, die keine Datenausgangsleitung besitzen. An dieser Stelle sind beispielsweise LCD-Controller (z.B. COP472-3 von National Semiconductor) zu nennen, die zwar konfiguriert werden können, aber keine Möglichkeit bieten, Daten zurückzulesen oder Statusmeldungen auszugeben.
Streng genommen kann man solche Bauelemente nicht zu den SPI-fähigen zählen, da sie sich sonst aber genau so verhalten tut man es dennoch.
Die verschiedenen Peripherietypen
Interessant ist natürlich die Frage danach, welche Peripherietypen existieren und sich mit dem Hostprozessor verbinden lassen. Die vorhandenen Typen sollen nun näher erläutert und ihre wichtigsten Kenndaten angesprochen werden. Die Peripherietypen lassen sich in folgende Kategorien unterteilen:
- Wandler (ADC und DAC)
- Speicher (EEPROM und FLASH)
- Real Time Clocks (RTC)
- Sensoren (Temperatur, Druck)
- Sonstige (Signalmixer, Potentiometer, LCD-Controller, UART, CAN-Controller, USB-Controller, Amplifier)
In den drei Kategorien Wandler, Speicher und RTCs sind die meisten Vertreter zu finden. Bausteine die man zu den letzten beiden Gruppen zählen kann sind seltener zu finden.
Die Auswahl bei den Wandlern ist gross. Die Hersteller bieten Wandler mit unterschiedlichsten Auflösungen, Taktfrequenzen und Kanälen an. Die Bitauflösungen sind in den Bereichen 8, 10, 12 bis hin zu 24Bit zu finden, während die Taktfrequenzen die Bereiche 30ksps bis hin zu 600ksps überstreichen.
Die Speicherbausteine sind überwiegend EEPROM-Varianten; zwar gibt es auch einige SPI-Flash-Speicher, aber eben weniger. Die Speicherkapazitäten reichen von einigen Bits bis hin zu 64KBit. Bei den Speichergeschwindigkeiten können Taktfrequenzen von bis zu 3MHz erzielt werden. Serielle EEPROMS mit SPI sind für verschiedene Spannungsbereiche (2.7V bis 5V) verfügbar und bieten damit die Möglichkeit, auch im Low-Voltagebereich eingesetzt zu werden. Die Zeitdauer für die die Daten gespeichert sind (data retention time) reicht von 10 Jahren bis hin zu 100 Jahren. Die zulässige Zahl der Schreibzugriffe wird für die meisten Bausteine mit 1 Million Zyklen angegeben. Speicherbausteine sind beispielsweise Vertreter, bei denen durch Kaskadierung beliebige Wortbreiten erzielt werden können.
Weitere Speichereinheiten mit SPI-Zugriff sind MMC- und SD-Karten. Kapazitäten bis 1GByte sind erhältlich, Transferraten bis 10Mbit/s lassen sich erzielen. Die Betriebsspannungen dürfen zwischen 2.7V und 3.6V liegen. 5V-Betrieb ist NICHT zulässig. Die Ansteuerung ist jedoch deutlich komplexer als bei den einfacheren Speicher-ICs, da eine spezielle und teilweise schlecht dokumentierte Kommandostruktur benutzt wird. Als Vorteil wäre dagegen zu verbuchen, daß über diese Medien ein Datenaustausch mit dem PC möglich ist - quasi als Ersatz der mechanischen Floppy - da auch ein Dateisystem im Standard festgelegt wurde.
Real Time Clocks (RTCs) bieten sich für eine serielle Kommunikation förmlich an, da man hier keine riesigen Datenmengen übertragen muss. Auch bei den RTCs existieren verschiedene Varianten; viele RTCs bieten einen breiten Spielraum bei der Spannungsversorgung an; einige arbeiten bereits mit einer Betriebsspannung ab 2.0 Volt. Neben den Standardfunktionen einer "normalen" Uhr bieten einige Vertreter zusätzlich Funktionen, wie umschaltbares 24h/12h-Format, Alarmfunktionen und nichtflüchtiges User-RAM an, das auch für "private" Zwecke genutzt werden kann. Die bekanntesten Hersteller für RTCs sind DALLAS und EPSON.
Auf die restlichen zwei Gruppen fallen alle bis jetzt noch nicht erwähnten Bausteine mit SPI.
Die Gruppe der Sensoren ist bis dato noch schwach vertreten. Lediglich ein Temperatur und ein Drucksensor konnte bei den Recherchen geortet werden. Sicherlich wird die Anzahl in der Zeit noch weiter zunehmen, denn auch für Sensoren bietet sich eine serielle Übertragung durchaus an. Möchte man keine high-speed Messungen unternehmen sind eigentlich alle Sensorentypen, wie zum Beispiel Sensoren für Windgeschwindigkeit, Luftfeuchtigkeit, Temperatur, Gas, Lichtstärke etc. auch mit digitaler serieller Schnittstelle denkbar.
Neben den in der Bauteilliste aufgeführten restlichen SPI-Elementen, existieren weitere, die oft eine SPI für das Einstellen der Konfigurationsregister benutzen, die eigentliche Datenübertragung aber mit einem anderen Protokoll vollziehen. Aber auch die Gruppe der Sonstigen sollte nicht vernachlässigt werden. So sind CAN- oder USB-Controller mit SPI eine einfache Möglichkeit dem Mikroprozessor auch diese Türen zu öffnen. Auch die serielle LCD-Anbindung stellt eine sinnvolle Alternative dar, spart man sich auch hier das lästige Leitungenziehen der parallelen Datenbusse.
--Techno 17:41, 19. Dez 2005 (CET)
Quellen
- Motorola MC68HC11 Reference Manual, Prentice Hall 1989
- Motorola MC68332 User Manual
- Diverse Applicationnotes
- Datenblätter
- MCD Infos
Siehe auch
- I2C
- RS232
- RS485
- Portexpander am AVR – Portexpander mit SPI-Ansteuerung
- RN-Definitionen - Empfohlener einheitlicher Stecker für SPI-Bus