Home    Impressum / Datenschutz    Shop    Download    Links     Blog  

Das I2C-USB-Modem

Kommunikation zum I2C-Bus mit einfachen Steuerbefehlen über das I2C-USB-Interface

Rechner mit serieller Schnittstelle werden immer seltener.
Dieses I2C Modem empfängt seine Befehle über eine simulierte RS232 Schnittstelle.
Dadurch ist es möglich mit nahezu allen Entwicklungsumgebungen auf die I2C-Bausteine zuzugreifen. z.B.

- Visual Basic /  VBA
- Linux
- C++, Delphi
- Pearl
- ...  u.v.m.

Folgende Funktionen sind sind bereits realisiert worden:

  • I2C-Steuerbefehle als Steuersequenzen über USB-Bus
  • Busgeschwindigkeiten bis 350 kHz
  • Mit der Sniffer Funktion können Sie die Telegramme auf dem I2C-Bus belauschen.

Die Hardware

Als USB-Baustein wurde der 2005FT232R USB UART von Future Technology Devices International kurz FTDI verwendet. Der Chip ist zwar etwas teurer fügt sich aber in alle Betriebssysteme sicher und zuverlässig ein.

Treiber für alle möglichen Betriebssysteme (von Windows 98 bis Windows Server 2008) finden Sie auf der Treiberseite des Chipherstellers unter: http://www.ftdichip.com/Drivers/D2XX.htm

Ist der Treiber installiert finden Sie in der Systemsteuerung einen virtuellen COM-Port also eine simulierte RS232-Schnittstelle. Über diese werden die Steuerbefehle zum I2C-Bus gesendet und die Antworten empfangen.

Mit einem Jumpern auf der Platine kann die Terminierung der I2C-Signale im Modem erfolgen. Falls Sie bei längeren Leitungen am Ende terminieren möchten, können Sie den Jumper entfernen oder die die Terminierung per Steuerbefehl abschalten.

Die drei Leuchtdioden zeigen den aktuellen Signalpegel an. Dies hat sich bei der Softwareerstellung als ungemein nützlich erwiesen.

Die Spannung für die I2C-Bausteine wird absichtlich nicht vom USB-Bus abgezapft damit der PC oder die Schnittstellenkarte keinen Schaden nimmt.
Sie benötigen also ein 5V Netzteil das entweder an der Klemmleiste ST2 angeschlossen oder mit einem Hohlstecker (Außendurchmesser 5,5 mm Stiftdurchmesser 2 mm Pluspol innen) angesteckt werden kann.

Steuerbefehle / Kommandos

Das I2C-USB-Modem empfängt und sendet die Kommandos über einen virtuellen COM-Port mit folgenden Einstellungen:

  • 115200 Baud
  • no Parity
  • 8 Zeichenbits
  • 1 Stoppbit

 

Nachdem das Modem ein Kommando vollständig empfangen hat wird es auf den I2C-Bus angewendet. Anschließend wird vom Modem eine Antwort generiert und zum PC zurückgeschickt.
Die Antwort ist wie folgt aufgebaut:

  • der Befehl
  • die Anzahl der Bytes im Datenblock (maximal 128)
  • der Datenblock selbst und
  • das Ende-Zeichen (EOT= END OF TRANSMISSION).
Befehle
VERSION Mit diesem Befehl lässt sich die aktuelle Firmware-Version ermitteln.
Der Antwort-Frame enthält 3 Byte Nutzdaten, welche die Version der Firmware enthalten.
MODEM-CALL Dieser Befehl hat die Aufgabe das Modem „anzustoßen“. Somit lässt sich ganz einfach feststellen ob das Modem noch mit dem PC verbunden ist oder ob es Probleme mit der USB-Verbindung gibt.
PULLUP Der I2C-Bus braucht an einer Stelle im Netz eine Terminierung nach +5V. Dies wird in der Regel mit Widerständen gemacht. Bei der Kommunikation ziehen die Busteilnehmer diese High-Pegel auf Masse. Es gibt Anwendungen wo nicht am Master terminiert werden soll. Dann können die Pull-Up-Widerstände mit diesem Befehl abgeschaltet werden können.
I2C-SPEED Mit diesem Befehl kann die Taktgeschwindigkeit am I2C-Bus zwischen
40 Hz und 350 kHz eingestellt werden.
I2C-SET Mit diesem Befehl können zu Testzwecken die Signale INT, SCL und SDA einzeln auf High oder Low gesetzt werden.
I2C-GET Mit I2C-Get wird der aktuelle Zustand der Signale INT, SCL und SDA abgefragt
I2C-DATA Mit diesem Befehl können Sie Daten von einem I2C-Slave empfangen, oder Daten an einen I2C-Slave senden.
Ob Daten gesendet oder empfangen werden sollen erkennt das Modem an dem R/W-Bit in der Adresse.
Ist das R/W-Bit (Bit 0) „Low“, werden Daten geschrieben. Ist das R/W-Bit „High“, werden Daten gelesen.

Beispiel Daten lesen:
Um Daten von einem I2C-Slave zu lesen wird im Datenblock erst die Adresse abgelegt und dann die gewünschte Anzahl der zu lesenden Bytes angegeben.
Im Normalfall hat die Slave-Adresse eines I2C-Slaves nur 7 (bzw. 8) Bit. Da aber immer mehr IC´s mit 10 Bit breiter Adresse auf den Markt kommen wurde die Adresse in Byte aufgeteilt. Ist das MSB null, so interpretiert das Modem die übermittelte Adresse als eine 7 Bit Adresse. Stehen Daten im MSB, so wird ein 10 Bit breiter Adresszugriff generiert.

Im nachfolgenden Beispiel werden 5 Bytes von einem I2C-Slave an Adresse 161 gelesen.

 

Beispiel Daten schreiben:
Um I2C-Daten an einen Slave zu senden wird im Datenblock erst die Adresse abgelegt und dann die zu sendenden Daten hinterher geschoben.

Im nachfolgenden Beispiel werden 3 Bytes an einem I2C-Slave an Adresse 172 geschrieben.

 

Analyser / Sniffer

Die Sniffer-Funktion im I2C.-USB Interface ist jetzt vorhanden und kann mit der Firmwareversion 1.2 genutzt werden. Damit ist es jetzt möglich den Datenverkehr auf dem I2C-Bus mit zu loggen. Es ist möglich einen Filter auf bestimmte Adressen zu setzten oder den kompletten Datenverkehr mitzulesen. Dazu wurde unser Terminalprogramm erweitert.

 

Dokumentation
Detaillierte Beschreibung der Steuerbefehle i2c-usb-modem_kommandos.pdf (239 kB)
Datenblatt (1 Seite) i2c-usb-modem_db.pdf (392 kB)
Schaltplan (1 Seite) i2c-usb-modem_sp.pdf (23 kB)
I2C-USB-Modem-Test.zip (118 kB)
Excel-Makro
mit je einem Beispiel zur Ansteuerung der I2C-Ausgabekarte,
I2C-Eingabekarte und EEprom mit dem I2C-USB-Modem und der port.dll.
Ein Terminalprogramm mit dem die Funktion des I2C-USB-Modems und der angeschlossenen Slaves getestet werden kann.
Terminalprogramm i2c-usb-modem_terminalprogramm.zip (132 kB)
Beschreibung  i2c-usb-modem_terminalprogramm.pdf (81 kB)

 

Bausätze können Sie günstig in unserem Onlineshop in der Rubrik
"I2C-Komponenten" bestellen.