Uživatelské nástroje

Nástroje pro tento web

Tento překlad je starší než originální stránka a nejspíše i zastaralý. Zobrazit změny.
Překlady této stránky?:

cs:i2c

Toto je starší verze dokumentu!


Sběrnice I²C ve stavebnici MLAB

Sběrnice I²C, nebo také TWI je velmi rozšířená elektronická sběrnice určená pro nízko rychlostní komunikaci mezi různými periferiemi. V případě stavebnice MLAB je to nejčastěji komunikace mezi mikroprocesorem a čidly. Existuje od ní také varianta SMUus, která je její podmnožinou. Avšak obsahuje i definici timeoutů a Packet Error Checking, proto je v jistém smyslu robustnější, než I2C.

Avšak díky novým možnostem ve výpočetní technice lze sběrnici použít i pro komunikaci s čidly přímo z Linuxového systému. Navíc v případě použití některého adaptéru na I2C lze tuto sběrnici připojit i ke klasickému PC

Spojování I²C zařízení

I2C je sbernice původně určená k propojování zařízení na malé vzdálenosti. (Původně na rozměru plošných spojů). Avšak s použitím vhodných technik je možné její rozsah zvětšit na řádově desítky metrů. (Použití na delší vzdálenosti nemusí být bezpečné, protože delší vodiče se může snadno indukovat elektrostaticky a elektromagnaticky vysoké napětí, které poškodí připojená zařízení) Přesná vzdálenost na kterou lze I2C používat je proto dána především prostředím ve kterém sběrnici používáme a také požadovanou spolehlivostí výsledného systému.

V MLABu je spojování I2C zařízení řešeno na několika úrovních podle zvoleného rozsahu sítě. Lokálně (v rozsahu několika metrů) jsou moduly spojovány přímo MLAB kablíky. A oddělovány modulem i2chub, tímto modulem je také řešen převod mezi logickými úrovněmi 3,3V a +5V.

Na rozsáhlejší vzdálenosti je sběrnice vedena stíněnými signálními kabely na koncích opatřenými dutinkami zapojenými do modulu uniserial. Tento modul obsahuje i velmi základní ochranu proti přepětí. Hlavně je ale přestupním mechanickým můstkem mezi „externí těžkou kabeláží“ a interním jemným zapojením přístrojů.

Pro rozsáhlé sítě je I²C nahrazeno jinou fyzickou vrstvou (CAN, Ethernet), která propojuje jednotlivé I2C síťové segmenty.

Konvertory pro připojení I²C k PC

I²C je velmi rozšířená sběrnice vhodná pro připojování nejrůznějších čidel na krátké vzdálenosti. Avšak není obvyklé, aby byla vyvedena na běžných počítačích a dostupná tak k přímému použití. 1)

USB rozhraní

Proprietární konstrukce jako:

Mají společný problém s kvalitou driverů. Navíc i2c-tiny-usb nesplňuje úplně I²C specifikaci a už vůbec ne USB physical layer specifikaci a jeho nejvyšší komunikační rychlost je 50 Kbps. Nicméně v MLABu jsou tyto konstrukce nahrazeny zařízením I2C AVR USB, což je ekvivalent konstrukce i2c-tiny-usb ale postavené modulů MLAB. Alternativou je také nedokončená konstrukce Konvertor I²C na USB s PIC.

USB HID

Pro připojení bez nutnosti použití driverů určených pro specifický hadrware je možné použít specifikaci USB HID. V MLABu tuto specifikaci splňuje modul USBI2C01A, který lze ovládat například přes Python a HIDAPI. viz níže.

UART/RS232 na I2C

NXP vyrábí konvertor UART na I²C SC18IM700IPW. Tento obvod by mohl být základem pro konstrukci dalšího konverzního modulu.

Ethernet na I2C

Pomocí modulů ETH01A a STM32F10xRxT01A, lze zkonstruovat konvertor Ethernet - I²C. A ten následně ovládat softwarovým balíkem Pymlab. Viz Python níže.

Použití I²C v systému Linux

Pro Ubuntu existuje balík nástrojů pro práci se sběrnicí I²C. Nainstalujeme jej přes:

sudo apt-get install i2c-tools

Jádro však obvykle nemá instalovaný modul i2c-dev 2), přidáme jej proto do systému:

sudo modprobe i2c-dev

Příkaz modprobe přidá modul pouze do běžící instance jádra. Po rebootu nám tento modul pravděpodobně bude chybět. Pokud nechceme modprobe používat i po následujícím startu počítače, tak do souboru /etc/modules přidáme řádek:

i2c-dev  

Nyní již můžeme vypsat dostupné I²C sběrnice v systému:

$ sudo i2cdetect -l
i2c-0	i2c       	i915 gmbus ssc                  	I2C adapter
i2c-1	i2c       	i915 gmbus vga                  	I2C adapter
i2c-2	i2c       	i915 gmbus panel                	I2C adapter
i2c-3	i2c       	i915 gmbus dpc                  	I2C adapter
i2c-4	i2c       	i915 gmbus dpb                  	I2C adapter
i2c-5	i2c       	i915 gmbus dpd                  	I2C adapter
i2c-6	i2c       	i2c-tiny-usb at bus 001 device 030	I2C adapter

Pomocí programu i2cdetect pak můžeme prohledat sběrnici I²C například na počítači Odroid-X2, který má I²C vyvedené na GPIO konektor.

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

Vidíme, že kromě systémového zařízení s adresou 0x10 máme na sběrnici připojená ještě dvě zařízení 0x1e (MAG01A) a 0x70 (I2CHUB02A).

Komunikace s I²C zařízeními

Pro ovládání sběrnice mohou být využity buď systémová rozhraní v jádře operačního systému.

A nebo servisní utility z balíku i2c-tools, přes které lze sběrnici přímo ovládat:

$ apropos i2c
i2cdetect (8)        - detect I2C chips
i2cdump (8)          - examine I2C registers
i2cget (8)           - read from I2C/SMBus chip registers
i2cset (8)           - set I2C registers

Zápis

Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení i2chub, protože jde o trochu specifický IO s jedním registrem, který se neadresuje. Data se proto zapisují přímo:

~$ sudo i2cset -y -r  1 0x70 0x05
Value 0x05 written, readback matched

Tímto provedeme aktivaci všech I2C kanálů na I2CHubu 3)

Čtení

Čtení z I2Chub se provádí opět atypicky, neboť se neadresuje datový registr:

:~$ sudo i2cget -y 1 0x70 
0x05

Ostatní operační systémy

V jiných operačních systémech, jako Windows či MAC OS, kde nemůžeme nebo nechceme využít podporu I²C rozhraní v jádře, můžeme použít pro ovládaní I2C prostředí jazyka Python, který je multiplatformní a běží na všech známých OS.

MLAB I²C Python framework

Jde o softwarový balík, který umožňuje vytvářet senzorovou síť z I²C čidel a modulů I2Chub02A, které slouží jako routovací body pro čidla, která nemohou být na jedné sběrnici. Víc informací vizpyMLAB na Githubu.

Princip funkce spočívá v definování struktury sítě a adres jednotlivých nódů ve zdrojovém souboru ovládacího programu, pak lze ke všem bodům v síti přistupovat pomocí jednoduchých příkazů jazyka Python.

Výsledkem je možnost testovat a demonstrovat všechna nová čidla a zařízení. Bez nutnosti udržovat aktuální všechny specifické zdrojové kódy pro používané MCU. Lze tak dosáhnout nezávislosti na aktuálně používaných mikrokontrolérech, protože v blízké době by mělo být možné z Pythonu generovat program pro různé platformy.

Pokud však potřebujeme na sběrnici přistupovat přes rozhraní USB pomocí modulu USBI2C01A, tak je potřeba nainstalovat balík s hidapi a další nástroje. Viz stránka tohoto modulu . Instalaci samotného softwarového balíku pymlab pak provedeme snadno pomocí:

sudo easy_install pymlab

nebo

sudo pip install pymlab

Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je pymlab zařazen.

V některých případech dochází k instalaci staré verze balíku pymlab. Chybná verze je 0.1, která nefunguje s modulem usbi2c. Nová verze je 0.2 je potřeba to zkontrolovat během instalace.

Tím by se měly stáhnout i balíky se kterými pymlab pracuje, jako je například cython-hidapi v pythonu označovaný pouze jako modul hid. Nenainstaluje se alelibusb. To stále musíme provést ručně pomocí:

sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus cython 

Rozšíření iPython

Vhodným řešením pro testová použít interaktivní prostředí iPython, kde můžeme přímo interaktivně zkoušet jednotlivé části kódu a zpracovávat data.

Jeho základní instalace se v Ubuntu provede instalací těchto balíků:

sudo apt-get install ipython-notebook python-scipy python-numpy

Pak již můžeme iPython spustit z příkazového řádku

ipython notebook --pylab inline

Pro přímý přístup ke sběrnici I²C bez sudo je třeba být ve skupině i2c:

sudo adduser kaklik i2c

Poznámka: Pro seznámení se s jazykem Python můžete využít Zenovou školu Pythonu od Zdeňka Janáka.

Python interpreter pro ARM STM32

Pro použití Python frameworku na vyčítání čidel by bylo potřeba na stm32f10xrxt zprovoznit Python interpretr. Řešením by ale mohl být Python on a chip.

Související stránky

3)
je potřeba si dat pozor aby na nekterych kanalech nebyla zařízení se stejnou adresou, v takovém případě dojde ke kolizi a k zablokování sběrnice. Následně je pak potřeba provést reset odpojením napájení nebo RESET pinem na I2CHUB modulu.
cs/i2c.1407939572.txt.gz · Poslední úprava: 2014/08/13 14:19 (upraveno mimo DokuWiki)