Czytając http://playground.arduino.cc/Linux/Udev wydaje się, że istnieje sposób na wypisanie się do EEPROM USB-Serial FTDI w celu ustawienia danego SerialNumber, umożliwiając identyfikację danego nano / innego arduino, aby poradzić sobie z tym konkretnie w UDEV.
Mam ładunek w stylu nano z adapterem USB-szeregowym QinHeng Electronics HL-340, który wyraźnie nie jest układem FTDI, a zatem programator FTDI nie działa. Czy ktoś zna alternatywne narzędzie / gdzie mogę znaleźć informacje, aby zrobić to samo z tym chipem?
Obecnie urządzenie identyfikuje się z:
[ 6850.608080] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 6850.701496] usb 2-1.2: New USB device found, idVendor=1a86, idProduct=7523
[ 6850.701505] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 6850.701510] usb 2-1.2: Product: USB2.0-Serial
[ 6850.702201] ch341 2-1.2:1.0: ch341-uart converter detected
[ 6850.704210] usb 2-1.2: ch341-uart converter now attached to ttyUSB0
Co jest w zasadzie bezużyteczne, ponieważ nie mogę zidentyfikować dołączonej planszy (kiedy dołączam dwie, ich szczegóły są takie same).
arduino-nano
ch340
jvc26
źródło
źródło
0
dlatego udev nie może rozróżnić wielu płyt podłączonych do tego samego komputeraOdpowiedzi:
W CH340 i rodzinie UART nie ma miejsca, w którym można by umieścić unikalny identyfikator. Jest to również problem dla typu PL2303. Próbowałem znaleźć rozwiązania tego problemu. Pierwszą i najłatwiejszą jest pozycja urządzenia na magistrali USB. Będzie unikalny dla każdego urządzenia. Jeśli używasz Linuksa, możesz znaleźć każde urządzenie pod / dev / serial / by-path. Istnieje również / dev / serial / by-id, ale będzie tam tylko jeden wpis dla tego urządzenia, ponieważ pokazuje ono ostatnie podłączone. Żetony FTDI będą miały tutaj unikalne wpisy. Tanie chipy tego nie zrobią, ale każdy z nich ma wpis w / dev / serial / by-path. Ta pozycja i nazwy urządzeń powinny pozostać przy ponownym uruchomieniu. Jeśli masz wiele zmian w urządzeniach USB, podłącz wszystkie urządzenia CH340 do tego samego koncentratora, a następnie podłącz je. Urządzenia będą wyliczać w kolejności, w jakiej są podłączone do koncentratora. Ta sztuczka z jednym hubem powinna działać również w systemie MacOS i Windows, powinny one być wyświetlane w tej samej kolejności.
Metoda trudniejsza - zasady udev. W przypadku urządzeń o unikalnym identyfikatorze, takich jak FTDI, możesz ustawić regułę udev, która widzi jej numer seryjny, a następnie tworzy dowiązanie symboliczne do tego urządzenia, jest to proste.
W przypadku urządzeń z tym samym numerem seryjnym lub bez niego jest to znacznie bardziej skomplikowane. Utworzyłem regułę udev, która wygląda następująco:
SUBSYSTEM == "tty", ATTRS {product} == "USB2.0-Serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == „7523”, ENV {ID_MM_DEVICE_IGNORE} = „1”
gdy urządzenie pasuje do produktu i dostawcy taniego arduino, uruchamia na przykład skrypt „cheapduino.py” z urządzeniem jako argumentem
cheapduino.py ttyUSB0
Następnie skrypt Cheapduino łączy się szeregowo z urządzeniem i wysyła ciąg „ID”, a oprogramowanie urządzenia odpowiada DEVID = THX1138 lub cokolwiek innego. Skrypt następnie tworzy dowiązanie symboliczne / dev / THX1138, które wskazuje na / dev / ttyUSB0
Ta metoda ma wiele wad. Skrypt musi przekroczyć limit czasu, jeśli oprogramowanie na Cheapduino nie odpowiada. Również nie korzysta z funkcji SYMLINK udev, więc nie usunie martwych linków po rozłączeniu, ale nadpisze je przy ponownym połączeniu. Wszystkie Twoje taniegoinos muszą mieć tę funkcjonalność w swoim oprogramowaniu, z ustawionymi różnymi identyfikatorami urządzeń. Wszystkie muszą używać tej samej szybkości transmisji co skrypt, chyba że chcesz napisać bardzo złożony skrypt, który zajmuje dużo czasu. Wreszcie, ta metoda działa znacznie lepiej przy niskiej prędkości transmisji niż przy wysokiej prędkości transmisji, co ze względów czasowych może się nie udać za każdym razem. (tanieduino są tanie!) 9600 działa znacznie lepiej niż 115200, które działa po kilku próbach. Ale ponieważ wszystkie twoje arduinos CH340 muszą mieć tę samą prędkość dzięki tej metodzie, możesz jechać tylko tak wolno, jak najszybsze urządzenie.
Ta metoda DZIAŁA jednak i używam jej, ponieważ kupiłem zbyt wiele z tych tanich rzeczy.
Na koniec kup oryginalne Arduinos lub przynajmniej te z układami FTDI lub coś innego, co wysyła unikalny identyfikator urządzenia.
= Bogaty
źródło
Jeśli chcesz rozdzielić 2 urządzenia, które są w zasadzie identyczne, masz 2 sposoby:
źródło
CH340B (nie G) ma pamięć EEPROM, w której można zapisać numer seryjny.
https://www.mpja.com/download/35227cpdata.pdf
Istnieje również narzędzie do Windows do odczytu / zapisu:
http://www.downxia.com/downinfo/196126.html
Spróbuję zainstalować i zobaczyć, jak zachowuje się wersja G ...
źródło
Umieść Maxim DS18S20 na swojej płycie, każda ma unikalny numer seryjny i jest bardzo tania. Istnieje wiele przykładów oprogramowania w Internecie za pomocą tego urządzenia. Mógłbyś zarzucić błąd nano. do działania potrzebuje rezystora 4,7 K podłączonego do +5 i uziemienia. Do uziemienia można podłączyć zarówno 5 V, jak i uziemienie urządzenia. Łatwo byłoby zgubić ten błąd do nano, a następnie poprzez prostą komunikację za pomocą jednego pinu można uzyskać numer seryjny. Dostępnych jest kilka pakietów. Ostrożnie możesz użyć wtyku wejściowego, przeczytać numer seryjny i zachować go do wykorzystania w przyszłości. Kiedy rozpocznie się, zrobi to ponownie. Tylko upewnij się, że sygnał wejściowy nie jest obniżany podczas procesu inicjalizacji.
Powodzenia,
Gil
źródło
Nienawidzę tego mówić, ale odpowiedź brzmi nie, nie ma sposobu na jednoznaczną identyfikację wielu konwerterów USB-serial na bazie 340.
Mam ten sam problem, ponieważ mam wiele (4+) konwerterów USB-szeregowych, każdy może być podłączony do dowolnego portu i zostały zakupione w tym samym czasie, a zatem są identyczne pod każdym względem (w tym iSerial 0).
Zasadniczo, jeśli przenoszę rzeczy, muszę się połączyć ręcznie, aby zobaczyć, co jest dołączone, przejrzeć wyjście dmesg itp. To duży ból.
Tomek
źródło