RPI Soft UART

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    aufgrund eines laufenden Projektes bin ich über die Möglichkeit gestolpert 2 beliebige GPIO Pins als UART Schnittstelle zu benutzen, wie bei einem AVR.
    Wie das ganze funktioniert möchte ich euch kurz vorstellen:
    Der Quellcode findet sich hier.
    Ganz kurz zusammengefasst fügt man ein Kernel Modul in den laufenden Kernel ein und übergibt gleichzeitig die Parameter, wie z.B: die zu verwendeten GPIO Pins und die Baudrate.
    Nach dem Laden des Moduls findet man die Schnittstelle unter /sys/class/softuart/softuart/
    Die Soft UART Schnittstelle verhält sich genauso wie eine gewöhnliche Schnittstelle.
    Da sie aber "emuliert" ist bringt sie einige Nachteile mit sich, diese wären z.B:
    Dass der Buffer auf 256 bytes limitiert ist,
    Da Linux kein Realtime OS ist können Daten "verschwinden".
    Die Geschwindigkeit ist auf maximal 19200 und auf minimal 1200 bytes limitiert.
    In den nächsten Tagen werde ich mal testen wie zuverlässig diese Soft UART Schnittstelle trotz der vielen Nachteile funktioniert.
    Für Interessierte findet sich im Anhang das Kernel Modul.
    softuart-4.4.24+.zip

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Einmal editiert, zuletzt von petit_miner (13. Oktober 2016 um 13:14)

  • Hallo Petit-miner,

    tolle Sache, wenn sie denn funktioniert.

    Die Puffergröße kann übrigens im Quellcode geändert werden. Ob 256 Zeichen ausreichen, hängt wohl davon ab, wie hoch die CPU mit dem Software-UART belastet wird.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Steht eigentlich irgendwo welche Dateien man ins Forum hochladen darf und welche nicht?
    Ich kann nämlich die .ko Datei nicht hochladen, um sie hochladen zu können muss ich sie erstmal in ein ZIP Archiv packen.

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?


  • Und USB2UART gibts in China unter einem Euro.


    Klar weiß ich das :lol:;)
    Bei meinem Projekt ist es aber von Nöten alles ordentlich auf eine Platine zu packen.

    Nun aber zu den Testergebnissen:
    Im Kernel befindet sich kein "Realtime" Patch.
    Zudem läuft auf dem PI keine Anwendung, also IDLE'et er die ganze Zeit.
    Senden funktioniert überraschend gut, selbst bei der maximalen Geschwindigkeit von 19200.
    Hierbei ist jede 6-7 Nachricht "Müll"

    Empfangen ist wesentlich schlechter, selbst bei der minimalsten Geschwindigkeit von 1200
    ist jede 4-5 Nachricht "Müll".

    Im Fazit ist es ein tolles Feature, vor allem weil man im laufenden Betrieb die TX und RX Leitungen auf andere GPIO Pins verlegen kann,
    aber der Verlust von gesendeten Daten ist natürlich der größte Nachteil.

    Für mein Projekt werde ich wohl die SPI Schnittstelle des PIs verwenden müssen.

    Ein schönes Wochenende noch :D

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Hallo Petit_miner,

    das hört sich doch zunächst sehr ernüchternd an.

    Aber evtl. kannst Du durch ein paar Maßnahmen die Kommunikation verbessern.

    • Der Sender sendet eine Zeile, die mit 8 oder 16 Prüfbits versehen wird. Bei den GPS-Receivern funktioniert das genauso, dass alle Zeichen zwischen einem Anfangszeichen und einem Ende-Zeichen (exklusiv) exklusiv-ODER verknüpft werden. Diese Art der Ermittlung von Prüfbits ist zwar sehr schwach, aber gelegentlich gibt es da auch Übertragungsfehler, die der Empfänger dann erkennen kann - und dann die Information erneut anfordern kann. Besser sind CRC-Prüfbits.
    • Der Sender haut dann nicht die Informationen durch sondern wartet nach Übertragung der mit Prüfbits beendeten Mitteilung auf eine Rückmeldung. In der Datentechnik hat sich da der ASCII-Code für ACK (Acknowledge) sowie NAK (negative Ackknowledge) durchgesetzt. Solange der Sender keine Rückmeldung erhalten hat, dass die Daten korrekt angekommen ist, sendet er für eine bestimmnte Anzahl die gleichen Daten - bis er's dann irgendwann mal aufgibt.
    • Auf diese Weise kannst Du sicherstellen, dass ALLES, was der Sender senden möchte, auch beim Empfänger angekommen ist - oder dem Sender zumindest bekannt ist, wenn es mal trotz festgelegter Anzahl an Wiederholungen doch nicht erfolgreich war.

    Damit kannst Du auch eine ansonsten nicht akzeptable Fehlerquote von 1:7 oder 1:4 noch abfangen. Dauert dann nur etwas länger.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (16. Oktober 2016 um 09:51)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!