Доброго времени суток.
Есть класс, в котором объект класса QSerialPort. Его сигнал readyRead(), связан с моим слотом.
Слот сначала говорит, что минимальный размер пакета должен быть 15 байт, затем делает первичный разбор пакета на наличие синхробайта. (Если синхробайт первый в пакете - все отлично. Но проверяем каждый последующий байт. Если опять синхробайт - значит уже другой пакет.)
Ниже сам код. 
void SPort::slotReadPort()
{
    QByteArray arrayFromPort, arrayRecieve;
    arrayFromPort.clear();
    arrayRecieve.clear();
    quint64 buf = _port.bytesAvailable();
    quint64 minBuf = 15;
    QString packet;
    if (buf < minBuf)
        return;
    else {
        arrayFromPort = _port.read(buf);
        packet = arrayFromPort.toHex();
        for (int i = 0; i < arrayFromPort.size(); i++) {
            switch (arrayFromPort.at(i)) {
            case 00: { // синхробайт
                if (i == 0) {
                    arrayRecieve.append(arrayFromPort.at(i));
                    break;
                } else {
                    if (i < (minBuf - 1)) {
                        for (int z = 2; z < packet.size(); z += 3)
                            packet.insert(z, ' '); // для ведения лога удобнее читать по байтам, вот и делю
                        emit signalMessageOutPort("<< " + _port.portName() + " -- пришел битый пакет: " + packet); //не большой лог в главном окне программы
                        emit signalMessageToLog("<< " + _port.portName() + " -- пришел битый пакет: " + packet); // основной лог
                        arrayRecieve.clear();
                        arrayFromPort.clear();
                        packet.clear();
                        goto stop; // выход полностью из слота
                        break;
                    } else {
                        QString msg = arrayRecieve.toHex();
                        for (int z = 2; z < msg.size(); z += 3)
                            msg.insert(z, ' ');
                        emit signalMessageToLog("<< " + _port.portName() + " -- " + msg);
                        emit signalArrayOutPort(arrayRecieve);
                        arrayFromPort.clear();
                        arrayRecieve.clear();
                        goto stop;
                        break;
                    }
                    break;
                }
            }
            default:{
                arrayRecieve.append(arrayFromPort.at(i));
                break;
            }
            }
        }
        if (arrayRecieve.size() >= minBuf) {
            QString msg = arrayRecieve.toHex();
            for (int z = 2; z < msg.size(); z += 3)
                msg.insert(z, ' ');
            emit signalMessageToLog("<< " + _port.portName() + " -- " + msg); // основной лог
            emit signalArrayOutPort(arrayRecieve); // передача пакета для дальнейшего разбора
            arrayFromPort.clear();
            arrayRecieve.clear();
            _port.clear(QSerialPort::Input);
            return;
        }
    }
    stop:
    arrayFromPort.clear();
    arrayRecieve.clear();
    _port.clear(QSerialPort::Input);
}
Беда в том, что иногда пакеты приходят дважды. Помогите решить проблему. Отправляются точно по одному пакету (смотрю через qDebug()). Заранее благодарен