I2C Software-Schnittstelle NEU

Was wird wie gelöst, warum geht es nicht, wer bekommt es zum Laufen? Eure Projekte und Programme könnt ihr hier vorstellen, diskutieren und verbessern.
Post Reply
DL9MWE
Posts: 39
Joined: Sat 12. May 2012, 09:02

I2C Software-Schnittstelle NEU

Post by DL9MWE »

Hallo Forum,

ich habe den Beitrag neu geschrieben und eine korrigierte ZIP-Datei angehängt, weil ein Fehler beseitigt werden musste.
Nun funktioniert auch ein "multiple byte read". Der Fehler lag im Protokoll von ACK und NACK (Acknowledge und Negative Acknowledge).
Außerdem habe ich den Code verkleinert, indem Überflüssiges weggelassen wurde und gleicher Code in Unterfunktionen zusammengefasst wurde.

Im Anhang sind der C- und der H-File einer I2C-Software-Schnittstelle für den MSP430 (hier der G2553) zu finden.
Der I2C-Bus wurde von Philips erdacht und ermöglicht einen Datenaustausch zwischen ICs mit nur zwei Leitungen.
Eine Datenleitung und eine Taktleitung, und natürlich Masse.
Normalerweise gibt es einen "Master", der die "Slaves" über deren jeweilige Adresse gezielt anspricht.
Multimaster-Betrieb ist in der I2C-Definition auch vorgesehen, wird hier aber nicht unterstützt.
SDA (die Datenleitung) und SCL (die Taktleitung) müssen extern mit Pull-Up-Widerständen (je 10K) mit Vdd
(also der pos. Spannungsversorgung) verbunden werden.

Ich habe einen im Netz verfügbaren Software-Treiber für unseren MSP430G2553 angepasst. (Und korrigiert)
"Unser" G2553 kann I2C zwar auch per Hardware realisieren, was sicher etwas weniger Flash-Speicherplatz bräuchte; das läuft hier aber (noch) nicht. sri...
Der Vorteil einer Software-Lösung ist (zunächst, dass sie hier funktioniert.. hi), dass im Debug-Modus jeder Pegelwechsel sichtbar ist.
Zudem kann man die beiden Port-PINs für die Schnittstelle beliebig wählen. Die Hardware-Lösung im G2553 legt P1.6 und P1.7 fest.

Zu beachten ist, dass I2C im ersten Byte die Device-Adresse und die Information, ob das Device anschließend lesen oder schreiben soll, überträgt.
Die oberen 7-Bit sind dabei die Device-Adresse. Das unterste Bit teilt dem Slave mit, ob er anschließend Daten lesen oder schreiben soll.
Viele Hersteller geben als Device-Adresse eine 8-Bit-Adresse an, bei der das unterste Bit immer = 0 ist.
Andere Hersteller teilen 7-Bit-Adressen mit, die dann um 1 Bit nach links geshiftet werden müssen. Bitte Datenblatt aufmerksam lesen!
Dieser Treiber verwendet diese 8-Bit Adresse und addiert das R/_W-Bit je nach Erfordernis (0=Write, 1=Read; aus Sicht des Masters).

Die "offizielle" Definition der I2C-Schnittstelle ist hier nachzulesen:
http://www.classic.nxp.com/acrobat_down ... 340011.pdf
Auch hier ist Informatives zu I2C zu finden: http://de.wikipedia.org/wiki/I%C2%B2C

vy 73 de Matthias, DL9MWE
Attachments
MSP430_SWI2C_Master.zip
Source- und Header-Files für den Master einer Software-I2C-Schnittstelle. Dazu ein Codefragment zur Initialisierung des MSP430.
No warranty whatsoever!
(3.64 KiB) Downloaded 454 times
Post Reply