Ähnlich wie bei LIN wird der Beginn eines Frames von einem Synchronisationsfeld angeführt. Bei SENT ist dies ein 168 µs langes Sync-Intervall. Die Dauer dieses Intervalls wird gemessen und daraus ein Korrekturfaktor ermittelt, mit dem alle weiteren Zeitintervalle der Daten-Nibbles skaliert und damit korrigiert werden.
Durch diesen kontinuierlichen Abgleich der Taktzyklen der Timer von Mikrocontroller und TLE4998S können im Sensor und auch im Mikrocontroller interne Ring- oder RC-Oszillatoren mit vergleichsweise großen Toleranzen verwendet werden.
Nach dem Sync-Intervall folgen acht Daten-Nibbles. Aus der gemessenen Dauer zwischen zwei negativen Flanken wird ein Tabellenindex für den Wert des Nibbles ermittelt:
dauer = ((u16)(168*dauer + (dauer_sync/2)))/((u16)dauer_sync) – 35;
Divisionen sind für Mikrocontroller rechenintensiv und damit zeitaufwendig. Ohne Hardware-Unterstützung auf dem Chip übersetzen die Compiler Multiplikationen und Divisionen in Unterprogrammaufrufe entsprechender Bibliotheksroutinen. Hier bietet der STM8 den Vorteil, dass sein Kern sowohl über MUL- als auch DIVW-Befehle verfügt, wobei letzterer mit nur maximal 17 Zyklen zu Buche schlägt. Damit werden auch Divisoren akzeptabel, die keine Zweierpotenzen sind.
Falls nicht anders programmiert, entsprechen beim TLE4998S 3 µs einem LSB im Daten-Nibble. Da nicht jeder 8-bit-Mikrocontroller über eine Hardware-Divisionseinheit verfügt, kann die Look-up-Tabelle um den Faktor 3 gespreizt werden, um weitere Divisionen zu vermeiden:
uc8 TLookup[] = {0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7, 8,8,8, 9,9,9, 10,10,10, 11,11,11, 12,12,12, 13,13,13, 14,14,14, 15,15,15};
Die Variable dauer ist damit als Index für diese Tabelle mit 48 Einträgen geeignet. Das Datum eines Nibbles ergibt sich damit durch:
nibble[nibble_counter++] = *(TLookup+dauer);