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/08/13 16:39] 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í podmnož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
Řádek 23: Řádek 23:
 Instalaci samotného softwarového balíku [[cs:pymlab|pymlab]] pak provedeme snadno pomocí:  Instalaci samotného softwarového balíku [[cs:pymlab|pymlab]] pak provedeme snadno pomocí: 
  
-  sudo easy_install pymlab 
-   
-nebo  
   sudo pip install pymlab   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]]. 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]].
Řádek 48: Řá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 62: Řá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 83: Řá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 116: Řá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 126: Řádek 141:
  
   :~$ sudo i2cget -y 1 0x70    :~$ sudo i2cget -y 1 0x70 
-  0x05+  0xff 
 + 
 +==== Použití modulů jádra ==== 
 + 
 +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ů:  
 + 
 +  * [[cs:usbi2c]] 
 +  * [[cs:i2chub]] 
 +  * [[cs:i2cspi]] 
 + 
 +Protože 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ě říct. Obecný postup takového přihlášení připojeného hardwaru probíhá přes příkaz: 
  
 +  echo název_driveru i2c_adresa > /sys/bus/i2c/devices/i2c-X/new_device
  
 +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 ===== ===== Ostatní operační systémy =====
  
Řádek 135: Řádek 162:
 ===== 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 143: Řádek 170:
   * [[cs:i2chub]]   * [[cs:i2chub]]
   * [[cs:pymlab]]   * [[cs:pymlab]]
 +  * [[cs:i2cspi]]
  
cs/i2c.1407947954.txt.gz · Poslední úprava: 2014/08/13 16:39 (upraveno mimo DokuWiki)