Вопрос: C# com-порт получение информации, обработка старт-бита, стоп-бита?

Лучший ответ: Если я правильно понял ваш вопрос, то ваше устройство шлёт постоянно данные и вам нужно только читать.
Все что вам нужно, это создать подключение к порту и подписаться на событие обновления. При возникновении события вы получите массив данных с порта, этот массив вы сохраняете в буфер или разбираете на лету (как вам удобнее). Напишу для вас маленький пример://  Наследуем наш клас от SerialPort для более красивого кода
public class MySerialPort : SerialPort
{
        private const int DataSize = 54;    //  я так и не понял, какой размер данных нужен. Укажите правильное число в байтах
        private readonly byte[] _bufer = new byte[DataSize];
        private int _stepIndex;
        private bool _startRead;

        public MySerialPort(string port)
            : base()
        {
            //  все папаметры вы должны указать в соответствии с вашим устройством
            //base.PortName = COM1;
            base.BaudRate = 115200;
            base.DataBits = 8;
            base.StopBits = StopBits.Two;
            base.Parity = Parity.None;
            base.ReadTimeout = 1000;

            //  тут подписываемся на событие прихода данных в порт
            //  для вашей задачи это должно подойт идеально
            base.DataReceived += SerialPort_DataReceived;
        }

        //  открываем порт передав туда имя
        public void Open(string portName)
        {
            if (base.IsOpen)
            {
                base.Close();
            }
            base.PortName = portName;
            base.Open();
        }

        //  эта функция вызвется каждый раз, когда в порт чтото будет передано от вашего устройства
        void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            var port = (SerialPort)sender;
            try
            {
                //  узнаем сколько байт пришло
                int buferSize = port.BytesToRead;
                for (int i = 0; i < buferSize; ++i)
                {
                    //  читаем по одному байту
                    byte bt = (byte)port.ReadByte();
                    //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
                    if (0xFF == bt)
                    {
                        _stepIndex = 0;
                        _startRead = true;
                        //  раскоментировать если надо сохранять этот байт
                        //_bufer[_stepIndex] = bt;
                        //++_stepIndex;
                    }
                    //  дописываем в буфер все остальное
                    if (_startRead)
                    {
                        _bufer[_stepIndex] = bt;
                        ++_stepIndex;
                    }
                    //  когда буфер наполнлся данными
                    if (_stepIndex == DataSize && _startRead)
                    {
                        //  по идее тут должны быть все ваши данные.

                        //  .. что то делаем ...
                        //  var item = _bufer[7];

                        _startRead = false;
                    }
                }
            }
            catch {}
        }
}
использовать это нужно так:var port = new MySerialPort();
port.Open("COM5");
Это код прототипа, всего лишь техника работы которая может помочь вам.

Худший ответ: Читать из порта пока не будет маркера начала пакета. После этого читать 52 байта, проверить сумму и обработать. Не прокатит?