Serial/HDLC

From TinyOS Wiki
Jump to: navigation, search
Low Level Serial Packet Format
Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 HDLC Flag Ser_Proto (Addr) Seq_Num (Ctrl) Dispatch (Protocol)
4 32 o o o
... ... payload
... ... o o o
... ... CRC (lsb) CRC (msb)
... ... HDLC Flag

(Based on T2.1.2 source as of 10/24/2012).


See RFC 1662 for more details.


HDLC Flag 
(framing) 0x7E, HDLC framing byte. Indicates start of packet.
Ser_Proto (Addr) 
HDLC Address byte. Used to indicate low level serial protocol. Only 0x44 (68), SERIAL_PROTO_PACKET_ACK and 0x43 SERIAL_PROTO_ACK are supported.
Seq_Num (Ctrl)
HDLC Control byte. Used for sequence number. May or may not be present (see NO_TX_SEQNO).
Dispatch (Protocol)
HDLC Protocol byte. Used to indicate payload type.
CRC 
two byte CRC-16, covers all bytes Ser_Proto through last payload byte. This disagrees with TEP 113 (but is from the source code). Transmitted LSB first.
HDLC flag 
(framing) 0x7E, closing flag


The bytes 0x7D and 0x7E may not appear inside the packet. 0x7E is framing and 0x7D is escape. 0x7D -> 0x7D 0x5d and 0x7E -> 0x7D 0x5E.


Dispatch (Next Layer Packet Type)
Dispatch Protocol type
0 Active Messaging
1 Active Messaging (len16)