Difference between revisions of "Serial/HDLC"

From TinyOS Wiki
Jump to: navigation, search
(New page: The following table shows several representation formats: {| class="wikitable" border="2" |+ blah blah blah |- ! header 1 !! Header 2 !! Header 3 |- | row 1, cell 1 | row 1, cell 2 | row ...)
 
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
The following table shows several representation formats:
+
{| class="wikitable" style="text-align:center" border="2"
 
+
|+Low Level Serial Packet Format
{| class="wikitable" border="2"
 
|+ blah blah blah
 
|-
 
! header 1 !! Header 2 !! Header 3
 
|-
 
| row 1, cell 1
 
| row 1, cell 2
 
| row 1, cell 3
 
|-
 
| row 2, cell 1
 
| row 2, cell 2
 
| row 2, cell3
 
|-
 
| Dotted decimal
 
| 192.0.2.235
 
| N/A
 
|-
 
| Dotted hexadecimal
 
| 0xC0.0x00.0x02.0xEB
 
| Each octet is individually converted to hexadecimal form
 
|-
 
| Dotted octal
 
| 0300.0000.0002.0353
 
| Each octet is individually converted into octal
 
 
|-
 
|-
| Hexadecimal
+
! style="border-bottom:none; border-right:none;"|
| 0xC00002EB
+
! style="border-left:none;"| Octet
| Concatenation of the octets from the dotted hexadecimal
 
|-
 
| Decimal
 
| 3221226219
 
| The 32-bit number expressed in decimal
 
|-
 
| Octal
 
| 030000001353
 
| The 32-bit number expressed in octal
 
|}
 
 
 
 
 
 
 
 
 
{| class="wikitable" style="text-align:center" border="3"
 
|+IPv4 Header Format
 
|-
 
! style="border-bottom:none; border-right:none;"| ''Offsets''
 
! style="border-left:none;"| [[Octet (computing)|Octet]]
 
 
! colspan="8" | 0
 
! colspan="8" | 0
 
! colspan="8" | 1
 
! colspan="8" | 1
Line 52: Line 9:
 
! colspan="8" | 3
 
! colspan="8" | 3
 
|-
 
|-
! style="border-top: none" | [[Octet (computing)|Octet]]
+
! style="border-top: none" | Octet
! [[Bit]]
+
! Bit
 
! style="width:2.6%;"| 0
 
! style="width:2.6%;"| 0
 
! style="width:2.6%;"| 1
 
! style="width:2.6%;"| 1
Line 89: Line 46:
 
! 0
 
! 0
 
! 0
 
! 0
| colspan="4"|''Version''
+
| colspan="8"| HDLC Flag
| colspan="4"|''IHL''
+
| colspan="8"| Ser_Proto (Addr)
| colspan="6"|''DSCP''
+
| colspan="8"| Seq_Num (Ctrl)
| colspan="2"|''ECN''
+
| colspan="8"| Dispatch (Protocol)
| colspan="16"|''Total Length''
 
 
|-
 
|-
 
! 4
 
! 4
 
! 32
 
! 32
| colspan="16"|''Identification''
+
| colspan="8" style="background:#ffd0d0;" | o o o
| colspan="3"|''Flags''
 
| colspan="13"|''Fragment Offset''
 
 
|-
 
|-
! 8
+
! ...
! 64
+
! ...
| colspan="8"|''Time To Live''
+
| colspan="8" style="background:#ffd0d0;" | payload
| colspan="8"|''Protocol''
 
| colspan="16"|''Header Checksum''
 
 
|-
 
|-
! 12
+
! ...
! 96
+
! ...
| colspan="32"|''Source IP Address''
+
| colspan="8" style="background:#ffd0d0;" | o o o
 
|-
 
|-
! 16
+
! ...
! 128
+
! ...
| colspan="32"|''Destination IP Address''
+
| colspan="8" | CRC<small> (lsb)</small>
 +
| colspan="8" | CRC<small> (msb)</small>
 
|-
 
|-
! 20
+
! ...
! 160
+
! ...
| colspan="32" rowspan="4" style="background:#ffd0d0;"|''Options (if IHL > 5)''
+
| colspan="8" | HDLC Flag
 
|}
 
|}
 +
<small>(Based on T2.1.2 source as of 10/24/2012).</small>
  
; Version : The first header field in an IP [[packet (information technology)|packet]] is the four-bit version field. For IPv4, this has a value of 4 (hence the name IPv4).
 
  
; Internet Header Length (IHL) : The second field (4 bits) is the Internet Header Length (IHL), which is the number of 32-bit [[Word (data type)|words]] in the header. Since an IPv4 header may contain a variable number of options, this field specifies the size of the header (this also coincides with the offset to the data). The minimum value for this field is 5 (RFC 791), which is a length of 5×32 = 160 bits = 20 bytes. Being a 4-bit value, the maximum length is 15 words (15×32 bits) or 480 bits = 60 bytes.
+
See RFC 1662 for more details.
  
; Differentiated Services Code Point (DSCP)
+
 
:Originally defined as the [[Type of Service]] field, this field is now defined by RFC 2474 for [[Differentiated services]] (DiffServ). New technologies are emerging that require real-time data streaming and therefore make use of the DSCP field. An example is [[Voice over IP]] (VoIP), which is used for interactive data voice exchange.
+
; 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.
 +
 
 +
 
 +
{| class="wikitable" style="text-align:center; width: 400px" border="2"
 +
|+Dispatch (Next Layer Packet Type)
 +
|-
 +
! Dispatch
 +
! Protocol type
 +
|-
 +
| 0 || Active Messaging
 +
|-
 +
| 1 || Active Messaging (len16)
 +
|}

Latest revision as of 03:16, 24 October 2012

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)