Opis
Obecnie większość systemów Linux jest wyposażona w te polecenia. Jeśli jakikolwiek system nie ma tych poleceń, można je skompilować dla samego systemu. Kompilacja samego systemu można wykonać tylko wtedy, gdy dostępny jest obiekt kompilatora. Jeśli kompilator nie jest dostępny, należy je skompilować. Kod źródłowy tych narzędzi to open source, a kroki kompilacji są tak samo jak w przypadku innych narzędzi Linux.
Powszechnie używane polecenia dostępne w pakiecie i2c-tools to: I2CDETECT, I2CDUMP, I2CGET, I2CSET, I2CTRANSFER. Omówmy szczegółowo te polecenia.
I2CDETECT
To polecenie służy do wykrywania i wyświetlania wszystkich dostępnych autobusów I2C i znanych Linux.
W systemie może być wiele kontrolerów/autobusów I2C, a wszystkie autobusy można wymienić za pomocą polecenia I2CDETECT. Przykładem użycia I2CDETECT to: I2CDETECT -L
To polecenie podaje poniższe wyjście w jednym systemie:
[root] $ i2cDetect -l
I2C-1 I2C 0B234500.Adapter I2C-BUS I2C
I2C-2 I2C 0B234580.Adapter I2C-BUS I2C
I2C-0 I2C 0B234580.Adapter I2C-BUS I2C
I2C-5 I2C 0B234500.Adapter I2C-BUS I2C
[root] $
W powyższym wyjściu możemy zobaczyć, że kiedy wykonujemy to polecenie z opcją -l. W wyjściu widzimy, że dostępne są 4 autobusy i znane Linux. 0, 1, 2 i 5 to liczba autobusów przypisana przez jądro Linux. Są to liczby potrzebne w innych operacjach poleceń.
Więcej informacji na temat wszystkich niewolników podłączonych do określonego autobusu można również zapytać o to polecenie. Na przykład, jeśli chcemy uzyskać szczegóły w Bus nr 0, możemy wydać polecenie jako i2cget -y 0.
Wyjście polecenia w naszym systemie to:
[root] $ i2cDetect -y 0
0 1 2 3 4 5 6 7 8 9 A B C D E F
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 - - - - - 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 - 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[root] $
Jak widać w powyższych dziennikach, w autobusie jest 4 niewolników. Adres niewolników tych urządzeń niewolniczych I2C w autobusie 0 to 0x30, 0x36, 0x50, 0x52. Ten adres niewolnika I2C jest również potrzebny dla poleceń I2Cget, I2Cget, I2CDump.
i2cget
I2Cet może być używany do odczytania urządzenia niewolnika I2C. Każdy wewnętrzny czytelny adres można odczytać za pomocą polecenia I2Cget. Przykładowe użycie tego polecenia można wykazać za pomocą instancji, powiedzmy, że chcemy odczytać adres przesunięcia/wewnętrznego jako 0x0 urządzenia niewolnika i2C z adresem niewolników (0x50) w magistrali nr 0. Dzienniki operacji z urządzenia to:
[root] $ i2cget -y 0 0x50 0
0x23
[root] $
W dziennikach wyjściowych. Widzimy dane z przesunięcia 0 to 0x23. W podobny sposób to polecenie można użyć do odczytu dowolnego urządzenia niewolnika w dowolnej magistrali I2C lub dowolnym wewnętrznym adresie urządzenia niewolnika I2C.
I2CSet
Komenda I2Cet może być używana do zapisywania danych pod dowolnym określonym wewnętrznym adresem urządzenia niewolnika I2C. Wewnętrzny adres urządzenia I2C powinien być zapisany. Operacja zapisu I2C może być chroniona na poziomie urządzenia lub dowolny adres wewnętrzny może być zapisu. Przy wszystkich zapisach polecenie I2CSet może zaktualizować urządzenie.
Przykładowe użycie polecenia, weźmy przykład zapisania wartości danych 0x12 do urządzenia niewolnika RTC z adresem niewolnika 0x68 w przesunięciu 0x2. Wykazamy operację zapisu w następującej sekwencji:
1.Przeczytaj urządzenie za przesunięcie 0x2.
[root] $ i2cget -y 1 0x68 0x2
0x14
[root] $
2.Napisz 0x12 w przesunięciu 0x2 urządzenia niewolnika 0x68
[root] $ i2cset -y 1 0x68 0x2 0x12
[root] $
3.Odczytaj urządzenie za przesunięcie 0x2 i sprawdź, czy dane powinny wynosić 0x12.
[root] $ i2cget -y 1 0x68 0x2
0x12
[root] $
Powyższe przykładowe kroki/wyjście w polu pokazuje operację zapisu na urządzeniu niewolniczym I2C. Podobne kroki można wykonać, aby zapisać dowolne dane do urządzenia Slave I2C. Adres niewolnika, dane lub numer magistrali można zmienić zgodnie z systemem i potrzebą.
I2CDUMP
Komenda I2CDUMP może być używana do zrzucania danych z dowolnego urządzenia niewolnika I2C. Tylko wejście potrzebne do wykonania tego polecenia jest numer magistrali I2C, adres niewolnika. Zakres adresu można również określić za pomocą polecenia. Weźmy przykład czytania bajtów od przesunięcia 0x0 do 0xf i.mi., Pierwsze 16 bajtów.
[root] $ i2cdump -y -r 0x0-0xf 1 0x68
Brak określonego rozmiaru (za pomocą dostępu do bajtów)
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
00: 58 29 12 06 08 10 21 00 00 00 00 00 00 00 18 00 x)????!… ?.
[root] $
Adres zakresu jest opcjonalny, jeśli ten zakres nie jest domyślnie określony, zrzuca pierwsze bajty 0xff. I.mi., 256 bajtów.
i2ctransfer
Polecenie I2CTRANSFER jest bardzo przydatne i może być używane do odczytu lub zapisu wielu bajtów w tym samym poleceniu.
I2CTRANSFER, aby odczytać 14 bajtów z 0ffset 0x2, polecenie będzie następujące:
[root] $ i2ctransfer -y 1 w1@0x68 2 r14
0x12 0x06 0x08 0x10 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x0000
[root] $
I2Ctransfer do zapisu 2 bajtów danych 0x10, 0x16 W przesunięciu 0x1 i 0x2, polecenie będzie następujące:
[root] $ i2ctransfer -y 1 w3@0x68 1 0x10 0x16
[root] $
Odczyt; Aby potwierdzić dane zapisu:
[root] $ i2ctransfer -y 1 w1@0x68 1 r2
0x10 0x16
[root] $
Powyższe przykłady wykazały użycie I2Ctransfer z instancją. Za pomocą tego użycia można łatwo wykonać kolejne przypadki użycia. Każde urządzenie niewolników i dowolny adres wewnętrzny można odczytać za pomocą tego polecenia.
Co jeśli urządzenie niewolnika jest 2-bajtowe adresowalne?
Istnieje kilka urządzeń niewolniczych I2C, w szczególności urządzenie EEPROM, które są 2 bajtowe. Transfer I2C zapewnia łatwiejszy sposób dostępu do urządzenia w takim scenariuszu. Jeśli to urządzenie, chcemy uzyskać dostęp do i2cget/i2cset, musimy rozważyć adres 2 bajtów.
Mam ze sobą urządzenie EEPROM, które jest 2-bajtowe. Obserwujmy i2cget/i2cset z EEPROM, a następnie będziemy obserwować I2Ctransfer:
Postaramy się odczytać bajt z offset 0. Spróbujemy z tym samym poleceniem, jak omówiono w poprzedniej sekcji i2cget i.mi., Poleceniem będzie: i2cget -y 1 0x50 0
[root] $ i2cget -y 1 0x50 0
0xff
[root] $
Widzimy, że zwrócone dane to 0xff, dlatego to nie są prawidłowe dane.
Aby z powodzeniem odczytać z offset 0, musimy najpierw napisać 2-bajtowy adres z poleceniem i2cset. To jest sposób na odczyt danych z 2 bajtowych urządzeń. Przykładowy użycie:
[root] $ i2cset -y 1 0x50 0x0 0x0
[root] $ i2cget -y 1 0x50
0x45
[root] $
W poleceniu I2CSet musimy napisać 2-bajtowy adres EEPROM. Dwa 0 After Slave Adres 0x50 to wewnętrzny adres EEPROM jako 0x0000.
Następnie, jeśli przeczytamy dane z i2Cget, otrzymamy prawidłowe dane. W naszym przykładzie widzimy to 0x45. Wcześniej było to 0xff, co jest nieprawidłowym danymi.
I2Ctransfer w 2-bajtowym urządzeniu adresowym
I2CTRANSFER może dostarczyć danych to samo polecenie. Rozważ ten ten przykład użycia, co i2cget/i2cset jak powyżej.
[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x0 R1
0x45
[root] $
Za pomocą tego polecenia możemy odczytać dane w przesunięciu 0000. Zauważ, że musimy napisać adres wewnętrzny po podzieleniu na 2 bajty.
Kolejny przykład, czytając 16 bajtów z offset 0x0000:
[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x0 R16
0x45 0x41 0x3d 0x41 0x41 0x42 0x42 0x43 0x43 0x44 0x44 0x44 0x45 0x45 0x30 0x0a
[root] $
Jeszcze jeden przykład do przeczytania 4 bajtów z przesunięcia 0x0004:
[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x4 r4
0x41 0x42 0x42 0x43
[root] $
Ten przykład można zweryfikować za pomocą poprzedniej operacji odczytu, w której odczytowaliśmy 16 bajtów z przesunięcia 0000. Teraz przeczytaliśmy podzbiór. Jeśli porównamy wyniki tej operacji odczytu i weryfikujemy z poprzednim, wyniki dokładnie pasują. Dlatego możemy stwierdzić, że ta lektu.
Wniosek
Omówiliśmy pakiet narzędzi I2C w Linux. Różne polecenia są dostępne w tym pakiecie i2c-tools. Niektóre specjalne przypadki użycia, takie jak adresowanie 2-bajtowe, jak używać poleceń w tych specjalnych scenariuszach. Wiele przykładów, które do tej pory widzieliśmy. Potwierdziliśmy wszystkie polecenia funkcjonujące z przykładem i demonstracjami. I2CSet, I2Cget, I2CDump, I2CDetect i I2Ctransfer to polecenia pakietu i2c -tools.