Forum: Mikrocontroller und Digitale Elektronik SPI oder I2C (MPU9250)


von ThomasL (Gast)


Lesenswert?

Guten Tag,

ich bin ein relativer Neuling im Bereich STM32 und habe mir kurzerhand 
das Discovery Board gekauft. Nach den anfänglichen Standardprojekten 
habe ich mich nun dazu entschieden ein etwas größeren Sprung zu machen 
und möchte nun den MPU9250 auslesen.

Dabei bieten sich zwei Protokolle an: I2C und SPI.
Mit I2C habe ich schonmal oberflächlich gearbeitet, SPI ist für mich 
noch totales Neuland. Wenn man sich das Datenblatt und die Register Map 
vom MPU9250 anschaut, scheit es mir, als würde die I2C Schnittstelle 
viel besser erklärt werden?!

Woran liegt das? Ich würde gerne die SPI Schnittstelle benutzen, finde 
dazu aber so wenig Informationen, dass ich mich kaum an das Thema traue.

Meint ihr, ich kann das per SPI schaffen oder soll ich lieber bei I2C 
bleiben - wo es im Endeffekt sogar schon fertigen Code gibt?
Ich bin da noch sehr unsicher und würde mich über eure Meinung freuen.

Liebe Grüße.

von Harald (Gast)


Lesenswert?

Hat man beim discovery board die Wahl? Ich möchte grad nicht googeln...

von ThomasL (Gast)


Lesenswert?

Wie meinst du das?
Natürlich hat man bei dem Discovery mehrere SPI und I2C Schnittstellen 
zur Verfügung :)

von Harald (Gast)


Lesenswert?

Schon aber der Sensor ist ja auf dem board verbaut. Da müssen ja nicht 
notwendigerweise beide Interfaces angeschlossen sein oder? Btw das 
demoprogramm nutzt den Sensor.

von ThomasL (Gast)


Angehängte Dateien:

Lesenswert?

Ah, jetzt verstehe ich was du meinst :)

Der MPU9250 ist nicht auf dem Discovery verbaut. Ich habe diesen auf 
einer breadboardkonformen Platine!

Es geht tatsächlich nur um die Softwareseite. Es gibt ja auch genug 
Beispiele wie man die SPI oder I2C Schnittstelle benutzt, mir ist aber 
bei beiden Protokollen nicht klar, was für Daten ich senden muss um den 
MPU korrekt anzusteuern.

von Harald (Gast)


Lesenswert?

Ah ok. Mir ist auch Grad eingefallen dass der mpu nicht da sondern auf 
dem tiva Sensor booster verbaut ist. Sorry fürs verwirren...

von ThomasL (Gast)


Lesenswert?

Hey, kein Problem. Man kann nicht immer alles vor Augen haben :)

Um nochmal meine eigentlich Frage anzustoßen:

http://www.invensense.com/mems/gyro/documents/RM-MPU-9250A-00.pdf

In der PDF steht viel über I2C und wenig über SPI.
Ist der einzige Unterschied (natürlich nur im Groben), dass ich über I2C 
eine Adresse habe und über SPI ein CS? Also ist die eigentliche 
Kommunikation die selbe, nur kann ich bei SPI die Register wie "Register 
36 – I2C Master Control" ignorieren?

von Karol B. (johnpatcher)


Lesenswert?

ThomasL schrieb:
> Ist der einzige Unterschied (natürlich nur im Groben), dass ich über I2C
> eine Adresse habe und über SPI ein CS?

Nein, das sind schon zwei verschiedene Systeme - allein schon 
hardwaretechnisch unterscheiden Sie sich deutlich voneinander. Gemeinsam 
ist ihnen aber, dass sie synchron arbeiten, d.h. es gibt ein dediziertes 
Taktsignal, nämlich SCL im Fall von I2C und SCK im Fall von SPI.

Ansonsten solltest du vielleicht damit beginnen deinen Horizont etwas zu 
erweitern und dich nicht nur auf den o.g. Chip zu konzentrieren. I2C und 
SPI sind viel allgemeingültigere Konzepte, die man zunächst einmal 
verstehen sollte, bevor man sich konkret mit einem spezielllen Chip 
auseinander setzt. Schau dir doch einfach mal passende Tutorials and und 
sieh dir dann Beispielprojekte an, welche entsprechende Treiber 
implementieren.

Mit freundlichen Grüßen,
Karol Babioch

von ThomasL (Gast)


Lesenswert?

Danke für deine Antwort.
Mir ist klar, dass beides zwei verschiedene Systeme sind.
Ich habe mir auch schon einiges dazu durchgelesen.

> Ist der einzige Unterschied (natürlich nur im Groben), dass ich über I2C
> eine Adresse habe und über SPI ein CS?

Schon beim schreiben des Satzes hatte ich ein mulmiges Gefühl.
Mein Einschub "(natürlich nur im Groben)" hat ihn auch nicht entschärft 
;)
Ich bezog mich dabei nur auf die softwaretechnische Seite.
Wie die Protokolle funktionieren meine ich schon verstanden zu haben.
Die Hardwareseite ist mir auch klar.

Ich wollte eigentlich nur das offensichtliche aufführen:
Bei I2C erfolgt die Kommunikation durch senden der Adresse des 
Schaltungsteiles.
Bei SPI erfolgt das ansprechen über ein CS, welchen ich auf "Low" ziehe.

So, mir ist klar, dass Hardwaremäßig schon Unterschiede bestehen.
Auch das verschiedene Peripherien benötigt werden weiß ich.

Ich frage mich eher WAS für Daten ich an den Slave senden muss und nicht 
das WIE.

Wenn ich dem MPU9250 z.B. über I2C das Register "0x3B" schicke, so 
liefert er mir die Werte vom Accelerometer zurück.

Wie aber funktioniert das bei SPI?

Wenn man das Dokument mal überfliegt, fällt einem auf, dass überall nur 
von I2C die Rede ist:
http://www.invensense.com/mems/gyro/documents/RM-MPU-9250A-00.pdf
Kann es das es noch eine SPI-Version davon gibt?

PS: Tut mir Leid, dass ich mich so schwer ausdrücke. Es fällt mir schwer 
auf den Punkt zu kommen. Ich hoffe, jemand versteht meine Schwierigkeit 
:)

von Datenblattleser (Gast)


Lesenswert?

Besser währe da wohl das vollständige Datenbatt.
http://www.invensense.com/mems/gyro/documents/PS-MPU-9250A-01.pdf

Dort ist beschrieben, wie man zwischen I2C und SPI Modus umschalten 
kann.

von ThomasL (Gast)


Lesenswert?

Maaan, versteht man mich echt soo schlecht?
Wir reden immernoch aneinander vorbei :)

von Marco S. (marco_sch)


Lesenswert?

ThomasL schrieb:
> Wie aber funktioniert das bei SPI?

Du sendest die gleichen Daten an den Slave, wie beim i²c-Bus, nur mit 
dem Unterschied, dass die Adressierung nicht über ein Adressbyte 
(welches den Slave auf dem Bus adressiert) durchgeführt wird, sondern 
über die CS-Leitung. Wenn du also ein bestimmtes Register konfigurieren 
willst, dann ziehst du die CS-Leitung des entsprechenden Slaves auf LOW 
und versendest dann die Adresse des Registers als ein vollständiges 
Byte. Anschließend sendest du den Inhalt als zweites Byte, welches der 
Slave dann in das Register übernimmt.

von Datenblattleser (Gast)


Lesenswert?

Hmmm... das Datenblatt sagt ganz klar - bei SPI und I2C sendest du die 
selben Kommandos. Nur die elektrische Verbindung unterscheidet sich.

Wenn Invensense I2C bevorzugt, dein STM I2C kann, und du damit 
Erfahrungen hast - warum denkst du dann über SPI nach? Einfach 
ignorieren.

von ThomasL (Gast)


Lesenswert?

> Du sendest die gleichen Daten an den Slave, wie beim i²c-Bus, nur mit
> dem Unterschied, dass die Adressierung nicht über ein Adressbyte
> (welches den Slave auf dem Bus adressiert) durchgeführt wird, sondern
> über die CS-Leitung. Wenn du also ein bestimmtes Register konfigurieren
> willst, dann ziehst du die CS-Leitung des entsprechenden Slaves auf LOW
> und versendest dann die Adresse des Registers als ein vollständiges
> Byte. Anschließend sendest du den Inhalt als zweites Byte, welches der
> Slave dann in das Register übernimmt.

Du bist der Beste! Danke!

Also sind die Registeradressen bei I2C und SPI die gleichen?
Und die Register, die sich nur mit der I2C Schnittstelle beschäftigt 
(wie z.B. die Registers 37 bis 39 auf Seite 20), kann ich ignorieren?
( http://www.invensense.com/mems/gyro/documents/RM-MPU-9250A-00.pdf )

Danke euch :)

von ThomasL (Gast)


Lesenswert?

> Wenn Invensense I2C bevorzugt, dein STM I2C kann, und du damit
> Erfahrungen hast - warum denkst du dann über SPI nach?

Ich habe I2C nur so gestreift. Ob ich jetzt SPI oder I2C benutze macht 
für mich kein Unterschied. SPI soll ja zudem schneller sein.

Auch habe ich mir mehrere "SPI versus I2C" Beiträge durchgelesen, konnte 
aber nie ein klaren "Gewinner" identifizieren.

von Marco S. (marco_sch)


Lesenswert?

Dieser Sensor unterstützt einen schnelleren Bustakt für den SPI Bus 
(1MHz), als für i²c. i²c kann mit maximal 400kHz betrieben werden und 
ist somit langsamer als der SPI Bus. Du solltest bei der Wahl bedenken, 
dass die Sensoren selber nur mit einer bestimmten Rate Messwerte 
abtasten. Ich habe nur mal kurz ins Datenblatt geschaut, aber wie ich 
das gesehen habe, liefert das Gyro mit max. 8kHz neue Messwerte und das 
Accelerometer mit max. 4kHz. Das ist ja der begrenzende Faktor.

von ThomasL (Gast)


Lesenswert?

Alles klar. Ich glaube, es ist nicht weiter tragisch wenn der SPI Bus 
etwas unterfordert ist. Ich werde es erst damit versuchen. Danke euch 
nochmal :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.