UART > Seriellen Port lesen und schreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UART > Seriellen Port lesen und schreiben

    Hallo zusammen,

    ich habe via USB ein USB zu UART Stöpsel angeschlossen.

    Der Treiber von Silicon Labs funktioniert einwandfrei:
    silabs.com/products/developmen…o-uart-bridge-vcp-drivers

    Was möchte ich?
    Ich möchte mit dem angeschlossenen Gerät kommunizieren.
    Zu dem Gerät selbst gibt es aber leider nicht vielen Informationen.

    Was habe ich gemacht?

    - ich erstelle mit "open" einen "file descriptor" von "/dev/cu.SLAB_USBtoUART"
    - ich nehme den "file descriptor" und erzeuge eine NSFileHandle-Instanz
    - ich lausche via NSFileHandleReadCompletionNotification nach -readInBackgroundAndNotify

    - ich stöpsle das Gerät an
    - ich bekomme ein NSData-Objekt
    - ich prüfe das erste Byte und tata, es ist genau was ich erwarte
    - bis hierhin alles super und somit kann es nicht grob falsch sein

    Nach dem ich das Gerät mit entsprechendem Byte getestet habe möchte ich gleich 1024 Byte schreiben.
    Also habe ich von NSFileHandle -writeData: genommen.

    Danach bekomme ich die Antwort, die Teile aus den übermittelten Bytes sind.
    Das ist natürlich für mich unbrauchbar.

    Ich möchte die Daten schreiben und vom angeschlossenen Gerät, nach dem Schreiben, die Daten lesen.
    Dort ist natürlich das nächste Byte drin, das mir sagt, ob es richtig oder falsch war.

    Aber irgendwas klappt bei dem Schreiben nicht. Auch weiß ich nicht, ob und wie ein "flush" durchgeführt werden muss.

    Hat hier jemand Ahnung? :D

    Danke.

    Viele Grüße
  • Mac & i Test Abo
  • Hallo Chris,

    vielen Dank für Deine Antwort!

    Ja, das habe ich alles konfiguriert. Mehr oder weniger schlecht, da ich leider nicht genau weiß was das angeschlossene Gerät genau benötigt.
    Aber ich habe es lösen können.

    Nach dem -writeData: habe ich ein usleep() hinzugefügt.
    "flush" habe ich komplett weggelassen. D.h. ich lese wieder die selbst geschriebenen Daten.
    Somit weiß ich auf Grund der Länge, ab wann ich meine Antwort interpretieren kann.

    Beispiel:

    - ich schreibe 1024 B
    - ich empfange 1050 B
    - meine Antwort ist ab 1025

    - ich schreibe 1024 B
    - ich empfange 900 B
    - weiter abwarten bis die restlichen mindestens 124 b einfliegen

    Letzter Fall war das Problem und mit der Erkenntnis läuft das Teil jetzt :D

    Viele Grüße