Używanie I2C w aplikacjach wysokiego poziomu
Usługa Azure Sphere obsługuje Inter-Integrated Circuit (I2C) w trybie głównym. I2C to szeregowa magistrala łącząca urządzenia peryferyjne o niskiej prędkości z mikrokontrolerami. I2C korzysta z modelu wielo wzorcowego/wielowładniowego, w którym urządzenie główne steruje zestawem urządzeń podrzędnych. I2C jest często używany z urządzeniami peryferyjnymi, które wymagają tylko prostej lekkiej komunikacji z mikrokontrolerem, takich jak kontrolki ustawień, przełączniki zasilania i czujniki.
Aplikacje mogą uzyskiwać dostęp do urządzeń peryferyjnych za pośrednictwem I2C, wywołując interfejsy API I2C aplikacji Applibs w celu wykonywania operacji na interfejsie głównym I2C. W przykładzie LSM6DS3 I2C opisano sposób konfigurowania sprzętu dla I2C na urządzeniu MT3620 i używania I2C w aplikacji.
Wymagania dotyczące I2C
Aplikacje korzystające z I2C muszą zawierać odpowiednie pliki nagłówków dla I2C i dodać ustawienia I2C do manifestu aplikacji.
Wszystkie aplikacje muszą ustawić sprzęt docelowy i zawierać odpowiedni plik nagłówka definicji sprzętu.
Pliki nagłówków
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
Przed dołączeniem I2C_STRUCTS_VERSION
pliku nagłówka zadeklaruj definicję przedprocesora. Określa to wersję struktury używaną przez aplikację.
Zastąp ścieżkę "path-to-your-target-hardware.h" ścieżką do pliku nagłówka sprzętu.
Ustawienia manifestu aplikacji
Aby korzystać z interfejsów API I2C, należy dodać funkcję I2cMaster
do manifestu aplikacji, a następnie dodać każdy interfejs główny I2C do funkcji. Dzięki temu aplikacja będzie mieć dostęp do interfejsu.
Manifest aplikacji Azure Sphere zawiera więcej szczegółów na temat manifestu aplikacji.
W kodzie użyj stałych zdefiniowanych dla sprzętu, aby zidentyfikować interfejsy I2C. Kompilator przetłumaczy te wartości na wartości raw podczas tworzenia aplikacji.
Na przykład oto fragment manifestu aplikacji, który jest przeznaczony dla tablicy deweloperów odwołań MT3620 (RDB) i konfiguruje dwa główne interfejsy I2C:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
Poniższy fragment przedstawia sposób określania tych samych interfejsów wzorcowych I2C w aplikacji, która jest skierowana do zestawu startowego Avnet MT3620:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Otwieranie interfejsu głównego I2C
Przed wykonaniem operacji na interfejsie głównym I2C należy go otworzyć, wywołując funkcję I2CMaster_Open .
Aktualizowanie ustawień interfejsu głównego I2C
Po otwarciu interfejsu głównego możesz zmienić ustawienia:
- Aby zmienić szybkość magistrali dla operacji na interfejsie głównym, wywołaj I2CMaster_SetBusSpeed
- Aby zmienić limit czasu dla operacji, wywołaj I2CMaster_SetTimeout
Wykonywanie operacji odczytu i zapisu w interfejsie głównym I2C
Usługa Azure Sphere obsługuje kilka opcji wykonywania operacji odczytu i zapisu za pomocą narzędzia I2C. Wszystkie te opcje blokują operacje synchroniczne.
W przypadku operacji zapisu jednokierunkowego lub odczytu możesz wywołać I2CMaster_Write lub I2CMaster_Read. Jest to najprostszy sposób wykonywania operacji na interfejsie głównym I2C, ponieważ określa tylko jedną operację i zawiera adres urządzenia podrzędnego w wywołaniu funkcji.
Możesz wywołać I2CMaster_WriteThenRead , aby przeprowadzić połączony zapis, a następnie wykonać operację odczytu w transakcji pojedynczej magistrali bez zakłóceń w innej transakcji.
W celu współdziałania z niektórymi interfejsami POSIX można wywołać funkcję POSIX read(2) i write(2) do wykonywania transakcji w jedną stronę. Aby ustawić adres urządzenia podrzędnego przed nawiązaniem połączenia z funkcją odczyt(2) lub zapisem(2), musisz zadzwonić do I2CMaster_SetDefaultTargetAddress .
Te funkcje można wywołać w celu wykonywania 0-bajtowych operacji zapisu w celu zweryfikowania obecności urządzenia podrzędnego. Jeśli operacja odczytu lub zapisu zakończy się niepowodzeniem, aplikacja musi obsłużyć ponowne wydanie żądania.
Zamykanie interfejsu I2C
Aby zamknąć interfejs, należy wywołać standardową funkcję POSIX close().
Pomoc techniczna mt3620
W tej sekcji opisano opcje I2C, które mają zastosowanie tylko podczas uruchamiania usługi Azure Sphere na mt3620.
Specyfikacje I2C dla mikroukładu MT3620 są wymienione w sekcji Stan pomocy technicznej MT3620. Podręcznik użytkownika tablicy deweloperów MT3620 opisuje układ pinezki i funkcje okablowania.
Folder HardwareDefinitions w katalogu instalacji zestawu Microsoft Azure Sphere SDK zawiera definicje typowych tablic programistycznych, modułów i mikroukładów Platformy Azure Sphere. Zawiera ona pliki nagłówków i JSON definiujące interfejsy główne bazy danych MT3620, MT3620 RDB oraz inne sprzętowe mt3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
system Windows i /opt/azurespheresdk/HardwareDefinitions
Linux.
- Podczas konfigurowania tablicy deweloperów MT3620 możesz użyć dowolnego portu ISU jako interfejsu głównego I2C. Jeśli używasz portu ISU jako interfejsu głównego I2C, nie możesz użyć tego samego portu co interfejs SPI lub UART.
- 10-bitowe adresy urządzeń podrzędnych nie są obsługiwane na MT3620; obsługiwane są tylko adresy 7-bitowe.
- Mt3620 obsługuje szybkości magistrali 100 KHz, 400 KHz i 1 MHz, ale nie 3,4 MHz.
- 0-bajtowe odczyty I2C nie są obsługiwane na MT3620.
- Podczas korzystania z I2C w aplikacji wysokiego poziomu, tylko SCL i SDA piny w bloku peryferyjnym ISU są używane przez urządzenie peryferyjne I2C, a inne piny mogą być używane jako GPIO przez tę samą aplikację wysokiego poziomu. Zobacz Urządzenia peryferyjne we/wy , aby uzyskać listę nieużywanych pinów ISU, których można używać ponownie dla obiektu GPIO.