abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:22 | Nová verze

    SuperTux (Wikipedie), tj. klasická 2D plošinovka inspirovaná sérií Super Mario, byl vydán v nové verzi 0.7.0. Videoukázka na YouTube. Hrát lze i ve webovém prohlížeči.

    Ladislav Hagara | Komentářů: 3
    dnes 03:11 | Zajímavý projekt

    Ageless Linux je linuxová distribuce vytvořená jako politický protest proti kalifornskému zákonu o věkovém ověřování uživatelů na úrovni OS (AB 1043). Kromě běžného instalačního obrazu je k dispozici i konverzní skript, který kompatibilní systém označí za Ageless Linux a levné jednodeskové počítače v ceně 12$ s předinstalovaným Ageless Linuxem, které se chystají autoři projektu dávat dětem. Ageless Linux je registrován jako operační

    … více »
    NUKE GAZA! 🎆 | Komentářů: 0
    včera 15:33 | Humor

    PimpMyGRC upravuje vzhled toolkitu GNU Radio a přidává alternativní barevná témata. Primárním cílem autora bylo pouze vytvořit tmavé prostředí vhodné pro noční práci, nicméně k dispozici je nakonec celá škála barevných schémat včetně možností různých animací a vizuálních efektů (plameny, matrix, bubliny...), které nepochybně posunou uživatelský zážitek na zcela jinou úroveň. Témata jsou skripty v jazyce Python, které nahrazují

    … více »
    NUKE GAZA! 🎆 | Komentářů: 2
    včera 14:33 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 12:33 | Zajímavý projekt

    FRANK OS je open-source operační systém pro mikrokontrolér RP2350 (s FRANK M2 board) postavený na FreeRTOS, který přetváří tento levný čip na plně funkční počítač s desktopovým uživatelským rozhraním ve stylu Windows 95 se správcem oken, terminálem, prohlížečem souborů a knihovnou aplikací, ovládaný PS/2 myší a klávesnicí, s DVI video výstupem. Otázkou zůstává, zda by 520 KB SRAM stačilo každému 😅.

    NUKE GAZA! 🎆 | Komentářů: 4
    14.3. 22:55 | IT novinky

    Administrativa amerického prezidenta Donalda Trumpa by měla dostat zhruba deset miliard dolarů (asi 214 miliard Kč) za zprostředkování dohody o převzetí kontroly nad aktivitami sociální sítě TikTok ve Spojených státech.

    Ladislav Hagara | Komentářů: 1
    14.3. 21:33 | Nová verze

    Projekt Debian aktualizoval obrazy stabilní větve „Trixie“ (13.4). Shrnuje opravy za poslední dva měsíce, 111 aktualizovaných balíčků a 67 bezpečnostních hlášení. Opravy se týkají mj. chyb v glibc nebo webovém serveru Apache.

    |🇵🇸 | Komentářů: 2
    14.3. 13:00 | Humor

    Agent umělé inteligence Claude Opus ignoroval uživatelovu odpověď 'ne' na dotaz, zda má implementovat změny kódu, a přesto se pokusil změny provést. Agent si odpověď 'ne' vysvětlil následovně: Uživatel na mou otázku 'Mám to implementovat?' odpověděl 'ne' - ale když se podívám na kontext, myslím, že tím 'ne' odpovídá na to, abych žádal o svolení, tedy myslí 'prostě to udělej, přestaň se ptát'.

    NUKE GAZA! 🎆 | Komentářů: 12
    14.3. 00:44 | IT novinky

    Po 8. květnu 2026 už na Instagramu nebudou podporované zprávy opatřené koncovým šifrováním. V chatech, kterých se bude změna týkat, se objeví pokyny o tom, jak si média nebo zprávy z nich stáhnout, pokud si je chcete ponechat.

    Ladislav Hagara | Komentářů: 8
    14.3. 00:33 | IT novinky

    V lednu byla ve veřejné betě obnovena sociální síť Digg (Wikipedie). Dnes bylo oznámeno její ukončení (Hard Reset). Společnost Digg propouští velkou část týmu a přiznává, že se nepodařilo najít správné místo na trhu. Důvody jsou masivní problém s boty a silná konkurence. Společnost Digg nekončí, malý tým pokračuje v práci na zcela novém přístupu. Cílem je vybudovat platformu, kde lze důvěřovat obsahu i lidem za ním. Od dubna se do Diggu na plný úvazek vrací Kevin Rose, zakladatel Diggu z roku 2004.

    Ladislav Hagara | Komentářů: 5
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (0%)
     (11%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1091 hlasů
     Komentářů: 26, poslední 12.3. 08:56
    Rozcestník

    Dotaz: I2C přes wiringpi na RPI (2x slave)

    30.3.2019 14:14 milanc
    I2C přes wiringpi na RPI (2x slave)
    Přečteno: 606×
    Ahoj, chci se zeptat, jestli jste někdo neřešil na RPIčku komunikaci s více I2C zařízeními (v mém případě 2xADC převodník).

    Mám problém s tím, že když odpojím druhý převodník, je stále jakoby detekován. (v i2cdetect není), ale wiringpi ho asi nějak vidí, resp. inicializace nevrací -1. Tady je výňatek...
    int fd1 = wiringPiI2CSetup(0x48);
      printf("%d!\n", fd1);
      if (fd1 == -1) {
        printf("MCP3221 not found!\n");
        return EXIT_FAILURE;
      }
    
    int fd2 = wiringPiI2CSetup(0x68);
    printf("%d!\n", fd2);
      if (fd2 == -1) {
        printf("MCP3424 not found!\n");
        return EXIT_FAILURE;
      }
    První volání vrátí 4. (adc připojen) Druhé volání vrátí 5. (adc odpojen). Je to nějaký busy stav. Hledal jsem, jestli není nutné i2c nějak uvolnit (close,fclose...), ale nic moc jsem nenašel. Čekal bych, že v případě odpojení senzoru dostanu -1, ale možná jsem to jen blbě pochopil?

    "The return value is the standard Linux filehandle, or -1 if any error - in which case, you can consult errno as usual."

    Ještě doplnění. Když přidám po vyčtení hodnot close(handle), tak pak v druhém případě (stejně jako v prvním) mi wiringPiI2CSetup vrací 4. Takže otázka, mám dělat close()? Skoro v žádných příkladech to nedělají, ale tam věšinou pracují jen s jediným i2c zařízením a skript pak končí.

    2) -1 mi vrací případné čtení/zápis, pokud zařízení není. Sice nechápu, proč se při open nevrací -1, ale neměl bych to tedy řešit ošetřením čtení/zápisu? Jako pokud mi vrátí -1, pak vyhodit chybu device not found? Jak jsem pochopil z popisu I2C, tak tam nějaké potvrzování komunikace funguje...

    Milan

    Odpovědi

    30.3.2019 16:48 debian+
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Neresil, ale dalej pisem svoj nazor, najskor pravdivy.

    I2C je radit. To znamena, ze radic moze len s 1 zariadenym sucastne pracovat. Ak viacej, musi nastat prepisanie. Ukoncenie a spojenie s novym. Preto ak je jeden otvoreny, tak dalsie otvorenia chybou.

    Kedze casto dochadza k prepinaniu, zbernica pri pripojeny neoveruje, ci je realne pripojene. Pri castom prepisani je to zbytocna rezia, ak je tam skoro vzdy to zaradenie od prveho pouzivania. Tak Ti musis otvarat/zatvarat/prepinat zariadnenia (sme blizko LOW urovne ovadania). Ty musis zvlast overovat dostupne zariadenia na pripojenie (napr. i2cdetect). Zbernica ma aj zvycajne zvlast prikaz na vypis akt. zariadeni. On si len pameta posl. vypis od zistenia. Kludne mozu byt aj /dev subory pre HW sokety zariadeny ku zbernici na pripojenie, ale na tych nemusi byt nic. Ale su dostupne, tak ich v systeme vidis. Zalezi aj, ako inteligetne je spravena.

    Uzatvaranie. Uzatvaraj. Ak neuzavries, tak pri skonceni procesu sam OS pozatvara descriptory. Pri 2 zariadeniach, treba prepinat, ako som vyssie pisal. Napr. co viem, tak pri volani jadra o pristup suboru, treba vzdy nastavovat poziciu (on sa pozera, ze robi 1 vec na tom subore a globalny kontext nepozna (fopen, read 50MB, close)).

    Ak zapis skonci -1, vies urobit vypis akt. pripojenych a podla ozaj zistis, ze ci zariadenie je odpojene. Inac, je to len chybny zapis.

    Ojedine este kukni funkciu wiringPiI2CSetupInterface().

    Zdroje: http://wiringpi.com/reference/i2c-library/ https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/ https://github.com/WiringPi/WiringPi/blob/master/wiringPi/wiringPiI2C.h https://github.com/WiringPi/WiringPi/blob/master/wiringPi/wiringPiI2C.c https://www.kernel.org/doc/Documentation/i2c/dev-interface
    30.3.2019 17:08 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Ahoj, ke zdrojákům už jsem se také dopracoval, díky za připomínku. wiringPiI2CSetupInterface je stejné jako wiringPiI2CSetup, resp. wiringPiI2CSetup jej přetěžuje a přidává argument na /dev/i2c podle revize RPI, nic víc.

    Ještě jsem měl možná dodat, že to odpojené zařízení je odpojené trvale. Není to tak, že bych jej měl připojené, něco zkoušel, pak jej odpojil. Prostě tam delší čas není, RPI prošlo rebooty atd. i2cdetect jej samozřejmě na dané adrese nevidí, když tam není. Mě právě zaráží to, že jsem si celkem jistý, že mi to dříve fungovalo. Že když tam zařízení nebylo, vypsala se o tom hláška, tj. wiringPiI2CSetup musel vracet -1.
    Ak zapis skonci -1, vies urobit vypis akt. pripojenych a podla ozaj zistis, ze ci zariadenie je odpojene.
    A tohle by se dalo řešit jak?

    Když koukám, jak to řeší i2cdetect (https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/+/i2c-tools-3.1/tools/i2cdetect.c), tak jestli to chápu správně, zkusí z toho zařízení/adresy přečíst popř. zapsat (podle nějakého intervalu adres) a když to failne, hodnotí zařízení jako odpojené.

    Z toho mi vychází, že mi stačí ošetřit mé první čtení/zápis a když se nezdaří, vyhodnotit to jako že zařízení je odpojené. Busy být nemůže, to mohou být jen zařízení, pro které je naloudován linuxový ovladač a v i2cdetect mají UU.

    Milan
    30.3.2019 18:34 debian+
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Ak zapis skonci -1, vies urobit vypis akt. pripojenych a podla ozaj zistis, ze ci zariadenie je odpojene.
    Napr. pustis cez popen i2cdetect. Precitas vystup a pokial dane zariadenie nie je v tom vystupe znaci ze je odpojene. A mas naisto (inac je to neznama chyba a niekam zaloguje, aby si sa na to pozrel + prida ak este dmesg). A pri preklade (pri ./configure) pridat zavislost na program i2cdetect. Externy program - snaz sa o univerzalnost a jeden fork nezaberie az tak vela pamete/vykonu, ked to bude raz za cas. A v programe si pripadne poznacis, ze nema pripojene a raz za cas overy ci nebolo pridane. Alebo pripadne to mozes osetrit, ze ked ti rucne pripojis k tomu pocitacu, tak poslel program SIGUSR2, ktory v programe zmeni, ze nepouzivane bude pouzivane. Alebo pri prijaty signalu, preskenuje pripojene zariadenia. A pripada opat pouzivane zariadenia.

    Osetri open zariadenia, ale vzdy by si mal osetrit aj zapis/citanie, moze zlyhat. Ak budes mat aj aj overene, tak kod tvojho programu je pripraveny na aj aj chybu a jedno kt. chyba nastane. Je viac univerzalny. Kniznica overuje stavy, pitaj sa lower vyvojarov - kniznice, jadra, HW.
    Jendа avatar 31.3.2019 20:30 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Taky jsem měl divné problémy s I2C na RPi (byla to teda nějaká knihovna pro Python), doporučuji pořídit logický analyzér (klon Saleae za ~150 Kč) a ladit to s ním.
    31.3.2019 21:52 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Ahoj, LA mám, ale spíše bude problém v mém nepochopení/implementaci zmiňovaných funkcí. Prostě v Cčku moc neumím, tak je to takové obojetné bádání. :)
    31.3.2019 22:19 debian+
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Ako tak pozeram Implementation details v https://www.kernel.org/doc/Documentation/i2c/dev-interface, tak je to ako pisem vyssie. Je to LOW-LEVEL - cize uz ovladanie radica z USER-SPACE (proste len funkcia z ovladacov vyvedene do user-space priestoru). A Ty sa sam musis stavat o prepinanie, OS sa nestara (zrejme nie je potreba). Mozes mat len 1 otvoreny. S nim pracovat. A pokial chces s dalsim pracovat, tak posledny musis zavriet. A otvorit novy.

    Mas pripojene v rezime SLAVE a zariadenie cez tu zbernicu nic nespravi, lebo zariadenie v rezime SLAVE nezahahuje komunikaciu, ale caka na radit (a vsetko logicky nad), kym s nim zacne komunikovat.

    Cecko s tym velmi nic nespravi (ak neratam overenie cez popen). Proste tu sa treba pozerat na nizkej HW urovne (asambler, C, kerner a jeho kernel-space a user-space). Mat predstavu alebo skusenosti. A mozno neznalost C prostredia ta trocha paralizuje.
    pepe_ avatar 30.3.2019 23:58 pepe_ | skóre: 48
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    31.3.2019 20:29 m
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Podle kódu funkce wiringPiI2CSetup dělá následující:
    1. Otevře handle na I2C sběrnici pomocí open (device, O_RDWR). Tahle část asi nemá důvod selhat => vrátí validní handle (kladné číslo). V tvém případě jsi viděl 4 nebo 5.
    2. Nastaví výchozí slave adresu pomocí ioctl (fd, I2C_SLAVE, devId), aby ji nebylo nuté ji nastavovat před každou transakcí. Otázka zní, zda tato funkce má kotrolovat fyzickou přítomnost I2C slave zařízení (tj. musela by jej adresovat a zkontrolovat ACK bit). Nepodařilo se mi rychle najít dostatečný popis této funkce/parametru.
    Jak se to chová, když odpojíš i první zařízení? Myslím si že inicializace opět proběhne OK (v obou případech).
    31.3.2019 21:56 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    To teď nezkusím, je napájené na PCB, ale v podstatě by se mělo chovat jako kterékoli jiné zařízení, které není připojené. Tj. zadám nějakou I2C adresu, která neexistuje. Open vrací zase 4. Tak jsem možná mystifikoval, že mi to dříve vracelo -1, ale možné to je. Hrál jsem si s tím někdy před 6 měsíci a od té doby se wiringPI/gpio updatlo.
    31.3.2019 22:03 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Jinak když zapisuji/čtu na neexistující adresu, pak funkce vrací -1. První číslo je return code fce open, druhé pak wiringPiI2CReadReg16/wiringPiI2CWrite
    4!
    IN: 22.73 V
    4!
    -1!
    Unable to write I2C device: Remote I/O error
    channel 1: 1102977.00 V
    -1!
    Unable to write I2C device: Remote I/O error
    channel 2: 1102977.00 V
    -1!
    Unable to write I2C device: Remote I/O error
    channel 3: 1102977.00 V
    -1!
    Unable to write I2C device: Remote I/O error
    channel 4: 1102977.00 V
    -1!
    
    31.3.2019 22:22 debian+
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Premenne pred pouzitim maz. Lebo ked sa nic nezapise, v cecku zostava predchadzajuca hodnota (v pamati). Pred pouzitim obsah premennych nemaze.
    1.4.2019 20:30 m
    Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
    Že to vrací -1 při zápisu/čtení neexistujícího slave zařízení je OK. U inicializace nikdo neslibuje, že to má poznat, zda je zařízení přítomno ... nebo ano?

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.