Serielle Schnittstelle: Lesen geht,. aber schreiben nicht



  • Hallo

    Ich schreibe gerade ein Programm, welches von der seriellen Schnittstelle lesen und auf diese auch schreiben soll.

    Lesen geht ohne Probleme. Mit dem Schreiben will's aber nicht so klappen.

    Hier der reduzierte Code:

    //----< Open serial device >----------------------------------
    	int fileDescriptor;
    	fileDescriptor = open(devTTY, O_RDWR | O_NOCTTY);
    
    	if (fileDescriptor == -1) {
    		perror("Error while opening serial interface occurred!");
    		return -99;
    	}
    
    	// set new parameters to the serial device
    	struct termios newtio;
    	tcgetattr(fileDescriptor, &oldTio);
    	// flush it before restore it.
    	bzero(&newtio, sizeof(newtio));
    	//	newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
    
    	// canonical disable -> RAW input
    	newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    	newtio.c_cflag = BAUDRATE | CRTSCTS	| CLOCAL | CREAD;
    
    	// When the OPOST option is disabled, all other option bits in  c_oflag are ignored.
    
    	//	newtio.c_oflag &= ~OPOST;
    	// newtio.c_oflag |= OPOST;
    	newtio.c_oflag = 0;
    
    	secs vor next char during burst
    
    	tcflush(fileDescriptor, TCIFLUSH);
    	if (tcsetattr(fileDescriptor, TCSANOW, &newtio)) {
    		perror("could not set the serial settings!");
    		return -99;
    	}
    
    	//----  Open serial device ----------------------------------
    	char acki[32] = { "test test\n\0" };
    
    // finally writing
    if (write(fileDescriptor, acki, strlen(acki)) != strlen(acki)) {
    			perror("can't write);
    		}
    

    Ich teste mein Programm mit einem Null-Modem-Kabel, welches /dev/ttyS0 und /dev/ttyUSB0 verbindet.

    An /dev/ttyS0 läuft ja das Programm und am anderen Ende warte ich mit Screen (screen /dev/ttyUSB0 9600) vergebens auf die Ausgabe meines Programms. Screen zu Screen funktioniert -> Test-Setup soweit ok.

    Ich vermute der Fehler liegt irgend wo in den Einstellungen der seriellen Schnittstelle. Hat mir da jemand einen Tipp?

    Danke



  • Gibt es denn einen Fehler bei write?
    Welche Baud-rate ist denn eingestellt?
    Was ist das für ein fd beim write?



  • lagalopex schrieb:

    Gibt es denn einen Fehler bei write?
    Welche Baud-rate ist denn eingestellt?
    Was ist das für ein fd beim write?

    Nein, write() gibt wie erwartet die Anzahl geschriebener Bytes zurück.

    Die tio settings stelle ich auf 9600 BAUD. Das Programm zum Horchen (screen oder minicom) ist auf die gleiche Geschwinidkeit konfiguriert.

    Ich habe kein Problem beim Lesen von der seriellen Schnittstelle. Beim Schreiben gibt's auch kein Error. Es kommt einfach nix aus der Schnittstelle raus.

    Liegt das an den TIO-Settings (c_oflag), die ich setze?


Anmelden zum Antworten