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/05/22 19:51] – [Převodník USB na I²C USBI2C01A] 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 33: Řádek 52:
   try:   try:
       print "Opening device"       print "Opening device"
-      h = hid.device(0x10C4, 0xEA90)+      h = hid.device() 
 +      h.open(0x10C4, 0xEA90)
      
       print "Manufacturer: %s" % h.get_manufacturer_string()       print "Manufacturer: %s" % h.get_manufacturer_string()
Řádek 39: Řádek 59:
       print "Serial No: %s" % h.get_serial_number_string()       print "Serial No: %s" % h.get_serial_number_string()
      
-      h.write([0x02, 0xFF, 0x00, 0x00, 0x00])    +      h.write([0x02, 0xFF, 0x00, 0x00, 0x00])  # nastaveni vystupu v rezimu open-drain
       time.sleep(0.1)       time.sleep(0.1)
       for k in range(10):       for k in range(10):
-          h.write([0x04, 0xFF, 0xFF])+          h.write([0x04, 0xFF, 0xFF])  # zapise 1 na vsech 8 vystupnich IO pinu
           time.sleep(0.1)           time.sleep(0.1)
-          h.write([0x04, 0x00, 0xFF])+          h.write([0x04, 0x00, 0xFF])  # zapise 0 na vsech 8 vystupnich IO pinu
           time.sleep(0.1)           time.sleep(0.1)
      
Řádek 56: Řádek 76:
  
 //Příklad je nutné spustit s oprávněním správce.// //Příklad je nutné spustit s oprávněním správce.//
 +
 +<WRAP info round>
 +Podrobnosti k ovládání IO portů přes HID API najdete v [[http://www.mlab.cz/WebSVN/filedetails.php?repname=MLAB&path=%2FModules%2FCommSerial%2FUSBI2C01A%2Fpdf%2FCP2112%2FAN495.pdf
 +|tomto dokumentu]]
 +</WRAP>
  
 == Nastavení přístupových práv k USB == == Nastavení přístupových práv k USB ==
Řádek 61: Řá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ě, použijte prosím metodu kompilace celého jádra. +
-</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 kerneluObvod CP2112 je podporován v linuxovém kernelu od verze jádra 3.16K 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 nestane, neboť k modulu USBI2C01A se mezitím přilepí generický driver usbhid. Následně musíme zjistit USB identifikaci zařízení na USBTo je možné například příkazem dmesg spuštěným po zapojení modulu USBI2C01A do USB.  +
- +
-  [34842.853142] usb 3-4: new full-speed USB device number 3 using xhci_hcd +
-  [34842.870424] usb 3-4: New USB device found, idVendor=10c4, idProduct=ea90 +
-  [34842.870427] usb 3-4: New USB device strings: Mfr=1Product=2, SerialNumber=3 +
-  [34842.870428] usb 3-4: Product: CP2112 HID USB-to-SMBus Bridge +
-  [34842.870429] usb 3-4Manufacturer: Silicon Laboratories +
-  [34842.870430usb 3-4: SerialNumber: 00338B73 +
-  [34842.874171hid-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+  kaklik@UST-vyvoj:~$ sudo 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 111: Řá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 126: Řá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.txt · Poslední úprava: 2018/03/07 18:18 (upraveno mimo DokuWiki)