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:
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.
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=1M
sollte weniger Lücken aufweisen, es sei denn, es sind mehr USB-Geräte aktiv.
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=1
zu /boot/cmdline.txt
) funktioniert es perfekt bei 3 MBaud.
Jasen
cat /dev/zero >> /dev/ttyUSB0
Alexey918331
Marko Buršič