In general if you have a byte-oriented stream protocol and you want to encode metadata within it then you select a byte to use as a control byte and use the next byte as an instruction as to what to do. For example, you might select 0xFF as the control byte and then use the next byte for example as 0=start, 1=stop, 2=0xFF. Then if a receiver joins the stream at any point and the first byte they read is 0, 1 or 2 they discard it (because it's ambiguous) and start reading at the next byte.
I'm unsure if that's what you were asking for. You also mentioned circular buffers but I can't relate start/stop codes to that because circular buffers normally use offsets or pointers as the read/write position indicators.
Quote
I have a seconds question which would be why the reflow project use eeprom_write_ instead of eeprom_update_?https://github.com/andysworkshop/awreflow2/blob/master/atmega8l/Eeprom.h
No reason. Both calls do the job. If you anticipate getting near the 100000 write cycle level and you might be writing the same data as the cell already contains then update is the better choice.