Os dados são corrompidos durante a transmissão pela porta serial

Estou desenvolvendo um programa para se comunicar com um sistema antigo. Eu uso System.IO.Ports.SerialPort para isso. O problema é que quando envio uma mensagem mais longa, a mensagem bevome está corrompida. Eu uso um ouvinte de linha e obtenho os seguintes resultados

O que estou enviando

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 

O que eu ganh

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

O código que estou usando é

_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 que os dados estão corrompidos e como faço para corrigir isso?

questionAnswers(1)

yourAnswerToTheQuestion