Problem beim Senden/Empfangen über serielle Schnittstelle



  • Hallo.
    Ich habe folgendes Problem:
    Ich sende Zeichen an ein serielles Device mit write(fd,buffer,10)
    und mit read(fd,buffer,18) frage ich die Antwort ab.
    Jedes zweite/dritte mal klappt die Kommunikation nicht.
    Des Device scheint die Zeichen, die vom PC gesendet wurden, nicht empfangen zu haben und die Antwort vom Device bleibt aus. Die Folge ist, dass der read-Befehl auf Zeichen wartet und das Programm nur mit strg-c gestoppt werden kann.
    Hat jemand eine Idee, wie ich das Problem lösen kann?
    Kann der read-Befehl zeitlich eingeschränkt werden?
    Gruß Daniel

    PS:
    Die Schnittstelle ist auf 9600baud eingestellt(für das Device genau die richtige)
    Folgende Flags habe ich gesetzt:
    term_attr.c_cflag |= TERM_SPEED | CS8 ;
    term_attr.c_cflag |= CLOCAL;
    term_attr.c_iflag = 0;
    term_attr.c_oflag = 0;
    term_attr.c_lflag = 0;
    term_attr.c_cflag &= ~CRTSCTS;
    Kompiler ist gcc.



  • vielleicht hilft dir das weiter. Schau dir man-page mal an

    int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)

    mfg bina



  • Danke für den Hinweis.
    Ich habe VTIME and VMIN gesetzt. Der Timeout funktioniert jetzt.

    Aber ich wundere mich weiterhin darüber, dass das Device die Daten nur in etwa bei jedem zweiten Kommunikationsversuch versteht und antwortet. Habe es mit verschiedenen Optionen bei der Initialisierung der Schnittstelle versucht. Immer das gleiche.
    Hat jemand eine Ahnung woran das liegt?



  • Ich denke,dass das Problem beim write Befehl liegt.
    Zum Device führen nur RxD,TxD und Ground. Flußkonntrolle darf keine eingestellt sein. CRTSCTS hab ich rausgenommen.
    Gibt es eine Funktion, die den Puffer löscht oder resetet?


Anmelden zum Antworten