Dela via


Använda I2C i program på hög nivå

Azure Sphere stöder Inter-Integrated-krets (I2C) i huvudläge. I2C är en seriebuss som ansluter kringutrustning med lägre hastighet till mikrokontroller. I2C använder en modell med flera master/en underordnad modell där en huvudenhet styr en uppsättning underordnade enheter. I2C används ofta med kringutrustning som endast kräver enkel lätt kommunikation med en mikrostyrenhet, till exempel inställningskontroller, strömbrytare och sensorer.

Program kan komma åt kringutrustning via I2C genom att anropa Applibs I2C-API:er för att utföra åtgärder i ett I2C-huvudgränssnitt. I exemplet LSM6DS3 I2C beskrivs hur du konfigurerar maskinvaran för I2C på en MT3620-enhet och använder I2C i ett program.

Krav för I2C

Program som använder I2C måste innehålla lämpliga huvudfiler för I2C och lägga till I2C-inställningar i programmanifestet.

Alla program måste ange målmaskinvara och inkludera motsvarande rubrikfil för maskinvarudefinition.

Rubrikfiler

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

Deklarera förprocessordefinitionen I2C_STRUCTS_VERSION innan rubrikfilen inkluderas. Detta anger den struct-version som används av programmet.

Ersätt "path-to-your-target-hardware.h" med sökvägen till huvudfilen för maskinvaran.

Inställningar för programmanifest

Om du vill använda I2C-API:erna måste du lägga till I2cMaster funktionen i programmanifestet och sedan lägga till varje I2C-huvudgränssnitt i funktionen. Det gör att programmet kan komma åt gränssnittet. Azure Sphere-programmanifestet innehåller mer information om programmanifestet.

Använd konstanterna som har definierats för maskinvaran i koden för att identifiera I2C-gränssnitten. Kompilatorn översätter dessa värden till raw-värden när du skapar appen.

Här är till exempel ett utdrag från ett programmanifest som riktar in sig på en MT3620-referensutvecklingstavla (RDB) och konfigurerar två I2C-huvudgränssnitt:

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

Följande utdrag visar hur du anger samma I2C-huvudgränssnitt i ett program som riktar sig till Avnet MT3620 Starter Kit:

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

Öppna ett I2C-huvudgränssnitt

Innan du utför åtgärder i ett I2C-huvudgränssnitt måste du öppna det genom att anropa funktionen I2CMaster_Open .

Uppdatera inställningarna för ett I2C-huvudgränssnitt

När du har öppnat huvudgränssnittet kan du ändra inställningarna:

Utföra läs- och skrivåtgärder i I2C-huvudgränssnittet

Azure Sphere har stöd för flera alternativ för att utföra läs- och skrivåtgärder med I2C. De här alternativen är alla blockerande, synkrona åtgärder.

För enkelriktade skriv- eller läsåtgärder kan du anropa I2CMaster_Write eller I2CMaster_Read. Det här är det enklaste sättet att utföra åtgärder på ett I2C-huvudgränssnitt eftersom det bara anger en åtgärd och den innehåller adressen till den underordnade enheten i funktionsanropet.

Du kan ringa I2CMaster_WriteThenRead för att utföra en kombinerad skrivning och sedan läsa åtgärden i en enda busstransaktion utan avbrott från en annan transaktion.

För interoperabilitet med vissa POSIX-gränssnitt kan du anropa POSIX-läsfunktioner(2) och skrivfunktioner(2) för att utföra enkelriktade transaktioner. Du måste ringa I2CMaster_SetDefaultTargetAddress för att ange adressen till den underordnade enheten innan du ringer read(2) eller write(2).

Du kan anropa de här funktionerna för att utföra 0 byte-skrivåtgärder för att verifiera närvaron av en underordnad enhet. Om en läs- eller skrivåtgärd misslyckas måste programmet hantera att skicka begäran igen.

Stänga I2C-gränssnittet

Om du vill stänga gränssnittet måste du anropa posix-standardfunktionen close().

MT3620-support

I det här avsnittet beskrivs de I2C-alternativ som bara gäller när du kör Azure Sphere på MT3620.

I2C-specifikationerna för MT3620-kretsen anges i MT3620-supportstatus. Användarhandboken för utvecklingstavlan för MT3620 beskriver pin-layouten och funktionerna för ledningar.

Mappen HardwareDefinitions i installationskatalogen Microsoft Azure Sphere SDK innehåller definitioner för vanliga azure sphere-utvecklingstavlor, moduler och kretsar. Den innehåller rubrik- och JSON-filer som definierar huvudgränssnitten för MT3620, MT3620 RDB, tillsammans med annan MT3620-maskinvara. Standardplatsen för mappen HardwareDefinitions är C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions i Windows och /opt/azurespheresdk/HardwareDefinitions linux.

Azure Sphere Samples-repo på GitHub innehåller rubrik- och JSON-filer som definierar SPI-huvudgränssnitt för MT3620-chipet och MT3620 RDB, tillsammans med annan MT3620-maskinvara.-->

  • När du konfigurerar MT3620 dev board kan du använda valfri ISU-port som ett I2C-huvudgränssnitt. När du använder en ISU-port som I2C-huvudgränssnitt kan du inte använda samma port som ett SPI- eller UART-gränssnitt.
  • 10-bitars underordnade enhetsadresser stöds inte på MT3620. endast 7-bitarsadresser stöds.
  • MT3620 stöder 100 KHz- och 400 KHz- och 1 MHz-busshastigheter, men inte 3,4 MHz.
  • I2C-läsningar med 0 byte stöds inte på MT3620.
  • När du använder I2C i ett program på hög nivå används endast SCL- och SDA-stiften i ISU-kringutrustningsblocket av I2C-kringutrustningen, och de andra stiften kan användas som GPIOs av samma program på hög nivå. I I/O-kringutrustning finns en lista över oanvända ISU-stift som kan återanvändas för GPIO.