In der PiGPIO-Bibliothek http://abyz.me.uk/rpi/pigpio/index.html wird erwähnt, dass eine ihrer Funktionen "serielle Software-Links mit jedem Benutzer-GPIO" ist.
Ich verstehe dies so, dass Sie damit einen Software-UART auf zwei beliebigen freien GPIO-Pins generieren können.
Auf der Beispielseite für Projekte gibt es keine Beispiele für diese Funktion, und ich habe keine bei Google gefunden.
Hat jemand das getan? Wenn ja, verweisen Sie mich bitte auf das Beispiel.
Wenn nicht, gibt es alternative Bibliotheken zum Bit-Bangen eines UART?
Vielen Dank,
Antworten:
Hier ist Python, mit dem ich die Zuverlässigkeit von Software-Serien getestet habe. Die Eingabeseite ist ziemlich trivial. Sie führen in Python oder C nur die entsprechenden seriellen offenen Bit-Bang-Aufrufe durch. Die Ausgabeseite ist komplizierter, da Sie Wellenformen zum Erstellen des Bitstroms verwenden müssen.
Der Code hier verwendet 7-Bit-Daten anstelle von 8-Bit-Daten. Der Test wurde ungefähr zur gleichen Zeit geschrieben, als ich Unterstützung für verschiedene Bits pro Byte hinzufügte.
Der Code schreibt Blöcke von Binärdaten in ein GPIO, das an einen Laptop angeschlossen ist (über einen seriellen Dongle). Der Laptop gibt die eingehenden seriellen Daten an die serielle Ausgangsleitung weiter. Der Pi liest die seriellen Daten auf einem anderen GPIO.
Der Code prüft auf Diskrepanzen zwischen den gesendeten und den empfangenen Daten. Es wird davon ausgegangen, dass der Laptop fehlerfrei ist, sodass angenommen wird, dass alle Fehler im Bit-Banging liegen.
Bei Betrachtung der Protokolle war alles, was weniger als 19,2 KBit / s betrug, solide. Alles bis zu 115,2 kbps war vernünftig (würde aber eine Prüfsumme erfordern) und 230,4 kbps ergaben eine Fehlerrate von 13% Byte.
Protokolle
quelle
Wenn Sie Tx direkt mit Rx verbinden, um zu testen, ohne dass Fehler wie Dongles auftreten, wird angezeigt, wie gut die Bibliothek wirklich funktioniert.
Verwenden Sie GPIO 23 als Tx und GPIO 24 als Rx oder ein anderes kostenloses GPIO auf Raspberry Pi 3b +. Dies sieht in der gleichen Reihenfolge wie der integrierte UART gut aus und befindet sich praktisch daneben, nur 3 Pins rechts, mit einem GND-Pin rechts von Rx.
Ergebnisse:
Wenn Sie mit 19200 oder weniger leben können, ohne Prüfsummen-Hashes oder SPI / I2C-zu-UART-Konverter verwenden zu müssen, sollte dies in Ordnung sein.
quelle