Forum: PC Hard- und Software China Arduino Nano mit FT232RL keine eindeutige UART ID?


von Max M. (max_mm2)


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.

von Nico (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Jim M. (turboj)


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.

von g457 (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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)

von Clemens L. (c_l)


Lesenswert?

Max M. schrieb:
> Bus 001 Device 005: ID 0403:6001

Das ist OK.

g457 schrieb:
> Praktischer ist es trotzdem wenn man eine Seriennummer vergibt

Sag das dem Chinesen.

> die Zuordnung zur Position im Gerätebaum

Dazu muss man in udev DEVPATH abfragen: 
https://www.domoticz.com/wiki/PersistentUSBDevices#Alternative_filtering

von g457 (Gast)


Lesenswert?

>> Praktischer ist es trotzdem wenn man eine Seriennummer vergibt
>
> Sag das dem Chinesen.

Kann man die bei einem Fake nicht per ftdi_eeprom nachträglich 
ändern/vergeben?

von Max M. (max_mm2)


Lesenswert?

Guten Abend,

vielen Dank für die freundlichen und hilfreichen Antworten.

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

von g457 (Gast)


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.

von Max M. (max_mm2)


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?

von g457 (Gast)


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

von M12 (Gast)


Lesenswert?

Das Tool sollte es unter Windows können:

http://www.ftdichip.com/Support/Utilities.htm#FT_PROG

von Max M. (max_mm2)


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.

von g457 (Gast)


Lesenswert?

> [..] allerdings habe ich keine Ahnung, welche config-Datei ich verwenden
> soll und wo ich diese finde.

Einfach die manpage weiterlesen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.