Uživatelské nástroje

Nástroje pro tento web


cs:i2c

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
cs:i2c [2014/07/05 09:04] – [Použití I²C v systému Linux] kaklikcs:i2c [2022/09/02 21:20] (aktuální) – [Použití I²C v systému Linux] kaklik
Řádek 1: Řádek 1:
 ====== Sběrnice I²C ve stavebnici MLAB ====== ====== Sběrnice I²C ve stavebnici MLAB ======
  
-[[http://cs.wikipedia.org/wiki/I%C2%B2C|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 [[http://cs.wikipedia.org/wiki/System_Management_Bus|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.+[[http://cs.wikipedia.org/wiki/I%C2%B2C|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 [[http://cs.wikipedia.org/wiki/System_Management_Bus|SMBus]], 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(([[http://www.nxp.com/documents/user_manual/UM10204.pdf|Specifikace sběrnice I²C]])).
  
 Avšak díky[[cs:arm| 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 [[cs:usbi2c|adaptéru na I2C]] lze tuto sběrnici připojit i ke klasickému PC Avšak díky[[cs:arm| 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 [[cs:usbi2c|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ů(( [[http://cladlab.com/electronics/circuit-design/communication-protocols/i2c-protocol#gallery|I2C Transmission Distances And Buffer’s]] )). (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 [[cs: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 [[cs: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. 
 +
 +
 +==== Programový balík Pymlab ====
 +
 +Jde o softwarový balík, který umožňuje vytvářet síť z I²C zařízení a modulů, které slouží jako routovací body. 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.
 + 
 +Instalaci samotného softwarového balíku [[cs:pymlab|pymlab]] pak provedeme snadno pomocí: 
 +
 +  sudo pip install pymlab
 +
 +V případě, že již nějakou starší verzi pymlab máme nainstalovanou, tak stačí spustit: 
 +
 +  sudo pip install --upgrade pymlab
 +
 +Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je [[https://pypi.python.org/pypi/pymlab/0.2|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 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 
 +
  
 ===== Konvertory pro připojení I²C k PC ===== ===== Konvertory pro připojení I²C k PC =====
Řádek 18: Řádek 49:
  
 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 [[cs:i2c_avr_usb|I2C AVR USB]], což je ekvivalent konstrukce i2c-tiny-usb ale postavené modulů MLAB. Alternativou je také nedokončená konstrukce [[cs:i2c-pic-usb|Konvertor I²C na USB s PIC]]. 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 [[cs:i2c_avr_usb|I2C AVR USB]], což je ekvivalent konstrukce i2c-tiny-usb ale postavené modulů MLAB. Alternativou je také nedokončená konstrukce [[cs:i2c-pic-usb|Konvertor I²C na USB s PIC]].
 +
 +==== Linux kernel device ====
 +
 +V současné době existují dva obvody, které mají podporu v linuxovém kernelu: 
 +
 +  * [[cs:usbi2c|CP2112]] - Implementován v MLABU. 
 +  * [[https://www.microchip.com/wwwproducts/en/MCP2221|MCP2221]] - Podpora zřejmě až v novém kernelu 5.x. 
 +
 +
  
 ==== USB HID ==== ==== USB HID ====
  
 Pro připojení bez nutnosti použití driverů určených pro specifický hadrware je možné použít specifikaci [[http://en.wikipedia.org/wiki/USB_human_interface_device_class|USB HID]]. V MLABu tuto specifikaci splňuje modul [[cs:usbi2c|USBI2C01A]], který lze ovládat například přes Python a HIDAPI. viz níže.  Pro připojení bez nutnosti použití driverů určených pro specifický hadrware je možné použít specifikaci [[http://en.wikipedia.org/wiki/USB_human_interface_device_class|USB HID]]. V MLABu tuto specifikaci splňuje modul [[cs:usbi2c|USBI2C01A]], který lze ovládat například přes Python a HIDAPI. viz níže. 
 +
 +
  
 ==== UART/RS232 na I2C ==== ==== UART/RS232 na I2C ====
Řádek 32: Řádek 74:
 ===== Použití I²C v systému Linux ===== ===== 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: +Pro Ubuntu existuje [[https://github.com/MLAB-project/i2c-tools| balík nástrojů]] pro práci se sběrnicí I²C. Nainstalujeme jej přes: 
   sudo apt-get install i2c-tools   sudo apt-get install i2c-tools
      
-Jádro však obvykle nemá instalovaný modul //i2c-dev// (([[https://i2c.wiki.kernel.org/index.php/Main_PageLinux I²C Subsystem]])), přidáme jej proto do systému: +V případě, že ve zvolené aplikaci potřebujeme i instrukce write_i2c_block a read_i2c_block, tak je potřeba nainstalovat [[https://github.com/MLAB-project/i2c-tools upravenou verzi i2c-tools]].  
-  sudo modprobe i2c-dev +  
- +
-<WRAP tip>   +
-Příkaz modprobe přidá modul pouze do běžící instance jádraPo 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   +
-</WRAP> +
 Nyní již můžeme vypsat dostupné I²C sběrnice v systému: Nyní již můžeme vypsat dostupné I²C sběrnice v systému:
  
Řádek 53: Řádek 89:
   i2c-5 i2c        i915 gmbus dpd                  I2C adapter   i2c-5 i2c        i915 gmbus dpd                  I2C adapter
   i2c-6 i2c        i2c-tiny-usb at bus 001 device 030 I2C adapter   i2c-6 i2c        i2c-tiny-usb at bus 001 device 030 I2C adapter
 +
 +Může se všák stát, ze jádro nemá instalovaný modul //i2c-dev// (([[https://i2c.wiki.kernel.org/index.php/Main_Page| Linux I²C Subsystem]])), přidáme jej proto do systému:
 +  sudo modprobe i2c-dev
 +
 +<WRAP tip>  
 +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  
 +</WRAP>
 +
  
 Pomocí programu  //i2cdetect// pak můžeme prohledat sběrnici I²C například na počítači [[cs:odroid-x2|Odroid-X2]], který má I²C vyvedené na GPIO konektor. Pomocí programu  //i2cdetect// pak můžeme prohledat sběrnici I²C například na počítači [[cs:odroid-x2|Odroid-X2]], který má I²C vyvedené na GPIO konektor.
Řádek 86: Řádek 131:
 Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení [[cs:i2chub]], protože jde o trochu specifický IO s jedním registrem, který se neadresuje. Data se proto zapisují přímo: Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení [[cs: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 +  ~$ sudo i2cset -y -r  1 0x70 0xff 
-  Value 0x05 written, readback matched+  Value 0xff written, readback matched
  
 Tímto provedeme aktivaci všech I2C kanálů na I2CHubu ((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.))  Tímto provedeme aktivaci všech I2C kanálů na I2CHubu ((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.)) 
Řádek 96: Řádek 141:
  
   :~$ sudo i2cget -y 1 0x70    :~$ sudo i2cget -y 1 0x70 
-  0x05+  0xff
  
 +==== Použití modulů jádra ====
  
-===== Ostatní operační systémy =====+Některá I²C zařízení mají přímo ovladače v linuxovém jádře. Je tak možné k těmto zařízením přistupovat přímo prostřednictvím souborového systému. V případě MLABu se to týká těchto modulů: 
  
-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.  +  * [[cs:usbi2c]] 
-==== MLAB I²C Python framework ====+  * [[cs:i2chub]] 
 +  * [[cs:i2cspi]]
  
-Jde o softwarový balík, který umožňuje vytvářet senzorovou síť z I²C čidel a modulů [[cs:i2chub|I2Chub02A]], které slouží jako routovací body pro čidla, která nemohou být na jedné sběrnici. Víc informací viz[[https://github.com/MLAB-project/MLAB-I2c-modules|pyMLAB]] na Githubu.+ProtožI²C není v principu [[http://cs.wikipedia.org/wiki/Plug-and-play|plug-and-play]] sběrnice, tak je třeba o každém připojeném zařízení kernelu explicitně říctObecný postup takového přihlášení připojeného hardwaru probíhá přes příkaz: 
  
-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. +  echo název_driveru i2c_adresa > /sys/bus/i2c/devices/i2c-X/new_device
-  +
-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 [[cs:usbi2c|USBI2C01A]], tak je potřeba nainstalovat balík s hidapi a další nástroje. Viz [[cs:usbi2c|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 [[https://pypi.python.org/pypi/pymlab/0.2|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 [[http://www.tutorialspoint.com/python/|Python]] můžete využít [[http://physics.muni.cz/~janak/pyzen/|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 [[cs:stm32f10xrxt]] zprovoznit Python interpretr. Řešením by ale mohl být [[http://code.google.com/p/python-on-a-chip/|Python on a chip]]. +
  
 +Tím dojde k převzetí kontroly nad I²C zařízením jádrem Linuxu. Ve výpisu i2cdetect můžeme takový stav vidět označený jako UU. Podrobnosti o provedení a úspěšnosti inicializace můžeme pak obvykle najít v [[http://en.wikipedia.org/wiki/Dmesg|dmesg]].
 +===== 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. 
  
 ===== Související stránky ===== ===== Související stránky =====
  
-  * [[cs:usbi2c|USBI2C]] - rozplánovaný modul určený k přímému převodu I2C na USB+  * [[cs:usbi2c]]
   * [[cs:i2c-pic-usb|I2C-PIC-USB]] - Konvertor I²C na USB s PIC   * [[cs:i2c-pic-usb|I2C-PIC-USB]] - Konvertor I²C na USB s PIC
   * [[cs:i2c_avr_usb|I2C-AVR-USB]] - Konvertor I²C na USB s AVR   * [[cs:i2c_avr_usb|I2C-AVR-USB]] - Konvertor I²C na USB s AVR
Řádek 154: Řádek 168:
   * [[cs:odroid-x2]]   * [[cs:odroid-x2]]
   * [[cs:friendlyarm]]   * [[cs:friendlyarm]]
 +  * [[cs:i2chub]]
 +  * [[cs:pymlab]]
 +  * [[cs:i2cspi]]
  
cs/i2c.1404551096.txt.gz · Poslední úprava: 2014/07/05 09:04 (upraveno mimo DokuWiki)