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:44 | IT novinky

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl v březnu 5,33 % (Windows -4,28 %, OSX +1,19 %, Linux +3,10 %). Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 24,48 %. Procesor AMD používá 67,48 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 3
    včera 23:22 | IT novinky

    Společnost Apple slaví padesáté narozeniny. Založena byla 1. dubna 1976.

    Ladislav Hagara | Komentářů: 1
    včera 22:33 | Nová verze

    FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.24.0. Toto velké opravné vydání implementuje SABR (Server-Based Adaptive Bit Rate), což řeší část nedávných problémů s načítáním videí z YouTube, a aktualizuje základní komponenty jako Electron nebo přehrávač Shaka Player.

    |🇵🇸 | Komentářů: 2
    včera 16:33 | Humor

    Je tu opět apríl. O víkendu zmizel kamion s 12 tunami tyčinek KitKat. Firmy to využívají k aprílovým žertům. Groupon má super akci. Koupíte 1 tyčinku a dostanete 100 zdarma. Ryanair si přelepil letadla. Šéf Outlooku se ptá, proč mají v baráku 14 beden tyčinek KitKat (𝕏). Prusa Research představuje Prusa Pro ACU a vysvětluje proč přílišné sušení škodí vaším filamentům. Telefon Sony Xperia má miliónnásobný zoom (𝕏). PC.net představil Super Ultrabox 2600 se zajímavými parametry. Další aprílové novinky například na April Fools' Day On The Web.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | IT novinky

    Společnost OpenAI, která stojí za chatovacím robotem s umělou inteligencí (AI) ChatGPT, získala od investorů 122 miliard USD (2,6 bilionu Kč). Hodnota společnosti tak dosáhla 852 miliard dolarů (více než 18 bilionů Kč). Nejnovější kolo investování se stalo největší, jaké zatím firma uskutečnila, a peníze mají posílit ambiciózní plány rozšíření výpočetní kapacity, datových center a nábor talentů.

    Ladislav Hagara | Komentářů: 13
    včera 13:11 | IT novinky

    Nástroj k identifikaci občanů v on-line komunikaci s úřady byl dnes dopoledne zhruba dvě hodiny částečně nedostupný. Problém se objevil kolem 09:00 a podařilo se ho vyřešit kolem 11:00. Částečně nedostupná byla služba Národní identitní autority (NIA), problémy podle DIA (Digitální a informační agentura) ovlivňovaly přihlašování například i přes bankovní identitu. „Dostupnost NIA byla plně obnovena, přihlášení k digitálním službám

    … více »
    Ladislav Hagara | Komentářů: 4
    včera 13:00 | IT novinky

    Eben Upton oznámil další zdražení počítačů Raspberry Pi kvůli růstu cen pamětí a představil Raspberry Pi 4 s 3 GB RAM za 83,75 dolarů.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Humor

    Anthropic patrně omylem zveřejnil celý zdrojový kód svého CLI nástroje Claude Code prostřednictvím přiloženého sourcemap souboru v npm balíčku. Únik odhalil doposud nijak nezveřejněné funkce jako je například režim v utajení, autonomní agent 'KAIROS', orchestrace multi‑agentů, režim snění nebo dokonce virtuální mazlíček Buddy. Zajímavostí je detekce naštvání uživatele pomocí obyčejného regexpu. Anthropic rychle odstranil sourcemap a vydal opravu, nicméně kopie kódu se již stihly na GitHubu rozšířit mezi prostým lidem.

    NUKE GAZA! 🎆 | Komentářů: 18
    31.3. 14:33 | Humor

    Copilot automaticky vkládal do pull requestů 'propagační tipy', reklamní text se na GitHubu objevil ve více než jedenácti tisících pull requestech. Po vlně kritiky byla tato funkce zablokována a produktový manažer Tim Rogers připustil, že umožnit Copilotovi upravovat cizí pull requesty bez vědomí autorů byla chyba.

    NUKE GAZA! 🎆 | Komentářů: 4
    31.3. 12:55 | Upozornění

    Je 31. března a tedy Světový den zálohování (World Backup Day). Co by se stalo, kdyby Vám právě teď odešel počítač, tablet nebo telefon, který používáte?

    Ladislav Hagara | Komentářů: 5
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (5%)
     (1%)
     (14%)
     (24%)
    Celkem 1204 hlasů
     Komentářů: 29, poslední 31.3. 11:17
    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.