Los datos se corrompen durante la transmisión a través del puerto serie

Estoy desarrollando un programa para comunicarme con un sistema antiguo. Yo uso System.IO.Ports.SerialPort para esto. El problema es cuando envío un mensaje más largo, el mensaje se volvió corrupto. Utilizo un oyente de línea y obtengo los siguientes resultados

Lo que envío

aa 01 00 00 12 03 06 18 02 c1 94 02 c1 94 00 00 00 00 00 00 00 00 00 00 00 00 1e fd 

Lo que consig

c2 aa 01 00 00 12 03 06 18 02 c3 81 c2 94 02 c3 81 c2 94 00 00 00 00 00 00 00 00 00 00 00 00 1e c3 bd

El código que estoy usando es

_comPort.Encoding = new UTF8Encoding();
_comPort.PortName = PortName;  //Com1
_comPort.BaudRate = BaudRate;  //9600
_comPort.StopBits = StopBits;  //1
_comPort.DataBits = DataBits;  //8
_comPort.Parity   = Parity;    //None
_comPort.Open();

_comPort.Write(messageStr);

¿Por qué los datos están dañados y cómo soluciono esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta