public byte[] Read(uint address, uint nrOfBytes) { _readBuffer.Clear(); _readBuffer.Add((byte)AvrPacketType.ReadRegister); _readBuffer.Add((byte)5); // length of the payload + header _readBuffer.AddRange(BitConverter.GetBytes((ushort)address)); _readBuffer.Add((byte)nrOfBytes); lock (_syncRoot) { _receivedBuffer = null; } _awaitReadRegStatus.Reset(); _serialPort.Write(_readBuffer.ToArray(), 0, _readBuffer.Count); if (!_awaitReadRegStatus.WaitOne(5000)) { _serialPort.Reset(); throw new TimeoutException("Read register timed out"); } //System.Threading.Thread.Sleep(5); return(_receivedBuffer); }