Otázka:
Jak rozlišovat mezi 2 Micros v Linuxu
Ben
2015-08-28 00:03:56 UTC
view on stackexchange narkive permalink

Mám 2 zařízení na bázi Arduino Micro, která chci použít na svém stroji s Ubuntu Linux. Potřebuji, aby měli jedinečné sériové porty. Bohužel oba mají stejné sériové číslo, což ztěžuje identifikaci pomocí pravidel udev (pokud není nemožné).

Toto je sériové číslo, které dostanu pro oba:

  $ udevadm info -a -p $ (udevadm info -q cesta -n / dev / ttyACM0) | grep -i serial ATTRS {serial} == "0000: 00: 14.0"  

Existuje nějaký způsob, jak ručně nastavit sériové číslo na Arduino Micro? Nebo existují nějaké jiné jedinečné identifikační vlastnosti, které mohu použít pro pravidla udev?

Obvykle něco takového dělám v mém souboru /etc/udev/rules.d/99-usb-serial.rules :

  SUBSYSTEM == "tty", ATTRS {product} == "Arduino Uno", ATTRS {serial} == "64936333936351911191", SYMLINK + = "MyDevice"  

Postranní poznámka: Také mít termín, který má stejné sériové číslo jako Micros, ale protože ATTRS {product} je jiný, mohu ho odlišit.

Dva odpovědi:
Majenko
2015-08-28 02:38:57 UTC
view on stackexchange narkive permalink

USB VID, PID a sériové číslo jsou do čipu naprogramovány při nahrávání náčrtu. VID a PID jsou spojeny s deskou a sériové číslo je vždy stejné bez ohledu na to, která deska.

Takže bez ohledu na to, kterou desku naprogramujete, získá stejné podrobnosti jako kterákoli jiná deska stejné druh.

Neexistuje žádná možnost změnit sériové číslo (existuje, IIRC, ve skutečnosti není definováno žádné sériové číslo), ale VID a PID jsou poskytovány jako dvojice maker na příkazovém řádku kompilace: USB_VID a USB_PID.

Takže můžete (cheakily) vytvořit novou definici desky (na základě stávající Micro), která je „The Other Micro“ a poskytnout jiný (neoficiální) PID k této desce. Poté můžete dvě desky v udev rozlišit pomocí kombinace VID / PID.

Samozřejmě musíte zajistit, aby byla při jejich programování vybrána správná deska a aby bylo možné vstoupit do bootloaderu na desce „other“ by se vrátil zpět ke starému PID, který je naprogramován do bootloaderu, ale jsem si jistý, že to zvládnete.

Ran Talbott
2019-01-07 12:00:25 UTC
view on stackexchange narkive permalink

Že „0000: 00: 14.0“ není sériové číslo pro Arduino: udevadm tiskne informace pro více než jedno zařízení, a to je pro čip řadiče USB.

Arduinos postavený na ATMEGA32U4 neobdrží sériové číslo: Mám nějaký Leonardos, který mi dává stejný problém jako vy. Když byl bootloader původně navržen, programátor jej neměl nahlásit. Našel jsem upravený zavaděč, který ano, ale ještě jsem to nezkoušel: http://forum.arduino.cc/index.php?topic=503703.0

Originální Arduino s čipem FTDI hlásí jedinečná sériová čísla. Některé knock-offy jej buď nenastavují na čipu, nebo jej mohou nastavit na jiné než jedinečné číslo (přeskočením tohoto kroku ušetříte pár centů výrobních nákladů). U těch, kteří používají pro rozhraní USB čip 16U2 (například Uno R3), se předpokládá , aby získali jedinečné sériové číslo. Čínské, které jsem si právě koupil, to udělaly, ale je možné, že ostatní jejich tvůrci jsou na špici, jako to dělají někteří uživatelé FTDI čipů.

Arduinos, kteří používají čínský USB čip CH340, také nehlásí sériové číslo : čip to nepodporuje. Myslím , že to platí i pro CP2102, ale nejsem si jistý.

Možná můžete být schopni vyřešit problém s tímto upraveným zavaděčem ( Doufám, že ano: Mám půl tuctu Leonardos a je to potíže, kdykoli mám připojeno více než jeden současně. Naštěstí je běžně nepoužívám jako „PC periferie“). Nebo si můžete koupit další z „drobných“ Arduinos s 328P, který používá USB-to-sériový čip, a rozlišit je podle pravidel udev na VID a PID.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...