cs:i2c
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Předchozí verze | |||
cs:i2c [2014/12/21 10:29] – [Sběrnice I²C ve stavebnici MLAB] kaklik | — | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Sběrnice I²C ve stavebnici MLAB ====== | ||
- | |||
- | [[http:// | ||
- | |||
- | Avšak díky[[cs: | ||
- | |||
- | |||
- | ===== Spojování I²C zařízení ===== | ||
- | |||
- | I2C je sbernice původně určená k propojování zařízení na malé vzdálenosti. (Původně na rozměru plošných spojů). Avšak s použitím vhodných technik je možné její rozsah zvětšit na řádově desítky metrů(( [[http:// | ||
- | |||
- | V MLABu je spojování I2C zařízení řešeno na několika úrovních podle zvoleného rozsahu sítě. Lokálně (v rozsahu několika metrů) jsou moduly spojovány přímo MLAB kablíky. A oddělovány modulem [[cs: | ||
- | |||
- | Na rozsáhlejší vzdálenosti je sběrnice vedena stíněnými signálními kabely na koncích opatřenými dutinkami zapojenými do modulu [[cs: | ||
- | |||
- | Pro rozsáhlé sítě je I²C nahrazeno jinou fyzickou vrstvou (CAN, Ethernet), která propojuje jednotlivé I2C síťové segmenty. | ||
- | |||
- | |||
- | ==== Programový balík Pymlab ==== | ||
- | |||
- | Jde o softwarový balík, který umožňuje vytvářet síť z I²C zařízení a modulů, které slouží jako routovací body. Princip funkce spočívá v definování struktury sítě a adres jednotlivých nódů ve zdrojovém souboru ovládacího programu, pak lze ke všem bodům v síti přistupovat pomocí jednoduchých příkazů jazyka Python. | ||
- | |||
- | Instalaci samotného softwarového balíku [[cs: | ||
- | |||
- | sudo pip install pymlab | ||
- | |||
- | V případě, že již nějakou starší verzi pymlab máme nainstalovanou, | ||
- | |||
- | sudo pip install --upgrade pymlab | ||
- | |||
- | Oba příkazy jsou rovnocenné a využívají python balíčkovací systém ve kterém je [[https:// | ||
- | |||
- | Tím by se měly stáhnout i balíky se kterými pymlab pracuje, jako je například cython-hidapi v pythonu označovaný pouze jako modul hid. Nenainstaluje se alelibusb. To stále musíme provést ručně pomocí: | ||
- | |||
- | sudo apt-get install libudev-dev libusb-1.0-0-dev libhidapi-dev python-setuptools python-smbus cython | ||
- | |||
- | |||
- | ===== Konvertory pro připojení I²C k PC ===== | ||
- | |||
- | 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:// | ||
- | |||
- | ==== USB rozhraní ==== | ||
- | |||
- | Proprietární konstrukce jako: | ||
- | |||
- | * [[http:// | ||
- | * [[http:// | ||
- | * [[http:// | ||
- | |||
- | 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: | ||
- | |||
- | ==== USB HID ==== | ||
- | |||
- | Pro připojení bez nutnosti použití driverů určených pro specifický hadrware je možné použít specifikaci [[http:// | ||
- | |||
- | ==== UART/RS232 na I2C ==== | ||
- | |||
- | NXP vyrábí [[http:// | ||
- | |||
- | ==== Ethernet na I2C ==== | ||
- | |||
- | Pomocí modulů [[cs: | ||
- | ===== 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: | ||
- | sudo apt-get install i2c-tools | ||
- | | ||
- | Jádro však obvykle nemá instalovaný modul //i2c-dev// (([[https:// | ||
- | 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, | ||
- | i2c-dev | ||
- | </ | ||
- | |||
- | Nyní již můžeme vypsat dostupné I²C sběrnice v systému: | ||
- | |||
- | $ sudo i2cdetect -l | ||
- | i2c-0 i2c | ||
- | i2c-1 i2c | ||
- | i2c-2 i2c | ||
- | i2c-3 i2c | ||
- | i2c-4 i2c | ||
- | i2c-5 i2c | ||
- | i2c-6 i2c | ||
- | |||
- | Pomocí programu | ||
- | |||
- | kaklik@radio-arm-0: | ||
- | | ||
- | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- | ||
- | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
- | 70: 70 -- -- -- -- -- -- -- | ||
- | kaklik@radio-arm-0: | ||
- | |||
- | Vidíme, že kromě systémového zařízení s adresou 0x10 máme na sběrnici připojená ještě dvě zařízení 0x1e ([[cs: | ||
- | |||
- | ==== Komunikace s I²C zařízeními ==== | ||
- | |||
- | Pro ovládání sběrnice mohou být využity buď systémová rozhraní v jádře operačního systému. | ||
- | |||
- | A nebo servisní utility z balíku i2c-tools, přes které lze sběrnici přímo ovládat: | ||
- | |||
- | $ apropos i2c | ||
- | i2cdetect (8) - detect I2C chips | ||
- | i2cdump (8) - examine I2C registers | ||
- | i2cget (8) - read from I2C/SMBus chip registers | ||
- | i2cset (8) - set I2C registers | ||
- | |||
- | === Zápis === | ||
- | |||
- | Zápis provedeme příkazem i2cset. Ukážeme zde příklad nastavení [[cs: | ||
- | |||
- | ~$ sudo i2cset -y -r 1 0x70 0xff | ||
- | 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.)) | ||
- | |||
- | === Čtení === | ||
- | |||
- | Čtení z I2Chub se provádí opět atypicky, neboť se neadresuje datový registr: | ||
- | |||
- | :~$ sudo i2cget -y 1 0x70 | ||
- | 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: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | |||
- | Protože I²C není v principu [[http:// | ||
- | |||
- | echo název_driveru i2c_adresa > / | ||
- | |||
- | 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:// | ||
- | ===== Ostatní operační systémy ===== | ||
- | |||
- | V jiných operačních systémech, jako Windows či MAC OS, kde nemůžeme nebo nechceme využít podporu I²C rozhraní v jádře, můžeme použít pro ovládaní I2C prostředí jazyka Python, který je multiplatformní a běží na všech známých OS. | ||
- | |||
- | ===== Související stránky ===== | ||
- | |||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
- | * [[cs: | ||
cs/i2c.txt · Poslední úprava: 2022/09/02 21:20 autor: kaklik