Toto je starší verze dokumentu!
Obsah
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í podmonž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
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
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. 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 ale samo libusb. 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
- USBI2C - rozplánovaný modul určený k přímému převodu I2C na USB
- I2C-PIC-USB - Konvertor I²C na USB s PIC
- I2C-AVR-USB - Konvertor I²C na USB s AVR