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 08:55 | Zajímavý projekt

Uživatel GitHubu joeycastillo představil The Open Book Project, jehož cílem je vytvořit open-source čtečku elektronických knih. Projekt se zatím nachází v rané fázi vývoje, už nyní ale obsahuje použitelný návrh hardware prototypu „Feather Wing“, jehož cílem má být ověření konceptu na 4,2palcovém displeji. Tento koncept je postaven na kitu Adafruit Feather M4 Express, který ovládá hlavní desku s displeji a tlačítky. Po úspěšném ověření

… více »
Bystroushaak | Komentářů: 0
dnes 05:00 | Nová verze

Byla vydána verze 5.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Zajímavý projekt

Byly zveřejněny schémata, firmware a instrukce pro sestavení trackballu Ploopy. Ten používá Arduino, senzor PMW3360 a 1,75palcovou kouli. Zdrojové soubory jsou šířeny pod open-hardware licencí CERN a GNU GPLv3. Tvar je inspirovaný klasickým trackballem Microsoft Trackball Explorer, jehož výroba byla ukončena kolem roku 2005 bez náhrady; projekt Ploopy se k tomu ale z právních důvodů nehlásí. Již vyrobené díly je možno objednat za 200 kanadských dolarů. Další podrobnosti v příspěvcích uživatele crop_octagon na Redditu.

Fluttershy, yay! | Komentářů: 10
včera 20:22 | Nová verze

Vyšlo desktopové prostředí KDE Plasma 5.17. Novinkou je např. „noční režim“ (pro X11, nejen Wayland), skrytí upozornění při prezentacích (když je připojena obrazovka se stejným obrazem), lepší podpora HiDPI, optimalizace využití zdrojů a mnoho drobných zlepšení a oprav.

Fluttershy, yay! | Komentářů: 2
včera 12:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 169. brněnský sraz, který proběhne v pátek 18. října od 19:00 v restauraci Racek (Jungmanova 5). Před srazem proběhne v 18:00 komentovaná prohlídka nových prostor hackerspacu base48 (přístup je z Mojmírova náměstí).

Ladislav Hagara | Komentářů: 8
včera 05:55 | Bezpečnostní upozornění

V příkazu sudo byla nalezena a ve verzi 1.8.28 byla již opravena bezpečnostní chyba CVE-2019-14287. V souboru /etc/sudoers lze nastavit, aby daný uživatel mohl konkrétní příkaz spouštět s právy libovolného uživatele (ALL) nebo libovolného uživatele kromě uživatele root (ALL, !root). Spustí-li tento uživatel daný příkaz se sudo s volbou -u#-1 nebo -u#4294967295, tj. pod uživatelem -1 nebo 4294967295, nebude vyžadována autentizace a příkaz se spustí pod právy roota.

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

Po více než roce a čtvrt od vydání verze 3.7.0 byla vydána nová verze 3.8.0 programovacího jazyka Python. Přehled novinek v aktualizované dokumentaci. Podrobný přehled změn v Changelogu.

Ladislav Hagara | Komentářů: 15
14.10. 16:11 | IT novinky

Ke zhlédnutí na Invidious a YouTube je videozáznam rozborky a sborky mobilního telefonu Librem 5.

Ladislav Hagara | Komentářů: 47
14.10. 13:33 | Komunita

Richard Stallman, zakladatel hnutí svobodného softwaru, se dnes v e-mailové konferenci guix-devel vyjádřil, že svobodný software je apolitický, resp. jedinou přípustnou politikou je politika svobodného softwaru. Reagoval na některé návrhy, že by se do svobodného softwaru měl zabudovat feminismus nebo jiný -ismus. Říká, že témata jako komunismus nebo sexuální orientace jsou „off-topic“. Je v pořádku mít politické názory, ale lidé

… více »
xkucf03 | Komentářů: 104
14.10. 05:55 | Nová verze

Po téměř dvou letech vývoje od vydání verze 2.0 byla vydána verze 2.1.0 svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 3
Kdy jste naposledy viděli počítač s připojeným běžícím CRT monitorem?
 (19%)
 (4%)
 (11%)
 (39%)
 (24%)
 (2%)
Celkem 401 hlasů
 Komentářů: 22, poslední 23.9. 08:36
Rozcestník

www.AutoDoc.Cz

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

30.3. 14:14 milanc
I2C přes wiringpi na RPI (2x slave)
Přečteno: 443×
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. 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. 17:08 MilanC | skóre: 12
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. 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. 20:30 Jendа | skóre: 75 | blog: Výlevníček | 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.
Postavil si radar na kopci. Ale viděl na něm věci.
31.3. 21:52 MilanC | skóre: 12
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. 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. 23:58 pepe_ | skóre: 47
Rozbalit Rozbalit vše Re: I2C přes wiringpi na RPI (2x slave)
31.3. 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. 21:56 MilanC | skóre: 12
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. 22:03 MilanC | skóre: 12
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. 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. 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.