Uživatelské nástroje

Nástroje pro tento web


cs:usbi2c

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:usbi2c [2014/08/06 23:36] kaklikcs:usbi2c [Unknown date] (aktuální) – upraveno mimo DokuWiki (Unknown date) 127.0.0.1
Řádek 1: Řádek 1:
-====== Převodník USB na I²C USBI2C01A ======+====== Převodník USB na I²C USBI2C01A ======
  
 [[cs:i2c|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í. (([[http://www.paintyourdragon.com/?p=43|Kromě vyvedení DDC z volného portu pro display.]])) [[cs:i2c|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í. (([[http://www.paintyourdragon.com/?p=43|Kromě vyvedení DDC z volného portu pro display.]]))
Řádek 9: Řádek 9:
 ===== Použití modulu ===== ===== Použití modulu =====
  
-Modul se po připojení k USB chová, jako standardní HID zařízení. Toto chování má výhodu, že teoreticky nepotřebuje žádné speciální ovladače. A s modulem lze komunikovat přímo přes standardní USB HID rozhraní. Některé operační systémy však obsahují programové vybavení pro použití sběrnice I2C/SMBus. V takových případech je výhodné nahradit generický USB HID ovladač speciálním driverem, který tento modul zapojí do systémové sběrnice I2C. +Modul se po připojení k USB chová, jako standardní HID zařízení. Tato vlastnost má výhodu, že teoreticky nepotřebuje žádné speciální ovladače. A s modulem lze komunikovat přímo přes standardní USB HID rozhraní. Některé operační systémy však obsahují programové vybavení pro přímé použití sběrnice I2C/SMBus. V takových případech je výhodné nahradit generický USB HID ovladač speciálním driverem, který tento modul zapojí do systémové sběrnice I2C. 
  
 ==== HIDAPI ==== ==== HIDAPI ====
Řádek 18: Řádek 18:
 === Ubuntu 14.04 === === Ubuntu 14.04 ===
  
-Na počítač, ke kterému převodník připojíme, musíme nejdříve nainstalovat [[https://github.com/signal11/hidapi|hidapi]] a některé další balíky. Od Ubuntu 14.04 to jde jednoduše pomocí: +Na počítač, ke kterému převodník připojíme, musíme nejdříve nainstalovat [[https://github.com/trezor/cython-hidapi|hidapi]] a některé další balíky. Od Ubuntu 14.04 to jde jednoduše pomocí: 
  
-  sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus cython +  sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-pip python-smbus cython 
  
-Dále pak potřebujeme pouze balík Pymlab, jak je zmíněno na stránce [[cs:i2c]].+Dále pak potřebujeme pouze balík [[cs:pymlab|Pymlab]], jak je zmíněno na stránce [[cs:i2c]].
  
   sudo pip install pymlab   sudo pip install pymlab
      
 +== Nastavení USBI2C v pymlabu s HIDAPI ==
 +Převodník USBI2C lze používat s [[cs:pymlab|]].
 +
 +Nastavení může vypadat takto:
 +  
 +  cfg = config.Config(
 +      i2c = {
 +          "device": 'hid',   # nazev ovladace pro USBI2C
 +          "serial": '00A59C5E',   #sériové číslo převodníku, není povinné, pokud používáte jediný převodník
 +          "led": True,    # nastavení LEDek, True - signalizace komunikace, False - signalizace vypnuta
 +      },
 +  
 +      bus = [
 +          { << Dalsi Pymlab zarizezi >>},
 +      ],
 +  )
 +  cfg.initialize()
 +  
 +
 == Příklad blikání LEDkami na USBI2C01A pomocí Pythonu: == == Příklad blikání LEDkami na USBI2C01A pomocí Pythonu: ==
  
Řádek 67: Řádek 86:
 Aby se skript nemusel spouštět s právy roota, je třeba vytvořit v adresáři **/etc/udev/rules.d** soubor SiliconLabs.rules s obsahem: Aby se skript nemusel spouštět s právy roota, je třeba vytvořit v adresáři **/etc/udev/rules.d** soubor SiliconLabs.rules s obsahem:
  
-  SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", MODE="0666" +  SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", GROUP="i2c", MODE="0666" 
-  SUBSYSTEM=="usb_device", ATTRS{idVendor}=="10c4", MODE="0666"+  SUBSYSTEM=="usb_device", ATTRS{idVendor}=="10c4", GROUP="i2c", MODE="0666"
      
-==== Linux Kernel ====+Aby se tato konfigurace stala aktivní, tak je potřeba USB zařízení odpojit a opět připojit.  
 +   
 +=== Windows 8 ===
  
-Linux je případem operačního systému, kde existuje systémové řešení komunikace se sběrnicí I2C, takže je výhodné generický HID ovladač vyměnit za jiný. Zatím ale neexistuje vhodný ovladač integrovaný v jádře, ale vyvíjí se mimo něj. <wrap info> Podle současného vývoje by driver měl být stabilně integrován v jádře 3.15. </wrap> Je proto třeba jej doplnit zavedením softwarového modulu [[https://github.com/MLAB-project/hid-cp2112|hid-cp2112]].+Pokud ve windows jeste nemame, tak stahneme a nainstalujeme [[https://www.python.org/downloads/|Pyhon2.7]]. 
 +Spolecne s nim potrebujeme mit nainstalovany i nastroj pip. V pripade, ze se nenainstaluje spolecne s pythonem (sel by spustit z prikazoveho radku), tak jej musime nainstalovat samostatne, podle navodu na teto strance: https://pip.pypa.io/en/latest/installing.html#install-pip
  
-To lze udělat buď kompilací nového modulu do aktuálního jádra které používáme, nebo kompilací celého kernelu s aplikovaným [[https://github.com/MLAB-project/hid-cp2112/blob/master/hid-cp2112.patch|patchem]] po kterém nový kernel bude ovladač rovnou obsahovat.  +Dale pak  stahneme a nainstalujeme [[http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython|Cython]]. To udelame jeho stanzenim a naslednou instalaci pomoci pip. Napriklad:  
 +  pip install C:\Users\kakona\Downloads\Cython-0.22.1-cp27-none-win32.whl
  
-=== Kompilace samostatného modulu ===+Pri instalaci se muze stat, ze pip odmitne balik nainstalovat kvuli spatne zdetekovane architekture win32 viz. [[http://stackoverflow.com/questions/28107123/cannot-install-numpy-from-wheel-format|tato chyba]]. K odstraneni staci instalacni soubor prejmenovat. Ke spravne funkci Cython baliku je jeste potreba Microsof C++ compiler. Ten muzeme ziskat z teto stranky: http://www.microsoft.com/en-us/download/details.aspx?id=44266 
  
-<WRAP info round> +Po uspesne instalaci vsech zavislosi muzeme nainstalovat hidapi.
-Tato metoda použití modulu zatím nefunguje úplně správněZatím však není ale ani dokončen driver do jádra linuxu. Zde popisovaný návod funguje správně až od verze kernelu 3.15. Používejte poroto zatím rozhraní HIDAPI popsané výše. +
-</WRAP>+
  
-Nejdříve zkompilujeme modul hid-cp2112+  H:\>pip install hidapi 
 +  Collecting hidapi 
 +    Using cached hidapi-0.7.99-6.tar.gz 
 +  Building wheels for collected packages: hidapi  
 +    Running setup.py bdist_wheel for hidapi 
 +    Stored in directory: C:\Users\kakona\AppData\Local\pip\Cache\wheels\2b\48\e3\2 
 +  4967b124ee3c5de267640f1b6fd0da760d99cf4e81181aab7 
 +  Successfully built hidapi 
 +  Installing collected packages: hidapi 
 +  Successfully installed hidapi-0.7.99.post6 
 +  H:\> 
 +==== Linux Kernel ====
  
-  git clone https://github.com/MLAB-project/hid-cp2112.git +Linux je případem operačního systému, kde existuje systémové řešení komunikace se sběrnicí I2C, takže je výhodné generický HID ovladač vyměnit za modul v kernelu. Obvod CP2112 je podporován v linuxovém kernelu od verze jádra 3.16. K jeho funkci proto stačí zavést modul i2c-devjak je popsáno v [[cs:i2c#pouziti_i_c_v_systemu_linux|návoudu na použití I²C]]. Následně ověříme, že v systému vidíme novou sběrnici I²C
-  cd hid-cp2112 +
-  make +
-  +
-Kdyby jsme se v této chvíli pokusili modul vložit do jádra pomocí //insmod//, tak se modul sice do jádra vložíAle nic se nestaneneboť k modulu USBI2C01A se mezitím přilepí generický driver usbhid. Následně musíme zjistit USB identifikaci zařízení na USB. To je možné například příkazem dmesg spuštěným po zapojení modulu USBI2C01A do USB+
  
-  [34842.853142] usb 3-4new full-speed USB device number 3 using xhci_hcd +  kaklik@UST-vyvoj:~$ sudo i2cdetect -l
-  [34842.870424] usb 3-4: New USB device found, idVendor=10c4, idProduct=ea90 +
-  [34842.870427] usb 3-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 +
-  [34842.870428] usb 3-4: Product: CP2112 HID USB-to-SMBus Bridge +
-  [34842.870429] usb 3-4: Manufacturer: Silicon Laboratories +
-  [34842.870430] usb 3-4: SerialNumber: 00338B73 +
-  [34842.874171] hid-generic 0003:10C4:EA90.0003: hiddev0,hidraw1: USB HID v1.01 Device [Silicon Laboratories CP2112 HID USB-to-SMBus Bridge] on usb-0000:00:14.0-4/input0 +
- +
-Na poslední řádce vidíme, že přidělený identifikátor je v tomto případě **0003:10C4:EA90.0003**. Následně tuto identifikaci použijeme k "odpojení" generického ovladače od USBI2C01A: +
- +
-  sudo su +
-  echo -n "0003:10C4:EA90.0003" > /sys/bus/hid/drivers/hid-generic/unbind +
- +
-A připojíme na něj náš nově přeložený ovladač: +
-   +
-  insmod ./hid-cp2112.ko +
-  echo -n "0003:10C4:EA90.0003" > /sys/bus/hid/drivers/cp2112/bind +
-   +
-Následně ověříme, že v systému vidíme novou sběrnici I²C.  +
- +
-  i2cdetect -l+
   i2c-0 i2c        i915 gmbus ssc                  I2C adapter   i2c-0 i2c        i915 gmbus ssc                  I2C adapter
   i2c-1 i2c        i915 gmbus vga                  I2C adapter   i2c-1 i2c        i915 gmbus vga                  I2C adapter
Řádek 117: Řádek 125:
   i2c-4 i2c        i915 gmbus dpb                  I2C adapter   i2c-4 i2c        i915 gmbus dpb                  I2C adapter
   i2c-5 i2c        i915 gmbus dpd                  I2C adapter   i2c-5 i2c        i915 gmbus dpd                  I2C adapter
-  i2c-6 i2c        DPDDC-                        I2C adapter +  i2c-6 i2c        DPDDC-                        I2C adapter 
-  i2c-7 i2c        DPDDC-D                          I2C adapter+  i2c-7 smbus      CP2112 SMBus Bridge on hiddev0  SMBus adapter
   i2c-8 smbus      CP2112 SMBus Bridge on hiddev0  SMBus adapter   i2c-8 smbus      CP2112 SMBus Bridge on hiddev0  SMBus adapter
 +  kaklik@UST-vyvoj:~$
  
-   +Pokud ano, tak rozhraním můžeme pracovat stejně jako s klasickou SMBus sběrnicí. S tím rozdílem, že modul neumí SMBus Quick Write, musíme proto použít parametr //-r//, jako je uvedeno v následujícím příkladu: 
-   + 
-  root@UST-vyvoj:/home/kaklik/git/hid-cp2112# i2cdetect -y -r 7+  kaklik@UST-vyvoj:~$ sudo i2cdetect -y -r 
         1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
   00:          -- -- -- -- -- -- -- -- -- -- -- -- --    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
Řádek 132: Řádek 141:
   50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
   60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
-  70: -- -- -- -- -- -- -- --                          +  70: 70 -- -- -- -- -- -- --                          
-  root@UST-vyvoj:/home/kaklik/git/hid-cp2112#+  kaklik@UST-vyvoj:~$
  
-   +Vidíme, že je na sběrnici připojeno zařízení s adresou //0x70//, které je tomto případě [[cs:i2chub|modul I²C Hubu]].
-=== Kompilace celého jádra Ubuntu ===+
  
-V terminálu se epneme do složky ve které chceme kernel zkompilovat. Následně stáhneme zdrojový balíček aktuálně běžícího kernelu: +==== Ukázky ipojených I²C modulů ====
  
-  apt-get source linux-image-$(uname -r)+=== CLKGEN01B ===
  
-Následně nainstalujeme nástroje potřebné pro kompilaci.+[[cs:clkgen]]
  
-  sudo apt-get install kernel-package libncurses5 libncurses5-dev +{{:cs:modules:clkgen01b_connection_big.jpg?300 |Ukázka použití modulu CLKGEN a USBI2C01A}}
-  sudo apt-get build-dep linux-image-$(uname -r)+
  
-V této fázi by již měl být k dispozici nový adresář obsahující zdrojové kódy jádra. V našem případě linux-3.11.0. Přepneme se do něj a vytvoříme konfiguraci jádra identickou s aktuálně běžícím jádrem.  
  
-  cd linux-3.11.0  
-  make oldconfig 
  
-Následně aplikujeme [[https://github.com/MLAB-project/hid-cp2112/blob/master/hid-cp2112.patch|patch]] který do kernelu přidá nový modul pro CP2112.+=== MAG01A ===
  
-  patch -Np1  --ignore-whitespace  < hid-cp2112.patch+[[cs:mag]]
  
-Pravděpodobně se stane, že některé soubory nebude možné automaticky upravitProto je potřeba to udělat ručně  +{{:cs:modules:usbi2c01a_mag01a_top_big.jpg?direct&300 |Modul USBI2C01A s připojeným magnetometrem MAG01A}}
-Takto najdeme odmítnuté změny.+
  
-  find . -name "*.rej" +=== GPIO ===
- +
-A postupně je upravíme ručně. A násdne spustíme menuconfig ve kterém nový modul zapneme. Na cestě: //> Device Drivers > HID support > Special HID drivers;Silicon Labs CP2112 HID USB-to-SMBus Bridge support// +
- +
-  make menuconfig +
- +
-Ukončíme menuconfig a zapneme kompilaci kernelu +
- +
-  sudo make-kpkg -j 8 --initrd --append-to-version=i2c-test kernel-image +
- +
-Ta bude chvíli trvat a spotřebuje cca 10 GB místa pro vytvoření objektových souborů.. Po skončení operace by se v nadřazeném adresáři měl objevit .deb balíček, který můžeme naistalovat pomocí:  +
- +
-  sudo dpkg -i  linux-image-3.11.10i2c-test_3.11.10i2c-test-10.00.Custom_amd64.deb +
-  sudo reboot +
- +
-Pokud k převodníku máme připojené nějaké I²C zařízení, tak můžeme jednoduše otestovat komunikaci: +
- +
-  kaklik@popelnice:~$ sudo i2cdetect -y -r 8 +
-        1  2  3  4  5  6  7  8  9  a  b  c  d  e  f +
-  00:          -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  50: -- -- -- -- -- 55 -- -- -- -- -- -- -- -- -- --  +
-  60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  +
-  70: -- -- -- -- -- -- -- --                          +
-  kaklik@popelnice:~$ +
- +
-V tomto případě je k modulu USBI2C01A připojen modul [[cs:clkgen|CLKGEN01B]] s adresou 0x55. +
- +
-==== Ukázky připojených I²C modulů ==== +
- +
-=== CLKGEN01B === +
- +
-{{:cs:modules:clkgen01b_connection_big.jpg?300|Ukázka použití modulu CLKGEN a USBI2C01A}} +
- +
- +
- +
-=== MAG01A ===+
  
-{{ :cs:modules:usbi2c01a_mag01a_top_big.jpg?direct&300 |Modul USBI2C01A s připojeným magnetometrem MAG01A}}+[[cs:i2cio]]
  
 +{{youtube>5ZDLRfBRRL4?medium}}
 ===== Související stránky ===== ===== Související stránky =====
  
cs/usbi2c.1407368201.txt.gz · Poslední úprava: 2014/08/06 23:36 (upraveno mimo DokuWiki)