Witam.
Próbuję odczytać ATR karty w standardzie ISO 7816.
Po wykonaniu

serialPort1->DiscardInBuffer();
serialPort1->DiscardOutBuffer();
serialPort1->RtsEnable = true;
serialPort1->RtsEnable = false;

powinna nastąpić odpowiedź na tzw. reset karty (ATR= Answer to reset).
Problem w tym że zamiast 3B 24 00 30 42 30 30 otrzymuję 3B 24 3F 0E 9C FE 30 30

Ustawienia portu COM
zdefiniowany jako

this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components));
serialPort1->Encoding = System::Text::Encoding::Default;
serialPort1->PortName =  comboBox1->Text;
serialPort1->BaudRate = 9600;
serialPort1->Parity = Parity::Even;
serialPort1->StopBits = StopBits::Two;
serialPort1->DataBits = 8;
serialPort1->Handshake = Handshake::None;
serialPort1->ReadTimeout = 500;
serialPort1->WriteTimeout = 500;

Poniżej dwa fragmenty (dwie wersje) tego handlera

static void DataReceviedHandler(System::Object sender,SerialDataReceivedEventArgs e) {
...

}

Zły odczyt mam gdy czytam bajt po bajcie

SerialPort^ sp = (SerialPort^)sender;
array<Byte> ^data = gcnew array<Byte>(sp->BytesToRead);
int i=0;
while (sp->BytesToRead > 0)
                                   {
                                     data[i]= Convert::ToByte(sp->ReadByte());
                                     i++;
                                   }

Podobnie gdy za pomocą ReadExisting() albo Read()

SerialPort^ sp = (SerialPort^)sender;
array<Byte> ^data = gcnew array<Byte>(sp->BytesToRead);
sp->Read(data, 0, data->Length);

	

Pomoże ktoś ?? Śledzę zmienną data w debuggerze i wynik jest 3B 24 3F 0E 9C FE 30 30 zamiast omawianego
Pierwotnie korzystałem z ReadExisting(), ale po przeczytaniu http://stackoverflow.com/questions/3583930/system-io-ports-using-rtsenabled-receiving-wrong-packet zmieniłem na Read() a później na ReadByte(). Bez skutku