Hi,

ich hab auch vor einiger Zeit mein eigenes Protokoll entwickelt (mittlerweile gibts ein paar Verbesserungen, aber das wäre zuviel).
Es ging damals darum, ein Byte-Array von einem µC auf einen PC und andersrum zu übertragen. Da ich aber nichtmehr soviel Platz auf dem µC hatte, dachte ich mir, jedes einzelne Byte, das gespart werden kann, wird gespart!
Also hab ich mir die Situation rausgesucht, bei der die meisten Byte übertragen werden müssen und diese Byte-Anzahl als Norm-Länge verwendet.
Nun wird einfach immer ein Array dieser Länge (bei mir sind 132 Byte) übertragen, incl. Erkennungsbytes (damit der Empfänger weiß, was er mit den Daten machen soll).
Um niemals die Synchronisation zu verlieren, frage ich regelmäßig die Anzahl der bereits empfangenen Daten ab und kucke mir die Zeit an, seit der sich die Anzahl nicht mehr verändert hat. Wird eine bestimmte Zeit überschritten, gehe ich davon aus, dass Daten verlorengegangen sind und setze die Zähler zurück.
Das ganze läuft bei mir auf dem µC per DMA, so wird sogut wie keine Zeit für das Empfangen verschwendet.
Neuerdings schwirren mir wieder ein paar Verbesserungen im Kopf rum, welche ich demnächst wohl mal einpflegen werde.
Zum Beispiel will ich von der festen Array-Länge weg, da es in manchen Fällen vorkommen kann, dass nur 10% von den 132 Bytes effektiv genutzt werden. Das ist zwar grundsätzlich egal, sieht aber nicht schön aus.
Auch wäre eine Verbindung verschiedener µCs untereinander nicht schlecht, sodass am Anfang eines Arrays zuerst der Empfänger, dann der Sender, dann die Anzahl der folgenden Bytes und anschließend evtl. noch eine Checksumme integriert sind. Außerdem wäre es eine schicke Idee, die Daten sozusagen Seitenweise zu übertragen, heißt:
Eine Seite ist z.b. 10Bytes lang, in ihr befinden sich alle relevanten Informationen für die Übertragung ansich, ebenso wie die zu übertragenden Daten selbst. Unter den für die Übertragung relevanten Daten finden sich noch zwei Werte, die akt. Seitenzahl und die Gesamtseitenzahl. So liesen sich mit nur 10Bytes Speicher große Datenmengen übertragen.
Das Alles noch mit einem ACK abgerundet, fertig ist ein High-Level-Protokoll.

Es kommt aber eben darauf an, WAS du willst. Willst du Daten schnell austauschen, störsicher, große Datenmengen, etc ... ?

Gruß
Chris