473,408 Members | 1,845 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,408 software developers and data experts.

serial_port_RTS_pin_problem in C#

14
Hello,

I try to do a simple application in Winforms C# to read or write some data on serial port under win XP.I try to communicate with an industrial controller on RS485.So I have an converter RS232- RS485 The signal who does the converter control is RTS (switch RX or TX for RS485 half duplex)
My communication protocol is a version of old BitBus by Intel. When I want to sent something(eg. Address, command) I have to set the RTS line like:
//here the serial port is defined with baud rate, parity, etc.
byte[] command = new byte[1];
command[0] = 0x03;
port.Open();
port.RtsEnable = true;
port.Write(command, 0, 1);
port.RtsEnable = false;
// here shold begin to receive data…
Now commes my problem: I need immediatley after I set RTS line to send data.
I looked with an digital scope to signals and I have an aprox 7mS time delay between the switching of RTS line and the actual data sending (write fuction).
Actually I’m trying to replace with the C# program an old driver writen in x86 ASM (witch cannot be runned under XP).Under the DOS driver I don’t have any delay and because of this my C# communication is not working. How to syncronise RTS line with the write to port data in C#??
Any suggestions will be greatly appreciated.

Thanks in advance and all the best
Svcc.
Sep 10 '07 #1
27 11457
Plater
7,872 Expert 4TB
Are you saying you NEED to delay or that your device does not work WITH a delay?
At any rate you should be able to just what you stated.
Open, set pin level, write data, set pin level.
Sep 10 '07 #2
svcc
14
Are you saying you NEED to delay or that your device does not work WITH a delay?
At any rate you should be able to just what you stated.
Open, set pin level, write data, set pin level.
Hello,

first thank you for answering,
I don't need any delay between the RTS pin set moment and
write data to port. The time interval between RTSenable=true and RTSenable=false
in my C# app is 20mS and in the original dos(driver) is 1.5mS. In this interval
I have to send the command.How can I mannage this in C#??
All the best
Sep 10 '07 #3
Plater
7,872 Expert 4TB
Won't your device halt until the RTS pin is set low?
So when you say RTS=high.
The device goes "ok i'm gonna get something so i'll wait for it"
Then you can send your command whenever.
Then when you're done, you signify it with RTS=low?

What happens when you try and do it?

I've only done rs232 without flow control, so my knowledge is a bit limited
Sep 10 '07 #4
svcc
14
Won't your device halt until the RTS pin is set low?
So when you say RTS=high.
The device goes "ok i'm gonna get something so i'll wait for it"
Then you can send your command whenever.
Then when you're done, you signify it with RTS=low?

What happens when you try and do it?

I've only done rs232 without flow control, so my knowledge is a bit limited
Yes that’s the idea, Here the RTS pin is not used actually for handshaking on RS232 is used for controlling data flow in the RS232_RS485 converter.(this is common for many converters). My connection with the controller on RS485 is half duplex. So when RTS goes to 0 logic (positive voltage) then the converter go to transmit mode. When RTS goes to 1 logic (negative voltage) converter goes in receive mode.
So in the moment I change the RTS pin status to low I have to transmit command and once I finish I have immediately put RTS to high.(all this cycle is around 1.5ms) This is the figure with the Dos app. In C# I tried a very simple test: Change the RTS pin to low and then to high (2 successive instructions) On the scope this is happening in around 20ms. So it’s not the fault of serial out buffer or something. Anyway I write only one byte. The cycle is too long for my equipment even if I send in this interval the correct command. The controller reply only in the case of dos diver. In the other case no reply, even I'm sure I send the same command(I checked with scope).Why I have this dead time between changing the RTS pin and writing to serial port the command. ??
Sorry for this long poetry and thanks for paying up attention to my problem.
Sep 10 '07 #5
Plater
7,872 Expert 4TB
I really don't know, it could be some sort of overhead for using SerialPort in a managed code setting, or just something kooky.

You could try setting your SerialPort object to USE flow control? (you might be able to set it up automatically so that it sets the RTS pin high, writes the command then sets the RTS low when it's done)
That might make the cycle a little faster?
Sep 10 '07 #6
svcc
14
I really don't know, it could be some sort of overhead for using SerialPort in a managed code setting, or just something kooky.

You could try setting your SerialPort object to USE flow control? (you might be able to set it up automatically so that it sets the RTS pin high, writes the command then sets the RTS low when it's done)
That might make the cycle a little faster?

It’s a good idea and I try it but when I set handshaking on RTSpin and run the
program something really bad happens into win XP. I see the blue screen and computer is restarting!!????
Sep 11 '07 #7
svcc
14
Last info: I tried with the serial port build in my docking station(COM1) and seems to be working
No delay and response from RS485 controller. Cold the problem be generated by the FTDI chip(inside my USB to RS232 converter??). My interest is to have communication possibility with newer computers only from USB. And also another point: If I buy a converter fromUSB
direct to RS485 how can I load the dll from the converter manufacturer (eg FTD2xx.dll) and use it in C#??. The dll cannot be loaded in ‘references’ as a regular .dll. The situation is more complicated. See the link http://www.ftdichip.com/Projects/CodeExamples/CSharp.htm

all the best
Sep 11 '07 #8
Plater
7,872 Expert 4TB
ahha! Yes FTDI chips are great and usefull but they're full of kooky stuff.
For any significant serialport communication you would be better off with a natural hardware one rathern then a USB converter.
(I pretty much only use mine for hyperterminal-standard in/out- and use my real serial port for programming and data control)

As for using their DLL that is something I looked breifly at, then detered into using it like a COM port again.
FTDI has some documentation on using it's API functions on its website that you may find usefull.
Sep 11 '07 #9
svcc
14
Sadly for me I have to focus on USB port, newer computers and especially laptops don’t have any more serial ports. I don’t have any information on this matter concerning other cip manufacturers(others than FTDI). I only tested 2 models of USB to RS232 converters having inside FTDI cips. Situation is frustrating because the ‘Bitbus‘ protocol is pretty slow at 9600baud. Even so because of the delay I miss the controller answer that is comming in 2ms. If I buy an USB to RS485 converter then I get rid of the RTS pin story (RS232-RS485 converter) but the questions are: How I program it in C# (I can’t use serial port class) ?? is anyone here tried the communication on RS485 in C#. It will be fast enough to switch efficient between TX and RX mode on RS485 in my case??
kind regards,

svcc
Sep 11 '07 #10
svcc
14
Hello,

I succeded finally to have an USB to RS485 converter,
I test directly serial comm on RS485 with serial port class in C#
I need to send an address eg ( 0x03 hex ) in 8 bit format to my controller.
In order to tell the controller that is an address I have to set the 9 bit (parity to Mark)
Then I receive the answer from controller (reply with his address 1 byte in hex if is the correct one )
Now I can send a command to Controller and I have to capture some data. (I have to set parity to Space).
I read some articles about serial communication in C# (asynchronous or synchronous)
And for receiving is better to use an receive data event like this
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
do
{

Do receive operation here with Read or ReadByte();
Finnaly have a byte array


}
while (!(port.BytesToRead == 0));
}
Now my question:

How can I use this receive event handler twice , once for receiving address then see if controller is responding and then write command and finally read may bytes of data ?
Or how can I implement if it is possible 2 separate data received events for the same serial port ?

Thank you in advance,

SVCC
Sep 27 '07 #11
Plater
7,872 Expert 4TB
It's been my experiance that you want to do as LITTLE as possible in the event itself or you lose data.

What I did was create a thread that basicly went like (simplified):
while(true)
{
If my boolean value says read data do this:
read data on serialport
add it to a buffer of data
set my boolean value to not readdata
if my boolean value says no data, do nothing
}

Then in my datarecievedevent ALL I do is change that boolean value to say it's time to read the data.
I changed to this because when i was reading the data in the event itself I was losing bytes.


So now you will have a buffer of data that has come in. You can look at this data whenever you want, and also clear it from time to time (recomended).
For instance, my device only responded to commands. So I would send it a command, wait for it to send me data, then process it and clear the buffer.
Worked good.
Sep 27 '07 #12
svcc
14
It's been my experiance that you want to do as LITTLE as possible in the event itself or you lose data.

What I did was create a thread that basicly went like (simplified):
while(true)
{
If my boolean value says read data do this:
read data on serialport
add it to a buffer of data
set my boolean value to not readdata
if my boolean value says no data, do nothing
}

Then in my datarecievedevent ALL I do is change that boolean value to say it's time to read the data.
I changed to this because when i was reading the data in the event itself I was losing bytes.


So now you will have a buffer of data that has come in. You can look at this data whenever you want, and also clear it from time to time (recomended).
For instance, my device only responded to commands. So I would send it a command, wait for it to send me data, then process it and clear the buffer.
Worked good.
Thank you for answer and for idea,
I will try your solution and let you know about results.
Because I was doing a lot of operation in data receive event I began to lose data And the only solution was to set ReceivedBytesThreshold to a known value. (usually I know how many bytes to expect) Then I was able to read all data in received event function like: port.Read (byte_array,0, BytesToRead); until BytesToRead>0
But the complication was that I have to perform read operation twice: One for address reply ( just 1 byte ,no problem with losing data). The second for the rest of data, after setting parity to Space and writing command. I didn’t find until now a reliable solution.

all the best
svcc
Sep 27 '07 #13
svcc
14
It's been my experiance that you want to do as LITTLE as possible in the event itself or you lose data.

What I did was create a thread that basicly went like (simplified):
while(true)
{
If my boolean value says read data do this:
read data on serialport
add it to a buffer of data
set my boolean value to not readdata
if my boolean value says no data, do nothing
}

Then in my datarecievedevent ALL I do is change that boolean value to say it's time to read the data.
I changed to this because when i was reading the data in the event itself I was losing bytes.


So now you will have a buffer of data that has come in. You can look at this data whenever you want, and also clear it from time to time (recomended).
For instance, my device only responded to commands. So I would send it a command, wait for it to send me data, then process it and clear the buffer.
Worked good.
Hello,

Please can you provide me a code snippet? I tried to implement the solution, and I don’t succeeded. Probably I’m still doing something wrong. I have to create a function witch contains the while loop or a new thread like:
Thread MyThread = new Thread(new ThreadStart
(DoSomethingFunction));
MyThread.Start()
Inside DoSomethingFuction() do codding?
The while (true) must be always on true? From my understanding the Boolean variable should lock the reading function after a successful read? I tried also to put 2 read functions calls in datarecievedevent .One function for first read the address, set parity and write command. The second only for data receive. But I get a mess and I loose data. By setting Thread.Sleep() to some value after write command I can read some data. Unfortunately this is not a stable solution.

Thank you,
Sep 28 '07 #14
Plater
7,872 Expert 4TB
I am attempting to cut out all my excess code from it.
Instead of a thread I had just used the timer object for windows.forms.
I didn't implement it exactly as I described ( I had actually had my timer reading to make sure bogus or extra data didn't appear on the bus...since my device would send out ALARM signals) but you should get idea here.

My data-ready event handler.
Expand|Select|Wrap|Line Numbers
  1. private void sp1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  2. {
  3.     dataready = true;
  4. }
  5.  
Then I have
Expand|Select|Wrap|Line Numbers
  1. private string FlushSP()
  2. {
  3.   string retval=null;
  4.   if (sp1.BytesToRead > 0)
  5.   {
  6.       retval += ReadSPData();
  7.   }
  8.   return retval;
  9. }
  10. private string ReadSPData()
  11. {
  12.     string retval = "";
  13.     try
  14.     {
  15.             if (dataready)
  16.             {
  17.                 retval += sp1.ReadExisting();
  18.                 dataready = false;
  19.             }
  20.     }
  21.     catch (Exception ee)
  22.     {
  23.         EAlert(ee, "Reading SerialPort Data");
  24.     }
  25.     return retval;
  26. }
  27.  
And I have a timer_tick function that looks for the data and reads it:
Expand|Select|Wrap|Line Numbers
  1. public string msg="";
  2. private void tmUpdater_Tick(object sender, EventArgs e)
  3. {
  4.     bool val = false;
  5.  
  6.     try
  7.     {
  8.         val = sp1.IsOpen;
  9.     }
  10.     catch (Exception ee)
  11.     {
  12.         //EAlert(ee, "Timer_Tick(1): '");
  13.     }
  14.  
  15.     if (val)
  16.     {
  17.         if ((dataready))
  18.         {
  19.             Thread.Sleep(500);
  20.             string temp==FlushSP();
  21.             temp=temp.Replace("\r\n", "\r\n\t");
  22.             msg+=temp;
  23.         }
  24.     }
  25.     else
  26.     {
  27.         //Port is diconnected
  28.     }
  29.  
  30.     try
  31.     {
  32.         bool dummy = sp1.DsrHolding;//used to trigger errors on removal of device
  33.         lbBytesready.Text = sp1.BytesToRead.ToString();
  34.     }
  35.     catch (UnauthorizedAccessException uae)
  36.     {// Occurs when Unplugging the usbToSerial
  37.         //Port is Disconnected
  38.     }
  39.     catch (InvalidOperationException ioe)
  40.     {
  41.     }
  42.     catch (Exception ee)
  43.     {
  44.         //EAlert(ee, "Timer_Tick(2): '");
  45.     }
  46. }
  47.  
Sep 28 '07 #15
svcc
14
Hello,

Thank you for the code snippet.
I work with bytes in my telegrams and I need finally byte array of received data
I tried with port.ReadExisting(); but I don’t have a hex string instead I have data converted in chars and I don’t need this.
Until now I was able to implement this code:
Expand|Select|Wrap|Line Numbers
  1.   //event data receive.
  2. private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) /
  3.         {
  4.  
  5.             Read_data();
  6.  
  7.         }
  8. //Read first address and then data into the same byte
  9.  array static byte[] data=new data[130]; 
  10. // I can have an answer of max 130 bytes
  11.   private void Read_data()
  12.         {
  13.  
  14.  
  15.                 int data_bytes = port.BytesToRead;
  16.  
  17.                 while (port.BytesToRead > 0 && port.BytesToRead<130)
  18.                 {
  19.                     port.Read(data, 0, data_bytes);
  20.                 }
  21.                 if (data_bytes != 0)
  22.                 {
  23.   // I use it  only once if the return address is 0x03 hex. Here I do address receiving.
  24.                     if (data[data_bytes-1] == 0x03 && X == false)
  25.                     {
  26.                         port.Parity = Parity.Space; //for data receiving and write commnad.
  27.                         X = true; 
  28.                         execute_write(0xd0, 0x00); //write command and expect to read data
  29.                         Thread.Sleep(500); //I have to set this in order to have time to receive all incomming bytes at serial port. I tried also to implemet this by setting ReceivedBytesThreshold because I know how many data bytes to expect but I cannot set it after I receive address.
  30.                     }
  31.                 }
  32.  
  33.  
  34.                 this.Invoke(new EventHandler(DoUpdate)); //here I call trough invoke a fuction to update the GUI with the hex data from (data array) 
  35.  
  36.  
  37.         }
  38.  
  39. My send fuction(button):
  40.  
  41. private void button2_Click(object sender, EventArgs e)
  42.         {
  43.  
  44.             if (control == false)
  45.             {
  46.                 X = false; //I have to control somehow the address receiving
  47.                 port.Parity = Parity.Mark; //only to tell that is an address
  48.                 execute_write(0x03, 0x00);
  49.                 //if I set now parity to space I have application crash.
  50.                 control = true; //for sending only one time address per whole cycle
  51.  
  52.             }
  53.  
  54.  
  55.         }
  56. //My write function:
  57. private void execute_write(byte a, byte b)
  58.         {
  59.             int count_wr = 2;
  60.             byte[] write_buff = new byte[2];
  61.             write_buff[0] = a;
  62.             write_buff[1] = b;
  63.             if (write_buff[1] == 0x00)
  64.             {
  65.                 count_wr = 1;
  66.             }
  67.             else
  68.             {
  69.                 count_wr = 2;
  70.             }
  71.             if (port.IsOpen)
  72.             {
  73.  
  74.                 try
  75.                 {
  76.                     //port.DiscardInBuffer();
  77.                     //port.DiscardOutBuffer();
  78.  
  79.                     port.Write(write_buff, 0, count_wr);
  80.                     // port.WriteTimeout = 10;
  81.  
  82.                 }
  83.                 catch (Exception ex)
  84.                 {
  85.                     MessageBox.Show(ex.Message);
  86.                 }
  87.  
  88.             }
  89.             else
  90.             {
  91.                 MessageBox.Show("COM port is closed. Please select a COM port");
  92.             }
  93.  
  94.         }
  95.  
The code is working but I noticed something strange.
I use “9 bit communication" in order to tell the controller that I send an address. When I send the address (eg 0x03 hex) I expect one answer 0x03
Instead I got something 3F, 03 or 3F, 3F, 03. I put the scope on RS485 bus. On the scope channels I notice only one answer(the correct 0x03 reply).

Now 3F or 63 in decimal is “?” set from serial port for parity errors
Why is happening this ???!!!! And also another point. When I tried to set
the parity from Mark to Space immediately after I send address my application crashes? If I set the parity later is OK. It looks like serial port need some time when switching the parity. Please tell me your oppinion about that and maybe you have better ideas how to improuve the code.
Oct 1 '07 #16
Plater
7,872 Expert 4TB
I used chars just because my device talked ascii.
You can use a byte[] array or whatever storage method you want.

As for the parity stuff that i don't know. I tried using flowcontrol and the like once and it seemed like the responsiveness was very poor.

Getting more then one byte back when you think you should be getting just one sounds like a timming issues (i.e. baudrate differences)
But also keep in mind, if you turn on various types of flowcontrol/parity, some byte values have special meaning, 0x04 and 0x06 for instance of flow control characters I believe.
Oct 1 '07 #17
svcc
14
I used chars just because my device talked ascii.
You can use a byte[] array or whatever storage method you want.

As for the parity stuff that i don't know. I tried using flowcontrol and the like once and it seemed like the responsiveness was very poor.

Getting more then one byte back when you think you should be getting just one sounds like a timming issues (i.e. baudrate differences)
But also keep in mind, if you turn on various types of flowcontrol/parity, some byte values have special meaning, 0x04 and 0x06 for instance of flow control characters I believe.

Thanks for replying quick as usual.
For the baud rate I’m sure on it, it’s 9600baud. The phenomena happens only when I play with parity. My controler is understanding the address (I see clear on the scope only one reply then waits for command). All signals are good and I can see with the scope the command and data after going correctly.
The only moment when I’m in Mark parity is when I send the address. Parity is changing to Space (without this I cannot continue with sending the command and this I can see clearly on the scope). I don’t use other handshake/flowcontrol method. Using the parity in this way is required by the specification of my comm protocoll.
So the behaviour of C# read fuction is like “I cannot change fast enough parity and get receive error” So I receive 2 or 3 bytes instead of one. I’ll start writing the code again based an your snippet and let you know about results.Once more many thanks for your efforts and for the time you spend on my problem
Oct 1 '07 #18
svcc
14
Hello,

Recently when trying to rewrite my C# application I hit myself into the following issue:
I was trying to use BytesToWrite property to be sure that all bytes have been written before giving a new command. But strange BytesToWrite seems always to return 0. Why is happening so?. It should be working according to Microsoft online documents or I miss something
Thanks for reply.
Oct 9 '07 #19
Plater
7,872 Expert 4TB
I am pretty sure you would have to send a SERIOUSLY huge amount of data for it to be backedup and still have bytes to write.
Or it could be something about auto-flushing on the stream, I'm not sure.

I did recently learn that System.Windows.Forms.Timer's -> Tick() event doesn't have priority over things and was not getting called at correct times, so if you were using it to gather data as I hinted at, try one of the other time objects.
Oct 9 '07 #20
Dear,

the application usually works, when I open first in the hyperterminal and closed.

Else makes this procedure the application doesn't work.

Did anybody already go by this problem?

Thanks
Oct 9 '07 #21
Plater
7,872 Expert 4TB
Only ONE program can use a com port at a time.
Dear,

the application usually works, when I open first in the hyperterminal and closed.

Else makes this procedure the application doesn't work.

Did anybody already go by this problem?

Thanks
Oct 9 '07 #22
Hi Platter,

I think I didn't go clear

However if me don't open the hyperterminal and to close him, my application doesn't work.

I am accessing a Switch Cisco for administration.

To separate Switch and to call again and to try to access direct of the application it doesn't work.

The application opens the door usually but doesn't send the commands. In case opens Hyperteminal and close. And to open the application again he usually works.


it follows the code below:

if (m_comPort != null)
{
if (m_comPort.IsOpen)
{
m_comPort.Close();
}
}
else
{
m_comPort = new SerialPort();
}

m_comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

/// Port Name
m_comPort.PortName = comPortSwitch.SelectedItem.ToString(); ;

m_comPort.BaudRate = 9600;

m_comPort.StopBits = StopBits.One;

m_comPort.Parity = Parity.None;

m_comPort.DataBits = 8;

m_comPort.Handshake = System.IO.Ports.Handshake.RequestToSend;

m_comPort.Open();

m_comPort.DtrEnable = true;

m_comPort.Write(txtCommands.Text);

m_comPort.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

m_comPort.Close();

will it be that it lacks some thing?


Thanks
Oct 9 '07 #23
Plater
7,872 Expert 4TB
If hyperterminal is "connected" on a COM port, it has it open and your program isn't allowed to use it until you "disconnect" (close) the port in hyperterminal
Oct 9 '07 #24
everything well,

the hyperterminal is already disconnected.

But for my application to get to send commands for the equipment.

I need to enter in Hyperteminal and soon soon afterwards to close.

Then to enter again in the application. It seems that when I enter in Hyperterminal he enables some thing
Oct 9 '07 #25
svcc
14
I am pretty sure you would have to send a SERIOUSLY huge amount of data for it to be backedup and still have bytes to write.
Or it could be something about auto-flushing on the stream, I'm not sure.

I did recently learn that System.Windows.Forms.Timer's -> Tick() event doesn't have priority over things and was not getting called at correct times, so if you were using it to gather data as I hinted at, try one of the other time objects.
Hi Plater ,

Thanks for replying,
Regarding the BytesToWrite I felt the need for some way to know precise when write operation finishes and I explain you why.
For example I have a button function and inside I have to write to my controller a sequence of commands. I noticed that I have to press the button on GUI many times until the controller executes. I made further experiments and I discovered that all this stuff is related to my 9 bit communication system using parity bit in order to tell the controller that I send an address.
So if I have the following snippet:
private void button1_Click(object sender, EventArgs e)
{
port.Parity = Parity.Mark;
Thread.Sleep(10);
port.write(address byte,0,count);
Thread.Sleep(10);
port.Parity = Parity.Space;
port.write(command bytes,0, count);
port.write(data bytes,0,count);

}

Without the Treed.Sleep() timings I have the situation described above (no stable communication) It seems for me that when switching parity you need some extra time, otherwise you will get errors. First I was thinking that I can use BytesToWrite to be sure when to change parity. I think it’s also possible that this could generate the parity issue described in my earlier posts. Because Treed.Sleep() is not so precise do you know a better way to implement a precise timer in C#?
Regarding the point with System.Windows.Forms.Timer's what kind of timer function in C# you recommend for gathering data?
Oct 10 '07 #26
Plater
7,872 Expert 4TB
Possibly a whole other thread entirely, I'm not sure as other things came up and the project has been abandoned for now.

It's possible that the reason you have to wait is something inherent to the timings involved at the hardware level. Like to send a single character on rs232 there's a preamble then the character and sometimes a deliminator sequence of 0s and 1s. It's possible that sending the parity bit change at the wrong time causes signals of 0s and 1s to get mis-interpreted.
I'm just guessing, and you're outside my realm of knowledge on this stuff, so I'm not sure what else to offer.
Oct 10 '07 #27
svcc
14
Possibly a whole other thread entirely, I'm not sure as other things came up and the project has been abandoned for now.

It's possible that the reason you have to wait is something inherent to the timings involved at the hardware level. Like to send a single character on rs232 there's a preamble then the character and sometimes a deliminator sequence of 0s and 1s. It's possible that sending the parity bit change at the wrong time causes signals of 0s and 1s to get mis-interpreted.
I'm just guessing, and you're outside my realm of knowledge on this stuff, so I'm not sure what else to offer.
Hi Plater

I succeded to solve my problem. I found a very good article abou serial port in .NET and I want to share it http://www.innovatic.dk/knowledg/SerialCOM/SerialCOM.htm
My last problem was related to the 11 bit communication and with parity
changing. I found the explanation reading this article:
"Microsoft has put an 8 bit wide buffer on top of the 11-bit receiver FIFO and therefore destroyed the possibility for a precise Break, 9th bit and error detection. "

All the best,

SVCC
Dec 7 '07 #28

Sign in to post your reply or Sign up for a free account.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.