RTS und DTR von tts/0 und 1

Boxenweitwurf
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

RTS und DTR von tts/0 und 1

Beitrag von MPC823 »

Ich habe micht just for fun mal mit der seriellen Schnittstelle beschäftigt. Ich habe mir dazu ein kleines tool geprog um den status der eingänge auszulesen und um dtr und rts zu setzten

Nur ist es egal ob ich an com1 oder com2 messe ich bekomme keine Pegeländerung auf den Pins

Ich habe auch mal mir auf dem allgemein kursierenden Schaltplan der Nokia geschaut

Dort sind z.B vom MPC823 PC4,PC15,PC16,PC17,PC18,PC19,PC22,PC23,PA9,PA8,PA7 zum Modemport verdrahtet. Also müsste die Hardware alle Signale einer Schnittstelle zur verfügung stellen

DCD,RXD,TXD,DTR,GND,DSR,RTS,CTS,RI

Sind die Treiber dafür ausgelegt weiss das jemand ?

Was mir auch noch aufgefallen ist das die Beschreibung des Modemports im Wiki falsch ist.

http://wiki.tuxbox-cvs.sourceforge.net/ ... re#Nokia_2
so sollte es eigentlich sein

19 17 15 13 11 10 9 7 5 3 1
* * * * * * * * * *
---> dbox Frontblende
* * * * * * * * * *
20 18 16 14 12 10 8 6 4 2

laut schaltplan ist an PIN 14 +5Volt und an 1 und 19 GND das macht dann die Sache eindeutig

rs232test

Code: Alles auswählen

#include <fcntl.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <errno.h>


// ----------------------------------------------------------------------------

int main (int argc, char** argv) {
  int fd,result;

  /* Parameterprüfung: Das zu verwendende Device muss  */
  /* als erster Parameter angegeben werden.            */
  if(argc != 2)
    {
      printf("error: Ungültige Parameter-Anzahl.\n");
      printf("call: %s <device>\n",argv[0]);
      printf("examble ---> %s /dev/tty/0\n",argv[0]);
      return 1;
    }


  printf("\n\n\nstarting RS232 test\n");

// open com port
//  if((fd=open("/dev/ttyUSB0",O_RDWR | O_NOCTTY|O_NONBLOCK )) <= 0) {
  if((fd=open(argv[1],O_RDWR | O_NOCTTY|O_NONBLOCK )) <= 0) {
    int err = errno;
    printf("ERROR: open rs232 port: %s\n", strerror(err));
    return(-1);
  }


// ausgaenge steuern:
ioctl( fd, TIOCSBRK, NULL ); // TXD = high
ioctl( fd, TIOCCBRK, NULL ); // TXD = low

int j;

j = 0;
j |= TIOCM_RTS; // RTS = high
j |= TIOCM_DTR; // DTR = high
ioctl( fd, TIOCMBIS, &j );

usleep(300000);

j = 0;
j |= TIOCM_RTS; // RTS = low
j |= TIOCM_DTR; // DTR = low
ioctl( fd, TIOCMBIC, &j );

int abfrage;

do{
// Auswahlmenü
printf("<1> RTS on\n");
printf("<2> RTS off\n");
printf("<3> DTR on\n");
printf("<4> DTR off\n");
printf("<5> read inputs\n");
printf("<0> Ende\n\n");
printf("your choice please : ");
scanf("%d",&abfrage);
fflush(stdin);
printf ("\33[2J");/*löscht den Bildschirm*/
switch(abfrage)
{
case 1 :
{
j = 0;
j |= TIOCM_RTS; // RTS = high
ioctl( fd, TIOCMBIS, &j );
break;
}
case 2 :
{
j = 0;
j |= TIOCM_RTS; // RTS = low1
ioctl( fd, TIOCMBIC, &j );
break;
}
case 3 :
{
j = 0;
j |= TIOCM_DTR; // DTR = high
ioctl( fd, TIOCMBIS, &j );
break;
}
case 4 :
{
j = 0;
j |= TIOCM_DTR; // DTR = low
ioctl( fd, TIOCMBIC, &j );
break;
}
case 5 :
{
// eingaenge lesen:
printf("\n****************\n");
printf("reading inputs\n");
//int i;
ioctl( fd, TIOCMGET, &j );

if ( (j&TIOCM_CD )==TIOCM_CD ) // wenn CD = high
	printf("CD = high\n");
else
	printf("CD = low\n");
if ( (j&TIOCM_DSR)==TIOCM_DSR ) // wenn DSR = high
	printf("DSR = high\n");
else
	printf("DSR = low\n");
if ( (j&TIOCM_CTS)==TIOCM_CTS ) // wenn CTS = high
	printf("CTS = high\n");
else
	printf("CTS = low\n");
if ( (j&TIOCM_RI )==TIOCM_RI ) // wenn RI = high
	printf("RI = high\n");
else
	printf("RI = low\n");
printf("****************\n\n\n\n\n");
break;
}
default :
if (abfrage == 0)
	printf("Bye !!!\n");
else
	printf("wrong input !!!\n\n\n\n");
}
  }while(abfrage != 0);
close( fd );
  return(0);
}



Also irgendwas stimmt da nicht.

Vielleicht hat jemand ja eine Idee


Martin
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: RTS und DTR von tts/0 und 1

Beitrag von seife »

im Kerneltreiber ist der zugehörige Code mit #ifdef modem_control
geklammert. Evtl. ist das einfach nicht eingeschaltet.

Soweit ich das sehen kann, wird modem_control nirgendwo definiert.
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: RTS und DTR von tts/0 und 1

Beitrag von MPC823 »

Danke Seife :D

dann werde ich mal schaun das ich vom cdk booten kann vom flashen habe ich die Nase voll . Dann probier ich es nochmal


Martin