Uživatelské nástroje

Nástroje pro tento web

Tento překlad je starší než originální stránka a nejspíše i zastaralý. Zobrazit změny.
Překlady této stránky?:

cs:usbi2c

Toto je starší verze dokumentu!


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í. 1)

USBI2C01A

Modul se proto snaží řešit tento problém použitím obvodu Silicon Labs CP2112, který je přímým převodníkem mezi USB a SMBus resp. I2C.

Použití modulu

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 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.

Ubuntu 14.04

Na počítač, ke kterému převodník připojíme, musíme nejdříve nainstalovat 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-pip python-smbus cython 

Dále pak potřebujeme pouze balík Pymlab, jak je zmíněno na stránce i2c.

sudo pip install pymlab
Příklad blikání LEDkami na USBI2C01A pomocí Pythonu:
import hid
import time

try:
    print "Opening device"
    h = hid.device()
    h.open(0x10C4, 0xEA90)

    print "Manufacturer: %s" % h.get_manufacturer_string()
    print "Product: %s" % h.get_product_string()
    print "Serial No: %s" % h.get_serial_number_string()

    h.write([0x02, 0xFF, 0x00, 0x00, 0x00])  # nastaveni vystupu v rezimu open-drain
    time.sleep(0.1)
    for k in range(10):
        h.write([0x04, 0xFF, 0xFF])  # zapise 1 na vsech 8 vystupnich IO pinu
        time.sleep(0.1)
        h.write([0x04, 0x00, 0xFF])  # zapise 0 na vsech 8 vystupnich IO pinu
        time.sleep(0.1)

    print "Closing device"
    h.close()

except IOError, ex:
    print ex

print "Done"

Příklad je nutné spustit s oprávněním správce.

Podrobnosti k ovládání IO portů přes HID API najdete v tomto dokumentu

Nastavení přístupových práv k USB

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_device", ATTRS{idVendor}=="10c4", MODE="0666"

Linux Kernel

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-dev, jak je popsáno v návoudu na použití I²C. Následně ověříme, že v systému vidíme novou sběrnici I²C.

kaklik@UST-vyvoj:~$ sudo i2cdetect -l
i2c-0	i2c       	i915 gmbus ssc                  	I2C adapter
i2c-1	i2c       	i915 gmbus vga                  	I2C adapter
i2c-2	i2c       	i915 gmbus panel                	I2C adapter
i2c-3	i2c       	i915 gmbus dpc                  	I2C adapter
i2c-4	i2c       	i915 gmbus dpb                  	I2C adapter
i2c-5	i2c       	i915 gmbus dpd                  	I2C adapter
i2c-6	i2c       	DPDDC-B                         	I2C adapter
i2c-7	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:

kaklik@UST-vyvoj:~$ sudo i2cdetect -y -r 8 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --                         
kaklik@UST-vyvoj:~$

Vidíme, že je na sběrnici připojeno zařízení s adresou 0x70, které je v tomto případě modul I²C Hubu.

Ukázky připojených I²C modulů

CLKGEN01B

MAG01A

mag

Modul USBI2C01A s připojeným magnetometrem MAG01A

GPIO

i2cio

Související stránky

Reference

cs/usbi2c.1419715927.txt.gz · Poslední úprava: 2014/12/27 21:32 (upraveno mimo DokuWiki)