Linux: kann man DTR auf ttyUSBx abschalten?

OP #7364090
Lesenswert?

ttyUSB setzt beim Öffnen der Schnittstelle das DTR-Signal – der Bootlader braucht ihn, weil er nur nach einem Hard-Reset die Kontrolle bekommt.

Allerdings ist DTR für ein laufendes Programm auf dem Arduino "tödlich".

Kann man gtkterm irgendwie beibringen, beim Start DTR nicht zu setzen?

#7364511
Lesenswert?

Norbert schrieb:

man stty

1
Control settings:
2
>    [-]clocal    disable modem control signals
3
>

Damit ist dann allerdings dauerhaft der Zugriff auf beide Steuerleitungen der Schnittstelle gesperrt. Und es werden dann wohl auch die die vier Feedback-Leitungen nicht mehr ausgewertet.

Wenn das nicht akzeptabel ist, kommt man nicht darum herum, sich den ganzen Wahnsinn der termio-Konfigurationen anzutun, um das gewünschte Ziel zu erreichen.

Mein Gott, wie liebe ich Windows im Allgemeinen und .net im Speziellen. Da ist das mit einem simplen <PortInstance>.DtrEnable = false; abgehandelt...

Das ist wahrer Programmier-Komfort.

#7364538
Lesenswert?

C-hater schrieb:

Wenn das nicht akzeptabel ist, kommt man nicht darum herum, sich den ganzen Wahnsinn der termio-Konfigurationen anzutun, um das gewünschte Ziel zu erreichen.

Na ja, erstens und zweitens ist das nun wirklich keine Raketenwissenschaft. Drittens und viertens nimmt der ganz besonders bequeme Mensch vermutlich sogar eine zu seiner Programmiersprache passende Bibliothek. Oder installiert sich auf einer wenige Exabyte großen Festplatte Mono/Stereo oder gar Quadro.

#7364559
Lesenswert?

Norbert schrieb:

Na ja, erstens und zweitens ist das nun wirklich keine Raketenwissenschaft.

Nein, sicher nicht. Aber doch recht schwierig zu durchschauen. Das ist nur eine Auswirkung dessen, dass man mittlerweile grandios historische Sachen unbedingt am Leben erhalten will. Allein die Tatsache, das es die termio-Struktur mittlerweile in drei Versionen gibt, zeigt das.

Das ist Mist. Da haben die Schnittstellen-Designer massiv geschlampt. Nun ist allerdings ja nicht so, dass es unter Win32 nicht auch immer mal wieder Struktur-Updates und *Ex-Funktionen gibt. Aber da reicht es dann, immer die neueste Version und Struktur zu verwenden, um alles tun zu können. Da ist es NIEMALS nötig, sich mit einem Mischmasch rumzuschlagen. Sprich: Die KÖNNEN Abwarts-Kompatibilität. Linux kann das nachweisbar nicht. Ganz sicher jedenfalls nicht, was diese vermaledeite termio-Sache betrifft.

Und nun du...

#7364565
Lesenswert?

C-hater schrieb:

Mein Gott, wie liebe ich Windows im Allgemeinen und .net im Speziellen. Da ist das mit einem simplen <PortInstance>.DtrEnable = false; abgehandelt...

Das liegt aber weniger an Windows als an der API. Das Windows-Pendant zu termios ist eher das: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommstate

Fast vergessen: Das funktioniert auch mit mono unter Linux.

Mit Qt auch. Da heißt die Funktion setDataTerminalReady().

OP #7364663
Lesenswert?

Gibts dafür unter Linux tatsächlich kein Programm, mit dem man das meinetwegen aus einem Skript heraus vor dem gtkterm-Aufruf erledigen kann?

Eigentlich wäre doch stty der Kandidat dafür, aber der scheitert schon, wenn das Gerät am anderen Ende der Leitung noch nicht aktiv ist, weil dann /dev/ttyUSB0 – oder welche Nummer auch immer – nicht existiert.

Dass die Nummern bei mehreren angeschlossenen Geräten von der Reihenfolge des Anschlusses abhängen, ist ja auch noch so ein Unding. Das gibts wohl nur bei USB…

#7364700
Lesenswert?

Moriz schrieb:

Wie komme ich an die Seriennummer eines Arduino Nano?

Wenn es ein Chinese ist, garnicht, die CH340 haben keine Seriennummer.

Das gefällt mir als Windows-Nutzer sehr gut: Jeder hat die gleiche Portnummer, solange ich ihn an den selben PC-Port stecke. FTDI oder SiLab mit Seriennummer zählen unter Windows den Port hoch, bis es nicht mehr reicht - so hat also jedes Ding zwei Seiten.

Was passiert denn unter Linux, wenn Du einen anderen Nano an den selben Port steckst, sollte da nicht auch die Nummer gleich bleiben?

OP #7364749
Lesenswert?

Manfred P. schrieb:

Was passiert denn unter Linux, wenn Du einen anderen Nano an den selben Port steckst, sollte da nicht auch die Nummer gleich bleiben?

Linux nimmt die erste freie Nummer und erzeugt damit ein /dev/ttyUSBn.

Wenn man keine weiteren seriellen Geräte am USB hat, dann bekommt der immer die ttyUSB0. (Früher wurden die Devices nach dem Verbindungsabbau nicht so schnell freigegeben und so bekam man auch mal ttyUSB1, wenn ttyUSB0 noch da war.)

Das Problem bei der Geschichte ist eben, dass die ttyUSBs verschwinden, wenn keine Verbindung mehr besteht und so kann stty auch keine Einstellungen vornehmen.

#7364813
Lesenswert?

Moriz schrieb:

Linux nimmt die erste freie Nummer und erzeugt damit ein /dev/ttyUSBn.

Wenn man keine weiteren seriellen Geräte am USB hat, dann bekommt der immer die ttyUSB0. (Früher wurden die Devices nach dem Verbindungsabbau nicht so schnell freigegeben und so bekam man auch mal ttyUSB1, wenn ttyUSB0 noch da war.)

Das Problem bei der Geschichte ist eben, dass die ttyUSBs verschwinden, wenn keine Verbindung mehr besteht und so kann stty auch keine Einstellungen vornehmen.

IIRC können udev-Regeln beim Einstöpseln Skripte aufrufen.

#7364825
Lesenswert?

Moriz schrieb:

Eigentlich wäre doch stty der Kandidat dafür, aber der scheitert schon, wenn das Gerät am anderen Ende der Leitung noch nicht aktiv ist, weil dann /dev/ttyUSB0 – oder welche Nummer auch immer – nicht existiert.

Du erwartest von einem Programm, dass du damit die Parameter eines noch gar nicht existierenden Device einstellen kannst?

Moriz schrieb:

Aha. Aber es bleibt ein Schrott: ein Arduino Nano ist nicht gerade ein Teil, das man in der udev-DB verdrahten will – dazu fliegen einfach zu viele davon in der Bastelecke herum.

Du musst dich jetzt schon entscheiden. Entweder werden die Namen der Geräte nach der Reihenfolge des Einsteckens gewählt oder jedes bekommt einen festen Namen. Beides findest du "Mist", also wie willst du es denn nun haben?

Moriz schrieb:

Das Problem bei der Geschichte ist eben, dass die ttyUSBs verschwinden, wenn keine Verbindung mehr besteht und so kann stty auch keine Einstellungen vornehmen.

Wenn nichts da ist, gibt's ja auch nichts, das man einstellen könnte.

#7364852
Lesenswert?

C-hater schrieb:

C-hater schrieb:

Das ist wahrer Programmier-Komfort.

Fast vergessen: Das funktioniert auch mit mono unter Linux.

Microsoft will das doch auch schon wieder ersetzen, und drehen mal wieder ihre eigene Runtime ( https://learn.microsoft.com/de-de/dotnet/core/install/linux-debian ).

Ausprobiert habe ich das nicht, ich lade mir solchen Scheiss nicht auf den Rechner.

#7364859
Lesenswert?

Rolf M. schrieb:

Entweder werden die Namen der Geräte nach der Reihenfolge des Einsteckens gewählt oder jedes bekommt einen festen Namen.

Man kann mit udev auch symlinks machen, wie bei /dev/disk/by-*/. Mach dir halt einen symlink alla /dev/ttyUSB-1.2.3 -> /dev/ttyUSB0 oder so mit den Portnummern hinten dran.

Edit, ich habe das jetzt nicht ausprobiert, aber eventuell irgendwie so:

1
# %p oder $devpath oder $attr{devpath}
2
KERNEL=="ttyUSB?", SUBSYSTEMS=="usb", SYMLINK+="ttyUSB-%p"
OP #7365065
Lesenswert?

Rolf M. schrieb:

Du erwartest von einem Programm, dass du damit die Parameter eines noch gar nicht existierenden Device einstellen kannst?

Du Schlaumeier… Dass es das Device nicht gibt, oder es an eine bestimmte Geräte-ID gebunden ist, die der Nano nicht hat, ist das Problem.

Da muss ich c-hater in Beziehung zu Windows mal ausnahmsweise Recht geben – wenigstens das haben die so gebacken bekommen, dass es praxistauglich ist.

Wenn nichts da ist, gibt's ja auch nichts, das man einstellen könnte.

Ach, und wie macht Windows das dann?

#7365083
Lesenswert?

Mal so ganz nebenbei gefragt: Was für ein ominöser Bootloader soll das denn sein?

WIMRE macht das Arduino Zeug die Schnittstelle mit 1200bd auf und sofort wieder zu. Dann im Anschluss mit - ich meine - 115200bd und so erkennt's der Bootlader und meldet sich.

Wenn diese Abfolge nicht eingehalten wird geht's sofort in die eigentliche Applikation.

PS. Ein DTR (Data Terminal Ready) ist ein völlig normales Signal und sollte für die Arduino-Applikation alles aber ganz bestimmt nicht

tödlich

sein.

OP #7365090
Lesenswert?

Norbert schrieb:

Mal so ganz nebenbei gefragt: Was für ein ominöser Bootloader soll das denn sein?

Der vom Arduino – Nano in dem Fall.

WIMRE macht das Arduino Zeug die Schnittstelle mit 1200bd auf und sofort wieder zu. Dann im Anschluss mit - ich meine - 115200bd und so erkennt's der Bootlader und meldet sich.

Nein, der Nano macht das sehr trickreich, indem er aus dem Zustandswechsel von DTR einen Reset-Puls ableitet. Der Bootlader erkennt den Reset und wartet auf den Verbindungsaufbau. Wie der Boot ausgelöst wurde, ist dem MCUSR zu entnehmen.

PS. Ein DTR (Data Terminal Ready) ist ein völlig normales Signal und sollte für die Arduino-Applikation alles aber ganz bestimmt nicht

tödlich

sein.

Ist es aber, weil durch DTR eben ein Reset ausgelöst wird…

OP #7365194
Lesenswert?

Norbert schrieb:

OK, scheint als wenn das Ding von echten Profis entwickelt wurde…

Die Alternative wäre Handanlegen, um den Bootlader zu aktivieren – bei BT-Übertragung mit den üblichen kleinen Adapterplatinchen bleibt da nichts anderes, weil die DTR nicht übertragen.

So ist das schon einigermaßen komfortabel, hat aber eben die genannte Schattenseite…

(Firma: RUB) #7368488
Lesenswert?

Einfach mal die manpage lesen könnte schon etwas Aufschluss geben...

https://www.man7.org/linux/man-pages/man1/minicom.1.html

1
-s, --setup
2
            Setup.  Root edits the system-wide defaults in
3
            /etc/minirc.dfl with this option.  When it is used, minicom
4
            does not initialize, but puts you directly into the
5
            configuration menu. This is very handy if minicom refuses to
6
            start up because your system has changed, or for the first
7
            time you run minicom. For most systems, reasonable defaults
8
            are already compiled in.
9

10
configuration
11
            The configuration argument is more interesting. Normally,
12
            minicom gets its defaults from a file called "minirc.dfl".
13
            If you however give an argument to minicom, it will try to
14
            get its defaults from a file called "minirc.configuration".
15
            So it is possible to create multiple configuration files,
16
            for different ports, different users etc. Most sensible is
17
            to use device names, such as tty1, tty64, sio2 etc. If a
18
            user creates his own configuration file, it will show up in
19
            his home directory as ".minirc.dfl" or
20
            ".minirc.configuration".
21

22
Save setup as dfl
23
         Save the parameters as the default for the next time the
24
         program is started. Instead of dfl, any other parameter name
25
         may appear, depending on which one was used when the program
26
         was started.
27

28
Save setup as..
29
         Save the parameters under a special name. Whenever Minicom is
30
         started with this name as an argument, it will use these
31
         parameters. This option is of course privileged to root.
32

33
FILES    
34
       Minicom keeps it's configuration files in one directory, usually
35
       /var/lib/minicom, /usr/local/etc or /etc. To find out what
36
       default directory minicom has compiled in, issue the command
37
       minicom -h.

oder mal hier gucken: https://cris.bytesnblades.net/2009/03/24/managing-minicom-settings/

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