Ośmiokanałowy multiplekser magistrali I2C

Ośmiokanałowy multiplekser magistrali I2C

Multiplekser magistrali I2C będzie przydatny np. wtedy, gdy zachodzi konieczność użycia kilku takich samych układów na jednej magistrali, a nie mają one możliwości fizycznej zmiany adresu. Mogą to być czujniki gazu SGP30, czujniki oświetlenia serii VEML lub sensory parametrów środowiskowych serii BMP. Dzięki uniwersalnym złączom i szerokiemu zakresowi napięć zasilania, układ współpracuje poprawnie z nie tylko z Raspberry Pi ale także z Arduino MKR, STM Nucleo itd.

Podstawowe parametry:
  • szerokiemu zakresowi napięć zasilania 1,8–5,5 V,
  • aktywny kanał (jeden lub kilka) wybierany poprzez bezpośrednią konfigurację jednego rejestru,
  • nie wymaga dodatkowych wyprowadzeń sterujących,
  • na jednej magistrali może współpracować do ośmiu takich układów, co daje możliwość współpracy z 64 układami slave.

Moduł bazuje na układzie multipleksera magistrali I2C typu TCA9548A, którego schemat wewnętrzny został pokazany na rysunku 2. W swojej strukturze układ zawiera ośmiokanałowy multiplekser cyfrowy, którego aktywny kanał (jeden lub kilka) wybierany jest poprzez bezpośrednią konfigurację rejestru i nie wymaga dodatkowych wyprowadzeń sterujących. Dzięki elastycznej adresacji na jednej magistrali może współpracować do ośmiu takich układów, co daje możliwość współpracy z 64 układami slave pozbawionymi możliwości zmiany adresacji, o ile utrzymamy parametry elektryczne magistrali I2C.

Budowa i działanie

Schemat ideowy modułu jest pokazany na rysunku 1. Sygnały magistrali I2C wraz z zasilaniem (3,3 V) dla części cyfrowej doprowadzone są ze złącza GPIO, gdy moduł podłączony jest do Raspberry Pi lub ze złącz I2CA, I2CB w przypadku innych płytek uruchomieniowych.

Rysunek 1. Schemat modułu multipleksera magistrali I2C

Magistrala I2C od strony układu master doprowadzona jest do wejścia multipleksera – wyprowadzenia SC, SDA U1. Linie magistrali wraz z zasilaniem dla układów slave wyprowadzone sa na dwie grupy złącz I2C0...I2C7 (PH 2 mm) i I2C01...I2C67 (szpilkowe 2,54 mm).

Dioda LD sygnalizuje obecność zasilania, rezystory RP1...RP5 podciągają wstępnie magistralę, ich wartość można zoptymalizować w zależności od docelowego napięcia zasilania układu. Zwory A0...A2 umożliwiają zdefiniowanie adresu bazowego TCA9548A pomiędzy 0x70...0x77. Domyślnie na płytce wszystkie ustawione są w stan wysoki (zwarcie do V33), a układ U1 widoczny jest pod adresem 0x77.

Rysunek 2. Schemat wewnętrzny układu TCA9548A

Układ TCA9548A ma tylko jeden 8 bitowy rejestr kontrolny pod ustawionym adresem bazowym, który można odczytywać i zapisywać. Domyślnie po włączeniu zasilania wszystkie magistrale są odłączone i w rejestrze inicjowana jest wartość 0x00. Ustawienie kolejne bitów od B0 do B7 aktywuje klucze odpowiadające magistralom I2C0 do I2C7. Zapis wartości 0x01 wybiera odpowiednio magistralę I2C0, zapis 0x80 magistralę I2C7. TCA9548A umożliwia jednoczesne załączenie kilku magistral, po ustawieniu w rejestrze sterującym odpowiadających im bitów – trzeba zwrócić szczególną uwagę czy taka sytuacja nie doprowadzi do zablokowania lub nie przekroczy dopuszczalnych pojemności obciążenia magistrali.

Montaż i uruchomienie

Moduł został zmontowany na dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 3. Sposób montażu jest klasyczny i nie wymaga opisu. Zmontowany moduł pokazuje fotografia tytułowa. Zamiennie do ukłądu TCA9548A (TI) można zastosować układ PCA9548A (NXP).

Rysunek 3. Schemat płytki PCB

Dla sprawdzenia modułu podłączonego do Raspberry Pi można użyć narzędzia z pakietu i2ctools. Sprawdzamy obecność modułu na magistrali:

pi@raspberrypi:~ $ i2cdetect -y 1, efekt został pokazany na listingu 1.

Listing 1. Sprawdzenie obecności układu na magistrali

pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a  b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Po włączeniu zasilania TCA9548A widoczny jest pod adresem 0x77 i ma odłączone wszystkie wyjścia multipleksera. Aktywny kanał I2C0, wybieramy poleceniem:

pi@raspberrypi:~ $ i2cset -y 1 0x77 0x01

po ponownym skanowaniu magistrali widoczne są wszystkie zainstalowane na module przetworniki dostępne poprzez I2C0 oraz układy dostępne po „pierwotnej” stronie multipleksera – listing 2.

Listing 2. Uaktywniony kanał I2C0

pi@raspberrypi:~ $ i2cset -y 1 0x77 0x01
pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a  b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Aby wybrać drugi kanał I2C1 wykonujemy polecenie:

pi@raspberrypi:~ $ i2cset -y 1 0x77 0x02

i ponownie sprawdzamy magistralę. Tym razem widoczne są czujniki z kanału I2C1. Metoda współpracy z TCA9548A jest bardzo prosta, ale wymaga każdorazowego przełączenia się na odpowiednią magistralę.

Drugą znacznie bardziej efektywną metodą jest użycie sterownika systemowego. W tym celu w pliku config.txt dodajemy linię:

dtoverlay=i2c-mux,pca9548,addr=0x77

Jeżeli mamy ustawiony inny adres zworami A0...A2, to musimy odpowiednio zmodyfikować parametr adrr. Po restarcie systemu poleceniem:

sudo reboot now

powinien zostać uruchomiony driver dla TCA9548A. Magistralę po „wtórnej” stronie multipleksera (i2c-1-mux) są teraz „zmapowane” od i2c-mux-7 do i2cmux-13 i w taki sposób należy odwoływać się do nich w systemie. Sprawdzenie mapowania odbywa się poleceniem:

pi@raspberrypi:~ $ i2cdetect -l

Odpowiedź została pokazana na listingu 3.

Listing 3. Sterowanie układem z użyciem sterownika systemowego

pi@raspberrypi:~ $ i2cdetect -l
i2c-13 i2c i2c-1-mux (chan_id 6) I2C adapter
i2c-1 i2c bcm2835 I2C adapter I2C adapter
i2c-11 i2c i2c-1-mux (chan_id 4) I2C adapter
i2c-8 i2c i2c-1-mux (chan_id 1) I2C adapter
i2c-14 i2c i2c-1-mux (chan_id 7) I2C adapter
i2c-12 i2c i2c-1-mux (chan_id 5) I2C adapter
i2c-9 i2c i2c-1-mux (chan_id 2) I2C adapter
i2c-10 i2c i2c-1-mux (chan_id 3) I2C adapter
i2c-7 i2c i2c-1-mux (chan_id 0) I2C adapter

Mapowanie magistral zależy od konfiguracji Raspberry Pi, poszczególne magistrale mogą mieć nadane inne identyfikatory, sposób użycia pozostaje jednak nie zmieniony. Przykładowo sprawdzenie układów na magistrali I2C3, (chan_id 3) odbywa się poleceniem:

pi@raspberrypi:~ $ i2cdetect -y 10

Adam Tatuś, EP

Wykaz elementów:
Rezystory:
  • RP1…RP5: 4,7 kΩ drabinka rezystorowa SMD CRA06S08
Kondensatory:
  • C1…C4, C8, C9: 4,7 µF SMD0603
  • C5, C7: 0,1 µF SMD0603
Półprzewodniki:
  • LD: dioda LED SMD0805
  • U1: TCA9458APWR (TSSOP24)
Inne:
  • A0…A2: zwora SMD0603
  • GPIO: złącze IDC żeńskie
  • I2C0, I2C1…I2C7: złącze PH 2 mm 4 piny proste
  • I2C01, I2C23, I2C45, I2C67: złącze IDC kątowe męskie 2×4 piny 2,54 mm
  • I2CA: złącze SIP proste męskie 1×4 piny 2,54 mm
  • I2CB: złącze JST 1 mm 4 piny kątowe
Artykuł ukazał się w
Elektronika Praktyczna
październik 2021
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów