M-Stream 2.3
M-Stream data has packet structure. Large packets may be split to fragments with same Packet ID to fit in encapsulating frame.
M-Stream 2.0 defines M-Stream Header, Event Header and User Payload data objects. In fragmentation process, M-Stream Header is persistent and should be present in all fragments. Event Header should be present in first fragment only.
M-Stream Header |
|||||||||||||||||||||||||||||||
word # |
byte offset |
bits |
description |
||||||||||||||||||||||||||||
0 |
0 |
31:24 |
|||||||||||||||||||||||||||||
23:18 |
Flags |
||||||||||||||||||||||||||||||
17:16 |
Subtype |
||||||||||||||||||||||||||||||
15:0 |
Fragment length |
||||||||||||||||||||||||||||||
1 |
4 |
31:16 |
Packet ID |
||||||||||||||||||||||||||||
15:0 |
Fragment offset code |
Flags bits |
||
bit |
value |
|
5 |
LF(last fragment) |
|
4 |
EVC (Event Complete) |
|
3 |
FIN (not used yet) |
|
2 |
SYN (not used yet) |
|
1 |
RST (not used yet) |
|
0 |
ACK |
Fragment length is defined as number of bytes starting at offset 8. For M-Stream frame of size N 32-bit words, fragment length value is 4*(N-2).
Fragment offset code is number of 64-byte blocks. Fragmentation is performed at 64-byte block boundary (compare to 8 bytes in IP fragmentation).
Fragmentation supports maximum of 64*2^16 = 4 MByte data payloads.
Fragment ID is 16-bit number (0-65535).
Flags:
LF - last part of current fragment (<Fragment length>+<Fragment offset code> = <Full length of this fragment>)
- EVC - last part of current event (One sets with LF flag for last channel in current event)
ACK - acknowledge flag: is set in MStream receiver program to inform device of reciecing package which contains fragment with corresponding FragmentId and FragmentOffset
Subtype 0: Trigger and User Data
M-Stream Header |
|||||||||||||||||||||||||||||||
word # |
byte offset |
bits |
description |
||||||||||||||||||||||||||||
0 |
0 |
31:24 |
|||||||||||||||||||||||||||||
23:18 |
Flags |
||||||||||||||||||||||||||||||
17:16 |
Subtype (0) |
||||||||||||||||||||||||||||||
15:0 |
Fragment length, 4*(N-2) |
||||||||||||||||||||||||||||||
1 |
4 |
31:16 |
Packet ID |
||||||||||||||||||||||||||||
15:0 |
Fragment offset code |
||||||||||||||||||||||||||||||
Subtype 0 Header |
|||||||||||||||||||||||||||||||
2 |
8 |
31:0 |
Device serial number |
||||||||||||||||||||||||||||
3 |
12 |
31:24 |
Subtype and custom bits |
||||||||||||||||||||||||||||
23:0 |
Event number |
||||||||||||||||||||||||||||||
M-Stream Subtype 0 Payload |
|||||||||||||||||||||||||||||||
4 |
16 |
31:0 |
Event timestamp, TAI seconds |
||||||||||||||||||||||||||||
5 |
20 |
31:2 |
Event timestamp, TAI nanoseconds |
||||||||||||||||||||||||||||
1:0 |
Event timestamp, TAI flags |
||||||||||||||||||||||||||||||
6 |
24 |
31:0 |
User defined payload |
||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
N-1 |
4*(N-1) |
31:0 |
TAI flags: 2 - timecode is valid, otherwise invalid.
Subtype 1: User Data, Channel-Based Readout
M-Stream Header |
|||||||||||||||||||||||||||||||
word # |
byte offset |
bits |
description |
||||||||||||||||||||||||||||
0 |
0 |
31:24 |
|||||||||||||||||||||||||||||
23:18 |
Flags |
||||||||||||||||||||||||||||||
17:16 |
Subtype (1) |
||||||||||||||||||||||||||||||
15:0 |
Fragment length, 4*(N-2) |
||||||||||||||||||||||||||||||
1 |
4 |
31:16 |
Packet ID |
||||||||||||||||||||||||||||
15:0 |
Fragment offset code |
||||||||||||||||||||||||||||||
Subtype 1 Header |
|||||||||||||||||||||||||||||||
2 |
8 |
31:0 |
Device serial number |
||||||||||||||||||||||||||||
3 |
12 |
31:24 |
Channel number |
||||||||||||||||||||||||||||
23:0 |
Event number |
||||||||||||||||||||||||||||||
M-Stream Subtype 1 Payload |
|||||||||||||||||||||||||||||||
4 |
16 |
31:0 |
User defined payload |
||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
N-1 |
4*(N-1) |
31:0 |
Subtype 2: User Data, Time Slice Based Readout
M-Stream Header |
|||||||||||||||||||||||||||||||
word # |
byte offset |
bits |
description |
||||||||||||||||||||||||||||
0 |
0 |
31:24 |
|||||||||||||||||||||||||||||
23:18 |
Flags |
||||||||||||||||||||||||||||||
17:16 |
Subtype (1) |
||||||||||||||||||||||||||||||
15:0 |
Fragment length, 4*(N-2) |
||||||||||||||||||||||||||||||
1 |
4 |
31:16 |
Packet ID |
||||||||||||||||||||||||||||
15:0 |
Fragment offset (bytes) |
||||||||||||||||||||||||||||||
Subtype 2 Header |
|||||||||||||||||||||||||||||||
2 |
8 |
31:0 |
Device serial number |
||||||||||||||||||||||||||||
3 |
12 |
31:0 |
reserved |
||||||||||||||||||||||||||||
M-Stream Subtype 2 Payload |
|||||||||||||||||||||||||||||||
4 |
24 |
31:0 |
User defined payload |
||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
N-1 |
4*(N-1) |
31:0 |
Acknowledge
Acknowledge package is similar to standard M-Stream package. First 32-bit word should have acknowledge bit up 22nd bit, as described in Flag field in M-Stream ver. 2.0. All following word will be proceeded as Fragment Id and Fragment Offset pairs. One package can contain one acknowledge pair (by default) or several (request M-Stream configuration register in M-Link CSR).