UDEV, FT232, CP210x, CH34x & die Paßkontrolle am USBPort...

Alles andere hier herein
Antworten
Benutzeravatar
yeti
Beiträge: 2153
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

UDEV, FT232, CP210x, CH34x & die Paßkontrolle am USBPort...

Beitrag von yeti »

----------8<-----{20161226-1537-GMT}----->8----------

Die FTDI-USB-UARTs haben eine Seriennummer, mithilfe derer sie eindeutig identifizierbar sind und so kann UDEV individuell benamste /dev-Einträge anlegen: http://hintshop.ludvig.co.nz/show/persi ... l-devices/

Den CH34x-Mitbewerbern auf die Details geschaut fand ich Dergleichen nicht... :-(

Der FT232 (zumindest das Original) ist manipulierbar (IDs ändern usw)... zum CH34x fand ich auch dazu bislang Nix... :-/

Welche anderen USB<->UART-Wandler haben auch Seriennummern und/oder andere durch Umflashen manipulierbare Eigenschaften, die eine Individualisierung unterstützen?

----------8<-----{20170425-0916-GMT}----->8----------

Ok... das lag auch viel zu lange herum... *hust!* ...fette Staubschicht drauf... *keuch!*

Jetzt hab ich mal meinem bevorzugten Propeller-Platinchen einen passenden Eintrag gezimmert:

Code: Alles auswählen

(yeti@kumari:1)~$ cat /etc/udev/rules.d/99-local-usb-serial.rules 
##
## 99-local-usb-serial.rules
##

##++
## see http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/
##
## examples mentioned there:
##
#SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A6008isP", SYMLINK+="arduino"
#SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A7004IXj", SYMLINK+="buspirate"
#SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDIF46B", SYMLINK+="ttyUSB.ARM"
##--

##++
## Gadget Gangster Propeller Platform USB SD (Hong-Kong Clone)
##
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A800BSBW", SYMLINK+="GG-PP-SD-USB-HK-C"
##--
...was nach...

Code: Alles auswählen

 (yeti@kumari:1)~$ sudo service udev reload
...dann sogar ohne Reboot nach Anstöpselung des Boards das gewünschte Ergebnis zeigt. Es gäbe auch andere Methoden, dies anzustoßen, aber darauf kam ich erst später...

Code: Alles auswählen

(yeti@kumari:1)~$ ls -l /dev/GG-PP*
lrwxrwxrwx 1 root root 7 Apr 25 08:42 /dev/GG-PP-SD-USB-HK-C -> ttyUSB0
(yeti@kumari:1)~$ ls -l /dev/ttyUSB0 
crw-rw-rw- 1 root dialout 188, 0 Apr 25 08:42 /dev/ttyUSB0
Die Gestaltung der Namen muß ich noch überdenken, vielleicht ist Großbuchstaberitis dabei kein schlechter Gedanke, um eigene Namen deutlich von weithin bekannten Standardnamen zu trennen...

Testing... 1 2 Test!

Code: Alles auswählen

(yeti@kumari:1)~/wrk/propeller/spinsim/mandelbrot$ /opt/p1load/bin/p1load -?
p1load - a simple loader for the propeller - v0.1-21-g03cc4cd, Mar 30 2016
usage: p1load
         [ -b baud ]               baud rate (default is 115200)
         [ -D var=val ]            set variable value
         [ -e ]                    write a bootable image to EEPROM
         [ -p port ]               serial port (default is to auto-detect the port)
         [ -P ]                    list available serial ports
         [ -r ]                    run the program after loading (default)
         [ -t ]                    enter terminal mode after running the program
         [ -T ]                    enter PST-compatible terminal mode
         [ -v ]                    verbose output
         [ -? ]                    display a usage message and exit
         file                      file to load
(yeti@kumari:1)~/wrk/propeller/spinsim/mandelbrot$ /opt/p1load/bin/p1load -P
/dev/ttyUSB0
Den selbstgestrickten Symlink-Namen erkennt das Proggie leider nicht automagisch, aber das könnt man ihm noch beibiegen. Ob das den Aufwand lohnt? Warten wir's ab — sitzen wir's aus... :-P

Code: Alles auswählen

(yeti@kumari:1)~/wrk/propeller/spinsim/mandelbrot$ /opt/spin2cpp/bin/fastspin -L /opt/parallax.spin.src/spin mandelbrot-20140623-fds-102x35.spin 
Propeller Spin/PASM Compiler 'FastSpin' (c) 2011-2016 Total Spectrum Software Inc.
Version 3.6.2 Compiled on: Apr 24 2017
mandelbrot-20140623-fds-102x35.spin
|-FullDuplexSerial.spin
Done.
Program size is 1732 bytes
(yeti@kumari:1)~/wrk/propeller/spinsim/mandelbrot$ /opt/p1load/bin/p1load -p /dev/GG-PP-SD-USB-HK-C -t -b 115200 mandelbrot-20140623-fds-102x35.binary 
Found propeller version 1 on /dev/GG-PP-SD-USB-HK-C
\\o   \o/   o//   PARTY ON!!!   \\o   \o/   o//

Code: Alles auswählen

Loading 'mandelbrot-20140623-fds-102x35.binary' (1732 bytes)
Loading hub memory ... OK
[ Entering terminal mode. Type ESC or Control-C to exit. ]
!!!!!!!!!!!!!!!!!"""""""""""""##############################$$$$$$$%&&%%%$$$$$$#######"""""""""""""""
!!!!!!!!!!!!!!!""""""""""##############################$$$$$$$$$%%%&',)'&&&%$$$$$$$########""""""""""
!!!!!!!!!!!!!"""""""""#############################$$$$$$$$$$$%%%%&&')+5*,:)&%$$$$$$$$########"""""""
!!!!!!!!!!!!"""""""############################$$$$$$$$$$$$$%%%%%&''()-03+)('&%%%$$$$$$$$########""""
!!!!!!!!!!!"""""############################$$$$$$$$$$$$$%%%%%&&'39:.:9::2-,:(&%%%%%$$$$$$$#########"
!!!!!!!!!!""""###########################$$$$$$$$$$$$$%%%&&&&&''()74:::::::4+(''&&%%%%%%$$$$#########
!!!!!!!!!"""##########################$$$$$$$$$$$%%%%'''()(''(())*,1::::::::+*)(('&&&&&&(&%$$$#######
!!!!!!!!"""########################$$$$$$$$%%%%%%%&&')-:4/:++0::5:::::::::::::56::*))))*.*'&%$$######
!!!!!!!""#######################$$$$$%%%%%%%%%%&&&&'()*::::::::::::::::::::::::::::0::::5-7&%%$$#####
!!!!!!""####################$$$%%%%%%%%%%%%%&&&&&'():,-:::::::::::::::::::::::::::::::::/('&%%%$$####
!!!!!!"##############$$$$$$%&)('&&&&&&&&&&&&''''((*2:::::::::::::::::::::::::::::::::::::*((&%%$$$###
!!!!!"########$$$$$$$$$%%%%&&-0*))((()2,)((''((()+:::::::::::::::::::::::::::::::::::::::::5,&%$$$$##
!!!!!#####$$$$$$$$$$%%%%%%&&'')*,1::.52::/36+***+:::::::::::::::::::::::::::::::::::::::::+('&%$$$$##
!!!!"##$$$$$$$$$$$%%%%%%%&'''(*+-4::::::::::::0-.::::::::::::::::::::::::::::::::::::::::::5'%%$$$$$#
!!!!#$$$$$$$$$$%%%%%&&&'(.*))+-8::::::::::::::::5::::::::::::::::::::::::::::::::::::::::::'&%%$$$$$#
!!!!$$%%%%%%&&&&&&&''''))+4:::5::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)'&%%%$$$$$#
!!!!)+-,-..0:13:5:2316:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::7-*('&&%%%$$$$$#
!!!!$$%%%%%%&&&&&&&''''))+4:::5::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)'&%%%$$$$$#
!!!!#$$$$$$$$$$%%%%&&&&'(.*))+-5::::::::::::::::5:::::::::::::::::::::::::::::::::::::::::3'&%%$$$$$#
!!!!"##$$$$$$$$$$$%%%%%%%&'''(*+-3::::::::::::0..:::::::::::::::::::::::::::::::::::::::::::'%%$$$$$#
!!!!!####$$$$$$$$$$$%%%%%%&&'')*,1::/32::/35,***+:::::::::::::::::::::::::::::::::::::::::+('&%$$$$##
!!!!!"########$$$$$$$$$%%%%&&//*))((()2,)(('(((()+:::::::::::::::::::::::::::::::::::::::::5-&%$$$$##
!!!!!!"##############$$$$$$%&))'&&&&&&&&&&&&''''((*/:::::::::::::::::::::::::::::::::::::*((&%%$$$###
!!!!!!""####################$$$%%%%%%%%%%%%%&&&&&'():,.:::::::::::::::::::::::::::::::::-('&%%%$$####
!!!!!!!""#######################$$$$$%%%%%%%%%%&&&&'()*::::::::::::::::::::::::::::1::::5-.&%%$$#####
!!!!!!!!"""########################$$$$$$$$%%%%%%%&&')-:5/:++0::6:::::::::::::5:::*))))*.*'&%$$######
!!!!!!!!!"""##########################$$$$$$$$$$$%%%%'''()(('(())*,1:::::::4+*)(('&&&&&&)&%$$$#######
!!!!!!!!!!""""###########################$$$$$$$$$$$$$%%%&&&&&''():4:::::::3+(''&&%%%%%%$$$$#########
!!!!!!!!!!!"""""############################$$$$$$$$$$$$$%%%%%&&'27:.::::2-,8(&%%%%%$$$$$$$#########"
!!!!!!!!!!!!"""""""############################$$$$$$$$$$$$$%%%%%&''().03+)('&%%%$$$$$$$$########""""
!!!!!!!!!!!!!"""""""""#############################$$$$$$$$$$$%%%%&&'(*6+-:)&%%$$$$$$$########"""""""
!!!!!!!!!!!!!!!""""""""""##############################$$$$$$$$$%%%&'-*'&&&%$$$$$$$########""""""""""
!!!!!!!!!!!!!!!!!"""""""""""""##############################$$$$$$$%&&%%%$$$$$$#######"""""""""""""""
!!!!!!!!!!!!!!!!!!"""""""""""""""""##############################################""""""""""""""""""""
...ESC gedrückt...

Code: Alles auswählen

(yeti@kumari:1)~/wrk/propeller/spinsim/mandelbrot$ _
...ok... und einen Patch für den Loader, um vom Propeller aus gesteuert die Terminalfunktion zu beenden, sollt vielleicht auch noch her... mal irgendwann drüber brüten und dann mit Dave schwatzen... ich werd auch versuchen, dabei nicht wie HAL9000 zu klingen... versprochen... ;-) ...mwhuaahahahahahahaaaa...

Edit@20181020-1954: Das gibt es tatsächlich! Seit wann, ist mir nicht klar, aber "propeller-load" aus dem PropGCC-Umfeld kann durch senden einer magischen 3-Byte-Sequenz verlassen werden. "p1load" habe ich das zumindest in einer lokalen Kopie beigebracht (das harrt noch der Abnickung durch DBetz) und Eric hat es seinem Clone von "PropLoader" beigebogen.

----------8<-----{20170425-1059-GMT}----->8----------

Jetzt hat auch der C3 ein Symlink-Namensschildchen bekommen...

Code: Alles auswählen

(yeti@kumari:1)~$ fgrep -B3 -A1 A8004HWW /etc/udev/rules.d/99-local-usb-serial.rules 
##++
## Propeller C3
##
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A8004HWW", SYMLINK+="PROPELLER-C3"
##--
(yeti@kumari:1)~$ ls -l /dev/{PR*,ttyUSB1} 
lrwxrwxrwx 1 root root         7 Apr 25 11:00 /dev/PROPELLER-C3 -> ttyUSB1
crw-rw-rw- 1 root dialout 188, 1 Apr 25 11:00 /dev/ttyUSB1
...aber Prop-Plug, Demoboard, unzig Arduinetten und all die anderen Haustierchen mit FTDI aus den Sedimenten zerren war mir dann doch zuviel des Guten. Die bekommen inkrementell ihre Einträge bei ihren nächsten Einsätzen...

----------8<-----{20170425-1130-GMT}----->8----------

Wer sieht, was als Nächstes anliegt?

Richtig!

Jedermann-schreib und -lesbar sollten die Teile dann vielleicht doch besser nicht sein. Meine Unixen bespaße ich zwar ganz alleine, aber trotzdem hätte ich es gern ordentlich...

...aber das muß noch'n bissl warten, denn jetzt verlangt erstmal das Echtleben nach Interaktion mit mir... :-(

----------8<-----{20170425-1715-GMT}----->8----------

Zwischenspiel:
[url]https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf[/url], Seite 4 hat geschrieben:The on-chip programmable ROM may be used to customize the USB Vendor ID, Product ID, Product Description String, Power Descriptor, Device Release Number, and Device Serial Number as desired for OEM applications.
The programmable ROM is programmed on-board via the USB, allowing the programming step to be easily integrated into the product manufacturing and testing process.
...die 2102-Kerlchen haben also auch Seriennummern... mal schauen, wo in den Sedimenten sich meine 2102-USB-Pröppel verstecken...
Hmmmm... "on-chip programmable ROM" klingt aber halbwegs böse... vielleicht meinen sie das ja nicht ganz so ernst und es ist änderbar?

CP2102-USB-Seriell-Pröppel fand ich auf die Schnelle nur eines der theoretisch 4 vorhandenen Individuen und damit ist schlecht vergleichen.

Zwei NodeMCU-Amicas zeigen leider die selbe "iSerial":

Code: Alles auswählen

Bus 001 Device 126: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x10c4 Cygnal Integrated Products, Inc.
  idProduct          0xea60 CP210x UART Bridge / myAVR mySmartUSB light
  bcdDevice            1.00
  iManufacturer           1 Silicon Labs
  iProduct                2 CP2102 USB to UART Bridge Controller
  iSerial                 3 0001
  bNumConfigurations      1
Der idProduct-Text ist vermutlich bei anderen Geräten mit CP2102 nicht der Selbe wie hier und wird vermutlich nicht per Maske beim Belichten/Ätzen des Chips einkodiert. In einem ruhigen Moment muß ich also mal nach einem CP210x-Tool zum Verändern dieser Werte suchen.

Bedingter Optimismus wird durch folgende Fundstelle getriggert:
[url]https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf[/url], Seite 17 hat geschrieben:8. Internal Programmable ROM

The CP2102 includes an internal electrically erasable programmable read-only memory (EEPROM), and the CP2109 includes an internal one-time programmable (OTP) erasable programmable read-only memory (EPROM). Either may be used to customize the USB Vendor ID (VID), Product ID (PID), Product Description String, Power Descriptor, Device Release Number and Device Serial Number as desired for OEM applications. If the EEPROM/EPROM is not programmed with OEM data, the default configuration data shown in Table 13 is used. The EEPROM has a typical endurance of 100,000 write cycles with a data retention of 100 years. The EPROM can only be written one time and cannot be erased.
...aber jetzt erstmal Kalorien-Input!

----------8<-----{20170425-1811-GMT}----->8----------

Ok... da gibt es mindestens "CP210x Programmer" und "cp210x-cfg", aber darüber muß ich erst mehr wissen, bevor ich das auf meine CP2102er loslasse...

----------8<-----{20170425-2009-GMT}----->8----------

...uuund was ist mit CH34x?

[StackExchange/Arduino] Setting serial number on CH340 USB-Serial device

Mit CH34x, det wird wohl nix. :-(

----------8<-----{20170427-0752-GMT}----->8----------

Mit "MODE:=" statt "MODE=" klappt nun auch das Wegfiltern des Jedermann-Zugriffs.

Code: Alles auswählen

(yeti@kumari:12)~$ fgrep -B2 NANO-3.0-3 /etc/udev/rules.d/99-local-usb-serial.rules 
SUBSYSTEM=="tty", \
        ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="AH01GHFS", \
        OWNER="yeti", GROUP="yeti", MODE:="0660", SYMLINK+="ARDUINO-NANO-3.0-3"
(yeti@kumari:12)~$ ls -l /dev/{ARDUINO,ttyUSB}*
lrwxrwxrwx 1 root root      7 Apr 27 07:43 /dev/ARDUINO-NANO-3.0-3 -> ttyUSB0
crw-rw---- 1 yeti yeti 188, 0 Apr 27 07:43 /dev/ttyUSB0
Das bedeutet, irgendwo nach meinen Regeln wurde erneut am Modus dieses Device-Knotens gedreht.
Zuweisung mit "=" kann von späteren Regeln noch geändert werden, Zuweisung mit ":=" ist endgültig.

----------8<-----{20170427-0844-GMT}----->8----------

Noch keinen Projekten fest zugewiesene FT232R-Module will ich erstmal unter ihrer Seriennummer registrieren.

Code: Alles auswählen

(yeti@kumari:12)~$ fgrep -B1 -A1 A9M9DV3R /etc/udev/rules.d/99-local-usb-serial.rules 
SUBSYSTEM=="tty", \
        ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A9M9DV3R" \
        OWNER="yeti", GROUP="yeti", MODE:="0660", SYMLINK+="FT232R-$attr{serial}"
(yeti@kumari:12)~$ ls -l /dev/{FT,ttyUSB}*
lrwxrwxrwx 1 root root      7 Apr 27 08:31 /dev/FT232R-A9M9DV3R -> ttyUSB0
crw-rw---- 1 yeti yeti 188, 0 Apr 27 08:31 /dev/ttyUSB0
Pestens, pestens!

Dank "FT232R-$attr{serial}" muß die Seriennummer nicht mehrfach in der Regel auftauchen, was Fehler durch schlampertes Duplizieren und Modifizieren vorhandener Regeln deutlich minimiert. Ich kenn mich doch: Nachm Kopieren einer Regel und dem Ändern des "ATTRS{serial}" Vergleiches würd ich manches Mal das Ändern der Seriennummer beim Basteln des Symlinknamens vergessen anzupassen... o:-)

----------8<-----{20170427-1305-GMT}----->8----------

Ich hab mich dann man gaaanz muuutig an https://github.com/DiUS/cp210x-cfg herangewagt. Von den beiden mir bekannten Kandidaten war es der mit dem jüngeren Änderungsdatum in den Quellen (letzte Änderung vor ein paar Monaten) und so unterstelle ich mal, daß der Code noch gepflegt wird.

Da ich wohl kaum mehr als einen CP210x pro Sekunde programmieren werde, hielt ich die Unix-Timestamp (in Sekunden) für eine brauchbare Seriennummer:

Code: Alles auswählen

(ruth@kumari:7)~$ sudo /opt/cp210x-cfg/bin/cp210x-cfg -S $(date +@%s)
(ruth@kumari:7)~$ sudo lsusb -v |& grep -A14 '^Bus.*CP210x'
Bus 001 Device 006: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x10c4 Cygnal Integrated Products, Inc.
  idProduct          0xea60 CP210x UART Bridge / myAVR mySmartUSB light
  bcdDevice            1.00
  iManufacturer           1 Silicon Labs
  iProduct                2 CP2102 USB to UART Bridge Controller
  iSerial                 3 @1493297474
(ruth@kumari:7)~$ date -d @1493297474
Do 27. Apr 12:51:14 UTC 2017
\o/     YESSSsss...!!!     \o/

Die CP210x-Module dürfen bleiben!

----------8<-----{20170430-1312-GMT}----->8----------

Diese süßen kleinen 6pinnigen CP2102-Module mit DTR, 3.3V und 5V plus vielleicht noch 'n kleinen 3.3V-Regler, Quarz und EEPROM machen vermutlich 'n ganz netten und günstigen PropStick-Selbstbau möglich.

----------8<-----{This line temporarily left blank...}----->8----------
Zuletzt geändert von yeti am Sa 20. Okt 2018, 20:54, insgesamt 1-mal geändert.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2153
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: UDEV, FT232, CP210x, CH34x & die Paßkontrolle am USBPort

Beitrag von yeti »

----------8<-----{20180905-1706-GMT}----->8----------

Nach 0.62845 Ewigkeiten hatte ich mal wieder Grund an den UDEV-Regeln zu schrauben. Dabei habe ich wieder ohne Erfolg versucht herauszufinden, wie man statt den Symlink auf eine USB-Serielle anzulegen gleich den Namen des Device-Nodes ändern kann. IrGÄHNdwo in der Logfiles stand dann was von (frei übersetzt) "Kernel-Gerätenamen können nicht umbenannt werden".

Hat jemand anderslautende Erfahrungen, Informationen, Links, Gerüchte, ... zu bieten?

----------8<-----{Meh!}----->8----------


Zuletzt als neu markiert von yeti am Sa 20. Okt 2018, 20:55.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Antworten