Seltsames Problem auf Raspberry Pi UART (mit FTDI USB <--> RS-232-Adapter)

Ich versuche, eine Hochgeschwindigkeits-UART-Kommunikation auf der Raspberry Pi-Platine herzustellen. Da der interne UART bei 1+ MBaud nicht ganz gut ist, wurde stattdessen der FTDI-Adapter (basierend auf dem FT232RL-Chip) verwendet.

Ich habe einen Adapter auf meinem Laptop mit Debian 8 getestet und eine stabile Übertragungsgeschwindigkeit von 3 MBaud erreicht (mit einer Katze * >> /dev/ttyUSB0). Dann habe ich es an Pi2 angeschlossen und genau das gleiche gemacht und folgendes bemerkt:

(bei 3 MBaud)Geben Sie hier die Bildbeschreibung ein

(bei 1 MBaud)Geben Sie hier die Bildbeschreibung ein

In regelmäßigen Zeitabständen gibt es große (bis zu 1 Sekunde bei 3 MBaud) Übertragungslücken. Die Übertragung von Daten ist nicht beschädigt, nur verzögert. Irgendwelche Vorschläge, wie man ein Problem überwindet? Danke schön.

Vielleicht ist Ihre Datenquelle zu langsam, versuchen Sie escat /dev/zero >> /dev/ttyUSB0
Ich habe alle Arten von Daten ausprobiert, einschließlich UDP, TCP-Verkehr über PPP. Lücken bleiben gleich.
Was hat UDD,TCP mit UART zu tun? Da Ihr Rpi auch andere Dinge tut, kann es die Daten nicht lückenlos senden. Vielleicht würden die Lücken verschwinden, wenn Sie einen benutzerdefinierten Kernel verwenden, der alle Ressourcen von RPi verwendet, nur um Daten zu senden, aber was ist der Sinn davon?

Antworten (2)

Das RPi hat nur einen USB-Bus. Eine Sekunde lange Lücken dürften sehr selten sein, aber Sie würden sie sehen, wenn Ihre Datenquellecat * denselben USB-Bus verwendet, um gleichzeitig Daten in das RPi zu übertragen.

Etwas mit mehr Puffer dd if=/dev/zero of=/dev/ttyUSB0 bs=1Msollte weniger Lücken aufweisen, es sei denn, es sind mehr USB-Geräte aktiv.

Verwendet der interne microSD-Kartenleser den USB-Bus? Außer dem Adapter sind keine USB-Geräte an die Platine angeschlossen.
Ich habe versucht, mit Ihrem Befehl auszugeben - Lücken sind genau gleich.
Der Ethernet-Anschluss befindet sich am USB 2.0-Bus. Sehen Sie die Lücken, wenn Ethernet getrennt ist?
Ja. Ethernet ist getrennt.

Gelöst

Das Problem lag im USB-Treiber von RPi.

Antwort vom Entwickler:

Bei hohen Baudraten können Sie bei ausgehenden Daten die USB-NAK-Paketdrosselschwelle erreichen – wir haben einen groben Mechanismus implementiert, um zu verhindern, dass FTDI-Geräte Interrupt-Stürme verursachen, die die CPU für längere Zeit sperren. Sie können wahrscheinlich mit der erhöhten Unterbrechungsrate auf einem Pi2 leben, die durch die Reduzierung des Drosselintervalls entsteht.

Nach dem Deaktivieren des NAK-Holdoffs (durch Hinzufügen dwc_otg.nak_holdoff=1zu /boot/cmdline.txt) funktioniert es perfekt bei 3 MBaud.