China Arduino Nano mit FT232RL keine eindeutige UART ID?

OP #4832991
Lesenswert?

Hallo,

für ein Heimautomatisierungs-Projekt möchte ich ein paar Arduino Nano 
programmieren. Hierfür habe ich mir aus China (Aliexpress) ein paar 
Arduinos bestellt.

Nun habe ich festgestellt, dass mir in Linux "ls /dev/serial/by-id/" nur 
folgendes ausgibt: "usb-FTDI_FT232R_USB_UART_00000000-if00-port0"
Dies ist meiner Kenntnis nach keine eindeutige ID, demnach kann ich 
nicht mehrere Arduinos gleichzeitig an einem Microcontroller (Raspberry) 
verwenden.

Ist das ein Einstellungsfehler von mir oder sind die FTDI Chips gefaked? 
Ich habe schon auf 
http://zeptobars.com/en/read/FTDI-FT232RL-real-vs-fake-supereal 
geschaut, meine Chips sehen eher gefaked aus. Nach 
http://binefa.cat/blog/?p=80 stimmen bei faked FT232RL die "ID" 
0403:0000 lauten muss, bei mir lautet diese allerdings "Bus 001 Device 
005: ID 0403:6001 Future Technology Devices International, Ltd FT232 
USB-Serial (UART) IC".

Möglicherweise hat ja jemand einen Tipp!

Vielen Dank für eventuelle Hilfestellungen.
Gast #4833008
Lesenswert?

Hallo,

Ich hatte auch mal solche Chips. Meine konnte ich mit dem FTDI Tool 
umprogrammieren. Da gibt es eine Einstellung für eine Manuelle ID. Da 
muss man dann halt selber hochzählen ;-)
Einen davon habe ich jetzt schon ca. ein halbes Jahr im Dauereinsatz, 
bisher keine Probleme.
Persönliche Seite #4833028
Lesenswert?

Max M. schrieb:
> Dies ist meiner Kenntnis nach keine eindeutige ID, demnach kann ich
> nicht mehrere Arduinos gleichzeitig an einem Microcontroller (Raspberry)
> verwenden.

Man kann auch USB-Geräte gleichzeitig verwenden, die keine eineindeutige 
ID (Seriennummer) verwenden. Unterscheiden lassen sich die dann durch 
ihre Position im USB-Gerätebaum, d.h. der Nummer des Anschlusses am 
jeweils verwendeten USB-Hub.

Das schafft sogar der USB-Stack von Windows.
#4833291
Lesenswert?

Rufus Τ. F. schrieb:
> Man kann auch USB-Geräte gleichzeitig verwenden, die keine eineindeutige
> ID (Seriennummer) verwenden. Unterscheiden lassen sich die dann durch
> ihre Position im USB-Gerätebaum, d.h. der Nummer des Anschlusses am
> jeweils verwendeten USB-Hub.

Das hilft dem OP genau gar nicht, denn es ist trotzdem von der 
Reihenfolge des Ansteckens abhängig welches ttyUSBx zu welchem USB Gerät 
gehört. Genau das will aber der OP nicht haben.
Gast #4833302
Lesenswert?

> Das hilft dem OP genau gar nicht, denn es ist trotzdem von der
> Reihenfolge des Ansteckens abhängig welches ttyUSBx zu welchem USB Gerät
> gehört.

Die Zuordnung zum 'x' in ttyUSBx schon, aber nicht die Zuordnung zur 
Position im Gerätebaum.

Praktischer ist es trotzdem wenn man eine Seriennummer vergibt und sich 
dann ein paar udev-Regeln gönnt.
Persönliche Seite #4833313
Lesenswert?

Jim M. schrieb:
> denn es ist trotzdem von der Reihenfolge des Ansteckens abhängig
> welches ttyUSBx zu welchem USB Gerät gehört.

Das unterscheidet sich dann vom Verhalten unter Windows. Dort wird für 
ein Gerät ohne Seriennummer die zugehörige virtuelle Schnittstelle in 
Abhängigkeit von der Position im USB-Baum zugewiesen. Wird das Gerät an 
einer anderen USB-Buchse angeschlossen, hat es einen anderen Ort im 
USB-Baum und wird folglich mit einer anderen virtuellen Schnittstelle 
verknüpft.

Sind die ttyUSBx immer monoton aufsteigend numeriert? Dann geht das 
natürlich nicht.

Dann wird mehr Aufwand nötig; mit lsusb -t sollte sich der USB-Baum 
ausgeben lassen.
1
    root@linaro-ubuntu-desktop:/# lsusb -t
2
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=s5p-ohci/3p, 12M
3
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=s5p-ehci/3p, 480M
4
        |__ Port 2: Dev 2, If 0, Class=vend., Driver=smsc95xx, 480M
5
        |__ Port 3: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
6
            |__ Port 3: Dev 13, If 0, Class=hub, Driver=hub/7p, 480M
7
                |__ Port 1: Dev 14, If 0, Class=vend., Driver=ftdi_sio, 12M
8
                |__ Port 5: Dev 15, If 0, Class=vend., Driver=ftdi_sio, 12M
9
                |__ Port 6: Dev 16, If 0, Class=vend., Driver=ftdi_sio, 12M
10
                |__ Port 7: Dev 17, If 0, Class=vend., Driver=ftdi_sio, 12M
(Willkürliches, im Netz gefundenes Beispiel)

Jetzt ist nur noch die Zuordnung von Device- und Interfacenummer zur 
ttyUSBx-Schnittstelle herauszufinden. Das müsste mit udevadm möglich 
sein.

(Ich hab' hier kein Linux-System, um das nachzustellen, das mögen 
geneigte Leser bitte selbst machen)
Gast #4837059
Lesenswert?

> Kann ich das Tool von FTDI auch unter Linux (Raspberry Pi) nutzen?

Unter Debian-artigen (dazu zählt auch Raspbian) heisst das erwähnte 
Paket 'ftdi-eeprom' (und ist nicht von FTDI). Bei den anderen muss man 
nachsehen, einfach mal nach 'ftdi' suchen im jeweiligen Repository.
OP #4853968
Lesenswert?

Habe ich ausprobiert, danke für den Tipp! Leider bekomme ich keine 
Verbindung zum Arduino-Clone hin - die config-Datei kann anscheinend 
nicht gelesen werden.

name@name:~$ ftdi_eeprom --read-eeprom

FTDI eeprom generator v0.17
(c) Intra2net AG and the libftdi developers <opensource@intra2net.com>
Can't open configuration file
name@name:~$

Das ganze habe ich unter einem Ubuntu System ausprobiert.

Der FTDI Chip auf dem Arduino ist anscheinend ein FT232R:

name@name:~$ ls -lah /dev/serial/by-id/
insgesamt 0
drwxr-xr-x 2 root root 60 Jan  6 22:44 .
drwxr-xr-x 4 root root 80 Jan  6 22:44 ..
lrwxrwxrwx 1 root root 13 Jan  6 22:44 
usb-FTDI_FT232R_USB_UART_00000000-if00-port0 -> ../../ttyUSB0
name@name:~$


Nach https://www.intra2net.com/en/developer/libftdi/index.php kann die 
libFTDI anscheinend keinen FT232R auslesen/verändern/programmieren. Gibt 
es für Windows eventuell eine Alternative mit der ich das EEPROM 
verändern bzw. die UART-ID ändern kann?
Gast #4864743
Lesenswert?

> [..] die config-Datei kann anscheinend nicht gelesen werden.
>
> name@name:~$ ftdi_eeprom --read-eeprom
                                         ^^^
[..]
> Can't open configuration file

1
$ man ftdi_eeprom | grep -e SYNOPSIS -A 1
2
SYNOPSIS
3
       ftdi_eeprom [commands] config-file
                               ^^^^^^^^^^^

HTH
OP #4923656
Lesenswert?

Danke für die Antwort - allerdings habe ich keine Ahnung, welche 
config-Datei ich verwenden soll und wo ich diese finde.

Windows habe ich derzeit nicht zur Verfügung.

Könnte mir jemand mit der Lösung des Problems helfen?

Ich möchte gerne unter Linux mittels ftdi_eeprom die UART ID von 
00000000 auf etwas sinnvolles (z. B. MD137MEA) ändern.

Meinetwegen auch mit einem anderen Programm.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren