serial-porttoggledelphi-prism-2010

Automatically toggle RTS line (Delphi Prism SerialPort)


I am using SerialPort under Delphi Prism. I am able to send bytes out to the serialport, but I can't receive data from outside, because the SerialPort Request to Send (RTS) line is always high or up. So, what setting do you set to automatically toggle the RTS line?

Here are the serialport properties I set:

SerialPort1 := new System.Io.Ports.SerialPort();
SerialPort1.BaudRate:=19200;
SerialPort1.DataBits:=8;
SerialPort1.DtrEnable:=true;
SerialPort1.Parity:=System.IO.Ports.Parity.Even;
SerialPort1.PortName:='COM1';//'/dev/ttyS0';
SerialPort1.ReadBufferSize:=3000;
SerialPort1.ReadTimeout:=1000;
SerialPort1.ReceivedBytesThreshold:=1;
SerialPort1.RtsEnable:=true;
SerialPort1.StopBits:=System.IO.Ports.StopBits.One;
SerialPort1.WriteTimeout:=1000;
SerialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(@MySerialData);
SerialPort1.Open;

I do have DTR set. Request to Send line is how you control when to read and write data to the serial. RTS is high then you can only write and if RTS is low you can only read. We have checked the communication line on the oscilloscope and the RTS line is always high, which means our program can only send bytes but not able to read any bytes or data from outside. That is the main reason why the DataReceived Event never gets to execute, because it never sees any incoming bytes or data.

So, after looking at my serial port setting, can you tell me what I am missing.


Solution

  • RTS is output so it doesn't have anything to do with receiving. Try turning on DTR and/or CTS.

    EDIT:

    Try removing the RTS enabled line and adding handshaking for RTS/CTS (not sure what exactly it is in Delphi). I know what the pins are for and what they are supposed to do. Do you have the pinouts showing how this is wired. I assume 2 & 3 are crossed, DTR to DSR both directions, RTS to CTS both directions.