Bussysteme

Digitale Bussysteme für kompakte Systeme

Digitale Bussysteme für kompakte Systeme

Mit dem Siegeszug der Digitaltechnik sind serielle Bussysteme ein unverzichtbarer Bestandteil in elektronischen Geräten geworden. Speziell in kompakten Systemen haben sich SPI- und I2C etabliert.  

Seit ihrer Entwicklung in den 1980er Jahren haben sich die seriellen Bussysteme I2C [1] und SPI [2, 3] in nahezu allen Bereichen der Elektronik etabliert. Sie bieten eine schnelle und sichere bidirektionale Datenübertragung zwischen Mikrocontrollern und weiteren Systemkomponenten (z. B. Sensoren, Aktoren, Speichern, ADCs…) und sind in kompakten Systemen mit kurzen Übertragungslängen das Mittel der Wahl.  

Der I2C-Bus 

Für den Datentransfer zwischen Controller und Target über den I2C-Bus werden zwei Leitungen zur Kommunikation (SDA, SCL), sowie zwei Leitungen zur Versorgung (VCC, GND) benötigt. Die Datenübertragung findet bidirektional auf der SDA-Line statt, während die SCL-Line der Synchronisation der Datenübertragung dient und vom Controller gesteuert wird. SDA- und SCL-Line sind über Pull-Up-Widerstände mit VCC verbunden, um den Pegel im ungenutzten Zustand auf HIGH zu ziehen.   

Der Ablauf der Kommunikation ist durch das I2C-Protokoll exakt festgelegt: Der Controller initiiert die Datenübertragung mit einer Startbedingung, d. h. er setzt die SDA-Line auf LOW, während die SCL-Line auf HIGH steht. Nun wird mit jedem Clockimpuls ein Datenbit übertragen. Dabei darf der Zustand der SDA-Line nur dann geändert werden, wenn die SCL-Line auf LOW steht. Der Controller beendet die Datenübertragung mit einer Stoppbedingung, wozu er die SDA-Line von LOW auf HIGH setzt, während die SCL-Line auf HIGH steht.  

Der Controller sendet nach der Startbedingung die Adresse des Targets als 8-bit-Wort, bestehend aus der 7-bit Adresse und dem Direction-Bit. Das Direction-Bit definiert, ob der Controller Daten schreiben (WRITE: Bit = 0) oder Daten empfangen möchte (READ: Bit = 1). Das angesprochene Target bestätigt den Empfang seiner Adresse mit einem Acknowledge-Bit (ACK), indem es die SDA-Line im nächsten Takt auf LOW zieht. Hat der Controller ein WRITE-Bit ge-sendet, so überträgt er danach weitere Datenbytes an das Target, das jedes Byte mit einem ACK bestätigt, bis der Controller die Übertragung beendet. Bei einem READ-Bit beginnt das Target nach dem ACK mit der Datenübertagung, wobei nun der Controller jedes Byte mit einem ACK bestätigt, bis er den Datentransfer beendet. Während der gesamten Kommunikation erzeugt der Controller die notwendigen Clockimpulse. 

An einem I2C-Bus können mehrere Teilnehmer parallel an die SDA- und SCL-Line angeschlossen werden. Dazu benötigen sie verschiedene I2C-Adressen, deren Anzahl auf max. 127 begrenzt  ist. Es sind dabei auch mehrere Con­troller möglich. 

Die Clock-Frequenz beträgt im Standardmodus 100 kHz, im Fast-Mode 400 kHz und im High-Speed-Mode 3,4 MHz. In der Praxis beschränken parasitäre Kapazitäten und Widerstände im System die Anzahl der Teilnehmer, die Länge des Busses und die Übertragungsgeschwindigkeit. Üblicherweise lassen sich Buslängen von 2m ohne Einschränkungen realisieren.  

Der SPI-Bus 

Der SPI-Bus benötigt zur Kommunikation vier Leitungen und zwei weitere zur Versorgung (VCC, GND). Die Datenübertragung erfolgt jeweils unidirektional über die Controller-Output-Target-Input-Line (COTI) und die Controller-Input-Target-Output-Line (CITO). Mit der SCLK-Line synchronisiert der Controller die Kommunikation und mit der TS-Line adressiert er das Target.  

Zur Initiierung des Datentransfers via SPI zieht der Controller die TS-Line des Targets auf LOW. Die Datenübertragung erfolgt dann synchron zu vom Controller auf der SCLK-Line erzeugten Clockimpulsen, wobei gleichzeitig Daten über die COTI- und die CITO-Line gesendet werden können. Damit bietet der SPI-Bus die Möglichkeit der voll-duplex Kommunikation, sofern das Target dies unterstützt.  

Das SPI-Protokoll erlaubt verschiedene Variationen. Die Datenstruktur ist nicht festgelegt, zumeist werden jedoch 8-bit-Pakete übertragen. Es existieren darüber hinaus vier verschiedene Übertragungsmodi [4], die festlegen, welche Polarität die SCL-Line im Ruhezustand hat (HIGH oder LOW) und auf welcher Flanke der Clock die Daten übertragen werden. Im Standardmodus (sog. Modus 0) ist die SCLK-Line im Ruhezustand LOW und das jeweilige Datenbit wird bei fallender Taktflanke des ersten Clockimpulses vom Sender gesetzt und mit dem nachfolgenden Clockimpuls bei steigender Flanke abgetastet. Die Wahl des SPI-Modus hängt von den Spezifikationen der beteiligten Targets ab.  

Grundsätzlich ist es möglich, mehrere Targets an einem SPI-Bus anzuschließen. Da aber jedes Target eine eigene TS-Line benötigt, ist die maximale Anzahl der Targets durch den Controller begrenzt.  

Die Geschwindigkeit der Datenübertragung ist bei SPI nicht spezifiziert und hängt von der Reaktionsgeschwindigkeit der Busteilnehmer und der Signalintegrität auf den Busleitungen ab; typischerweise lassen sich Übertragungsraten von 10 bis 20 MHz erreichen. 

Die Vor- und Nachteile 

Mit seiner einfachen Topologie, der Adressierung und der bidirektionalen Datenübertragung über die SDA-Line eignet sich der I2C-Bus besonders für platzkritische Anforderungen mit mehreren Teilnehmern. Weitere Vorteile sind die Möglichkeit des Multi-Controller-Betriebs sowie die Empfangsbestätigung. Nachteilig ist die Notwendigkeit von Pull-Up Widerständen, die u.a. die Übertragungsraten begrenzen.  

Das SPI-Protokoll hängt in seiner Umsetzung stark von den Spezifikationen der Busteilnehmer ab. Es eignet sich aufgrund der benötigten TS-Leitung nur für eine begrenzte Anzahl an Teilnehmern. Aufgrund der Schaltungstechnik und der voll-duplex Übertragung bietet sich der SPI-Bus für Anwendungen an, die eine hohe Datenrate erfordern.  

I2C- und SPI- kompatible Sensoren 

Heutzutage sind Komponenten am Markt verfügbar, die sowohl I2C- als auch SPI-kompatibel sind. Als Beispiel ­werden hier Drucksensoren vom Typ AMS 5935 präsentiert. Diese leiterplattenmontierbaren Sensoren mit 18-bit Auflösung geben kalibrierte Druck- und Temperaturmesswerte über eine I2C/SPI-Schnittstelle aus. Die Kommunikationsart kann nach jedem Power-Up eingestellt werden, indem entweder ein I2C-Befehl folgt oder die TS-Line aktiviert wird. Die max. Übertragungsrate im I2C-Betrieb ­beträgt 3,4 MHz und im SPI-Betrieb 20 MHz. 

Die AMS 5935 gibt es für Druckbereiche von 1,25 mbar bis 2 bar für alle Druckarten. Mit der geringen Stromaufnahme und dem Versorgungsspannungsbereich von 1,8 bis 3,3 V sind sie ideal für Mikrocontrolleranwendungen im Batteriebetrieb.  

Quellenhinweise:  

[1]  „UM10204: I2C-bus specification and user manual, Rev. 7.0-1 October 2021“, User Manual NXP 

[2] Patent US4816996: Queued serial peripheral interface for use in a data processing system., Motorola; Hill, Jelemensky, Heene 

[3] F. Leens, „An introduction to I2C and SPI protocols“ in IEEE Instrumentation & Measurement Magazine, February 2009, doi: 10.1109/MIM.2009.4762946 

Autorin: Carola Kiehn, Entwicklungsingenieurin bei der Analog Microelectronics GmbH in Mainz 

Bilder: Analog Microelectronics GmbH, Mainz 

Teilen

Fachartikel Sensorik