cs:usbi2c
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verzePoslední revizeObě strany příští revize | ||
cs:usbi2c [2014/04/17 21:24] – [HIDAPI] kaklik | cs:usbi2c [2018/03/07 18:18] – [Ubuntu 14.04] roman | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Převodník USB na I²C USBI2C01A ====== | + | ====== Převodník USB na I²C - USBI2C01A ====== |
- | 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:// | + | [[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:// |
{{ : | {{ : | ||
Řádek 9: | Řádek 9: | ||
===== Použití modulu ===== | ===== Použití modulu ===== | ||
- | Modul se po připojení k USB chová, jako standardní HID zařízení. | + | Modul se po připojení k USB chová, jako standardní HID zařízení. |
==== HIDAPI ==== | ==== HIDAPI ==== | ||
Řádek 15: | Řádek 15: | ||
HIDAPI je platforma, přes kterou se dá k převodníku přistupovat z Linuxu, Windows nebo MAC OS na různých procesorových platformách. Podmínkou je, že na dané platformě je nainstalováno libusb-1.0. | HIDAPI je platforma, přes kterou se dá k převodníku přistupovat z Linuxu, Windows nebo MAC OS na různých procesorových platformách. Podmínkou je, že na dané platformě je nainstalováno libusb-1.0. | ||
- | Na počítač, ke kterému převodník připojíme, | ||
- | Pokud budeme chtít CP2112 ovládat z prostředí Python, musíme do interpretu importovat modul hid z projektu [[https:// | + | === Ubuntu 14.04 === |
- | To lze už provést jednoduše přikazem: | + | |
- | easy_install | + | Na počítač, ke kterému převodník připojíme, |
- | //Známý problém: | + | sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-pip python-smbus cython |
- | Instalační skript setup.py v modulu cython-hidapi musíme upravit takto:// | + | |
- | from distutils.core import setup | + | Dále pak potřebujeme pouze balík [[cs: |
- | from distutils.extension import Extension | + | |
- | from Cython.Distutils import build_ext | + | sudo pip install pymlab |
- | import os | + | |
- | os.environ[' | + | |
- | os.environ[' | + | |
| | ||
- | setup( | + | == Nastavení USBI2C v pymlabu s HIDAPI == |
- | | + | Převodník USBI2C lze používat s [[cs: |
- | | + | |
+ | Nastavení může vypadat takto: | ||
+ | |||
+ | cfg = config.Config( | ||
+ | | ||
+ | " | ||
+ | "serial": ' | ||
+ | | ||
+ | }, | ||
+ | |||
+ | bus = [ | ||
+ | { << Dalsi Pymlab zarizezi >>}, | ||
+ | ], | ||
) | ) | ||
+ | cfg.initialize() | ||
| | ||
- | == Příklad blikání | + | |
+ | == Příklad blikání | ||
import hid | import hid | ||
import time | import time | ||
Řádek 42: | Řádek 52: | ||
try: | try: | ||
print " | print " | ||
- | h = hid.device(0x10C4, | + | h = hid.device() |
+ | h.open(0x10C4, 0xEA90) | ||
| | ||
print " | print " | ||
Řádek 48: | Řádek 59: | ||
print " | print " | ||
| | ||
- | h.write([0x02, | + | h.write([0x02, |
time.sleep(0.1) | time.sleep(0.1) | ||
for k in range(10): | for k in range(10): | ||
- | h.write([0x04, | + | h.write([0x04, |
time.sleep(0.1) | time.sleep(0.1) | ||
- | h.write([0x04, | + | h.write([0x04, |
time.sleep(0.1) | time.sleep(0.1) | ||
| | ||
Řádek 63: | Řádek 74: | ||
| | ||
print " | print " | ||
+ | |||
//Příklad je nutné spustit s oprávněním správce.// | //Příklad je nutné spustit s oprávněním správce.// | ||
- | ==== Linux ==== | + | <WRAP info round> |
+ | Podrobnosti k ovládání IO portů přes HID API najdete v [[http:// | ||
+ | |tomto dokumentu]] | ||
+ | </ | ||
- | 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. </ | + | == Nastavení |
- | 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/ | + | 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: |
- | === Kompilace samostatného modulu | + | SUBSYSTEM==" |
+ | SUBSYSTEM==" | ||
+ | |||
+ | Aby se tato konfigurace stala aktivní, tak je potřeba USB zařízení odpojit a opět připojit. | ||
+ | |||
+ | === Windows 8 === | ||
- | <WRAP info round> | + | Pokud ve windows jeste nemame, tak stahneme a nainstalujeme [[https:// |
- | Tato metoda použití modulu zatím nefunguje úplně správně, použijte prosím metodu kompilace celého jádra. | + | 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:// |
- | </WRAP> | + | |
- | Nejdříve zkompilujeme modul hid-cp2112 | + | Dale pak stahneme a nainstalujeme [[http:// |
+ | pip install C: | ||
- | git clone https://github.com/MLAB-project/hid-cp2112.git | + | Pri instalaci se muze stat, ze pip odmitne balik nainstalovat kvuli spatne zdetekovane architekture win32 viz. [[http://stackoverflow.com/questions/28107123/ |
- | cd hid-cp2112 | + | |
- | make | + | |
- | + | ||
- | Kdyby jsme se v této chvíli pokusili modul vložit do jádra pomocí | + | |
- | [34842.853142] usb 3-4: new full-speed USB device number 3 using xhci_hcd | + | Po uspesne instalaci vsech zavislosi muzeme nainstalovat hidapi. |
- | [34842.870424] usb 3-4: New USB device found, idVendor=10c4, | + | |
- | [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: | + | |
- | [34842.870430] usb 3-4: SerialNumber: | + | |
- | [34842.874171] hid-generic 0003: | + | |
- | 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 " | + | 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: | ||
+ | 4967b124ee3c5de267640f1b6fd0da760d99cf4e81181aab7 | ||
+ | Successfully built hidapi | ||
+ | Installing collected packages: hidapi | ||
+ | Successfully installed hidapi-0.7.99.post6 | ||
+ | H:\> | ||
+ | ==== Linux Kernel ==== | ||
- | sudo su | + | 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č |
- | echo -n " | + | |
- | + | ||
- | A připojíme na něj náš nově přeložený ovladač: | + | |
- | + | ||
- | insmod | + | |
- | echo -n "0003:10C4:EA90.0003" > / | + | |
- | + | ||
- | Následně ověříme, že v systému vidíme novou sběrnici I²C. | + | |
- | i2cdetect -l | + | |
i2c-0 i2c | i2c-0 i2c | ||
i2c-1 i2c | i2c-1 i2c | ||
Řádek 112: | Řádek 125: | ||
i2c-4 i2c | i2c-4 i2c | ||
i2c-5 i2c | i2c-5 i2c | ||
- | i2c-6 i2c | + | i2c-6 i2c |
- | i2c-7 i2c | + | i2c-7 smbus |
i2c-8 smbus | i2c-8 smbus | ||
+ | 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: |
- | + | ||
- | | + | |
| | ||
00: -- -- -- -- -- -- -- -- -- -- -- -- -- | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
Řádek 127: | Řádek 141: | ||
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 70: -- -- -- -- -- -- -- -- | + | 70: 70 -- -- -- -- -- -- -- |
- | | + | |
- | + | Vidíme, že je na sběrnici připojeno zařízení s adresou //0x70//, které je v tomto případě [[cs: | |
- | === Kompilace celého jádra | + | |
- | V terminálu se přepneme do složky ve které chceme kernel zkompilovat. Následně stáhneme zdrojový balíček aktuálně běžícího kernelu: | + | ==== Ukázky |
- | apt-get source linux-image-$(uname -r) | + | === CLKGEN01B === |
- | Následně nainstalujeme nástroje potřebné pro kompilaci. | + | [[cs: |
- | sudo apt-get install kernel-package libncurses5 libncurses5-dev | + | {{: |
- | 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:// | + | === MAG01A === |
- | patch -Np1 --ignore-whitespace | + | [[cs:mag]] |
- | Pravděpodobně se stane, že některé soubory nebude možné automaticky upravit. Proto je potřeba to udělat ručně | + | {{: |
- | Takto najdeme odmítnuté změny. | + | |
- | find . -name " | + | === 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; | + | |
- | + | ||
- | 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í, | + | |
- | + | ||
- | kaklik@popelnice: | + | |
- | | + | |
- | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 50: -- -- -- -- -- 55 -- -- -- -- -- -- -- -- -- -- | + | |
- | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | + | |
- | 70: -- -- -- -- -- -- -- -- | + | |
- | kaklik@popelnice: | + | |
- | + | ||
- | V tomto případě je k modulu USBI2C01A připojen modul [[cs: | + | |
- | + | ||
- | ==== Ukázky připojených I²C modulů ==== | + | |
- | + | ||
- | === CLKGEN01B === | + | |
- | + | ||
- | {{: | + | |
- | + | ||
- | + | ||
- | + | ||
- | === MAG01A | + | |
- | {{ :cs:modules: | + | [[cs:i2cio]] |
+ | {{youtube> | ||
===== Související stránky ===== | ===== Související stránky ===== | ||
cs/usbi2c.txt · Poslední úprava: 2018/03/07 18:18 (upraveno mimo DokuWiki)