Verwenden von I2C in allgemeinen Anwendungen

Azure Sphere unterstützt Inter-Integrated Circuit (I2C) im master Modus. I2C ist ein serieller Bus, der Peripheriegeräte mit niedrigerer Geschwindigkeit mit Mikrocontrollern verbindet. I2C verwendet ein Multi-master/Multi-Subordinate-Modell, bei dem ein master Gerät eine Gruppe untergeordneter Geräte steuert. I2C wird häufig mit Peripheriegeräten verwendet, die nur eine einfache, einfache Kommunikation mit einem Mikrocontroller erfordern, z. B. Einstellungssteuerelemente, Netzschalter und Sensoren.

Anwendungen können über I2C auf Peripheriegeräte zugreifen, indem sie Applibs-I2C-APIs aufrufen, um Vorgänge auf einer I2C-master-Schnittstelle auszuführen. Im LSM6DS3 I2C-Beispiel wird beschrieben, wie Sie die Hardware für I2C auf einem MT3620-Gerät konfigurieren und I2C in einer Anwendung verwenden.

I2C-Anforderungen

Anwendungen, die I2C verwenden, müssen die entsprechenden Headerdateien für I2C enthalten und dem Anwendungsmanifest I2C-Einstellungen hinzufügen.

Alle Anwendungen müssen ihre Zielhardware festlegen und die entsprechende Hardwaredefinitionsheaderdatei enthalten.

Headerdateien

 #define I2C_STRUCTS_VERSION 1
 #include <applibs/i2c.h>
 #include "path-to-your-target-hardware.h"

Deklarieren Sie die I2C_STRUCTS_VERSION Präprozessordefinition, bevor Sie die Headerdatei einschließen. Dies gibt die Strukturversion an, die von der Anwendung verwendet wird.

Ersetzen Sie "path-to-your-target-hardware.h" durch den Pfad zur Headerdatei für Ihre Hardware.

Anwendungsmanifesteinstellungen

Um die I2C-APIs verwenden zu können, müssen Sie die I2cMaster Funktion dem Anwendungsmanifest hinzufügen und dann jede I2C-master-Schnittstelle zur Funktion hinzufügen. Dadurch kann die Anwendung auf die Schnittstelle zugreifen. Das Azure Sphere-Anwendungsmanifest enthält weitere Details zum Anwendungsmanifest.

Verwenden Sie in Ihrem Code die Konstanten, die für Ihre Hardware definiert sind, um die I2C-Schnittstellen zu identifizieren. Der Compiler übersetzt diese Werte beim Erstellen der App in Rohwerte.

Hier ist beispielsweise ein Auszug aus einem Anwendungsmanifest, das auf ein MT3620 Reference Development Board (RDB) abzielt und zwei I2C-master-Schnittstellen konfiguriert:

"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],

Der folgende Auszug zeigt, wie Sie die gleichen I2C-master-Schnittstellen in einer Anwendung angeben, die auf das Avnet MT3620 Starter Kit ausgerichtet ist:

"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]

Öffnen einer I2C-master-Schnittstelle

Bevor Sie Vorgänge für eine I2C-master-Schnittstelle ausführen, müssen Sie sie öffnen, indem Sie die funktion I2CMaster_Open aufrufen.

Aktualisieren der Einstellungen für eine I2C-master-Schnittstelle

Nachdem Sie die master-Schnittstelle geöffnet haben, können Sie die Einstellungen ändern:

Ausführen von Lese- und Schreibvorgängen auf der I2C-master-Schnittstelle

Azure Sphere unterstützt mehrere Optionen zum Ausführen von Lese- und Schreibvorgängen mit I2C. Diese Optionen sind alle blockierenden synchronen Vorgänge.

Für unidirektionale Schreib- oder Lesevorgänge können Sie I2CMaster_Write oder I2CMaster_Read aufrufen. Dies ist die einfachste Möglichkeit, Vorgänge auf einer I2C-master-Schnittstelle auszuführen, da sie nur einen Vorgang angibt und die Adresse des untergeordneten Geräts in den Funktionsaufruf einschließt.

Sie können I2CMaster_WriteThenRead aufrufen, um einen kombinierten Schreib- und dann Lesevorgang in einer einzelnen Bustransaktion ohne Unterbrechung einer anderen Transaktion auszuführen.

Für die Interoperabilität mit einigen POSIX-Schnittstellen können Sie POSIX-Funktionen lesen(2) und schreiben(2) aufrufen, um unidirektionale Transaktionen auszuführen. Sie müssen I2CMaster_SetDefaultTargetAddress aufrufen, um die Adresse des untergeordneten Geräts festzulegen, bevor Sie read(2) oder write(2) aufrufen.

Sie können diese Funktionen aufrufen, um 0-Byte-Schreibvorgänge auszuführen, um das Vorhandensein eines untergeordneten Geräts zu überprüfen. Wenn ein Lese- oder Schreibvorgang fehlschlägt, muss Ihre Anwendung die erneute Ausgabe der Anforderung verarbeiten.

Schließen der I2C-Schnittstelle

Zum Schließen der Schnittstelle müssen Sie die POSIX-Standardfunktion close() aufrufen.

MT3620-Unterstützung

In diesem Abschnitt werden die I2C-Optionen beschrieben, die nur beim Ausführen von Azure Sphere auf dem MT3620 gelten.

Die I2C-Spezifikationen für den MT3620-Chip sind im MT3620-Supportstatus aufgeführt. Im Benutzerhandbuch des MT3620-Entwicklungsboards werden das Pinlayout und die Funktionen für die Verdrahtung beschrieben.

Der Ordner HardwareDefinitions im Installationsverzeichnis des Microsoft Azure Sphere SDK enthält Definitionen für allgemeine Azure Sphere-Entwicklungsboards, -Module und -Chips. Sie enthält Header- und JSON-Dateien, die die master Schnittstellen für mt3620, MT3620 RDB und andere MT3620-Hardware definieren. Der Standardspeicherort für den Ordner HardwareDefinitions ist C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions unter Windows und /opt/azurespheresdk/HardwareDefinitions unter Linux.

  • Wenn Sie das MT3620-Entwicklungsboard konfigurieren, können Sie einen beliebigen ISU-Port als I2C-master-Schnittstelle verwenden. Wenn Sie einen ISU-Port als I2C-master-Schnittstelle verwenden, können Sie nicht denselben Port wie eine SPI- oder UART-Schnittstelle verwenden.
  • Untergeordnete 10-Bit-Geräteadressen werden auf dem MT3620 nicht unterstützt. nur 7-Bit-Adressen werden unterstützt.
  • Der MT3620 unterstützt 100 KHz, 400 KHz und 1 MHz Busgeschwindigkeiten, aber nicht 3,4 MHz.
  • 0-Byte-I2C-Lesevorgänge werden auf dem MT3620 nicht unterstützt.
  • Bei Verwendung von I2C in einer allgemeinen Anwendung werden nur die SCL- und SDA-Pins im ISU-Peripherieblock vom I2C-Peripheriegerät verwendet, und die anderen Pins können von derselben allgemeinen Anwendung als GPIOs verwendet werden. Eine Liste der nicht verwendeten ISU-Pins, die für GPIO wiederverwendet werden können, finden Sie unter E/A-Peripheriegeräte .