= M-Stream 2.3 = * [[MStream_ChangeLog]] 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. ||<-32 rowclass="bits">M-Stream Header|| ||<:>word #||<:>byte offset||<:>bits||<:>description|| ||<:|4>0||<:|4>0||31:24||[[DeviceId|Device ID]]|| ||23:18||Flags|| ||17:16||Subtype|| ||15:0||Fragment length|| ||<:|2>1||<:|2>4||31:16||Packet ID|| ||15:0||Fragment offset code|| ||<-3 rowclass="bits">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 (+ = ) * 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 == ||<-32 rowclass="bits">M-Stream Header|| ||<:>word #||<:>byte offset||<:>bits||<:>description|| ||<:|4>0||<:|4>0||31:24||[[DeviceId|Device ID]]|| ||23:18||Flags|| ||17:16||Subtype (0)|| ||15:0||Fragment length, 4*(N-2)|| ||<:|2>1||<:|2>4||31:16||Packet ID|| ||15:0||Fragment offset code|| ||<-32 rowclass="bits">Subtype 0 Header|| ||<:>2||<:>8||31:0||Device serial number|| ||<:|2>3||<:|2>12||31:24||Subtype and custom bits|| ||23:0||Event number|| ||<-32 rowclass="bits">M-Stream Subtype 0 Payload|| ||<:>4||<:>16||31:0||Event timestamp, TAI seconds|| ||<:|2>5||<:|2>20||31:2||Event timestamp, TAI nanoseconds|| ||1:0||Event timestamp, TAI flags|| ||<:>6||<:>24||31:0||<|3>User defined payload|| ||<:-3>...|| ||<:>N-1||<:>4*(N-1)||31:0|| TAI flags: 2 - timecode is valid, otherwise invalid. == Subtype 1: User Data, Channel-Based Readout == ||<-32 rowclass="bits">M-Stream Header|| ||<:>word #||<:>byte offset||<:>bits||<:>description|| ||<:|4>0||<:|4>0||31:24||[[DeviceId|Device ID]]|| ||23:18||Flags|| ||17:16||Subtype (1)|| ||15:0||Fragment length, 4*(N-2)|| ||<:|2>1||<:|2>4||31:16||Packet ID|| ||15:0||Fragment offset code|| ||<-32 rowclass="bits">Subtype 1 Header|| ||<:>2||<:>8||31:0||Device serial number|| ||<:|2>3||<:|2>12||31:24||Channel number|| ||23:0||Event number|| ||<-32 rowclass="bits">M-Stream Subtype 1 Payload|| ||<:>4||<:>16||31:0||<|3>User defined payload|| ||<:-3>...|| ||<:>N-1||<:>4*(N-1)||31:0|| == Subtype 2: User Data, Time Slice Based Readout == ||<-32 rowclass="bits">M-Stream Header|| ||<:>word #||<:>byte offset||<:>bits||<:>description|| ||<:|4>0||<:|4>0 ||31:24||[[DeviceId|Device ID]]|| || 23:18||Flags|| || 17:16||Subtype (1)|| || 15:0 ||Fragment length, 4*(N-2)|| ||<:|2>1||<:|2>4 ||31:16||Packet ID|| || 15:0 ||Fragment offset (bytes)|| ||<-32 rowclass="bits">Subtype 2 Header|| ||<:>2 ||<:>8 ||31:0 ||Device serial number|| ||<:>3 ||<:>12 ||31:0 ||reserved|| ||<-32 rowclass="bits">M-Stream Subtype 2 Payload|| ||<:>4 ||<:>24 ||31:0 ||<|3>User defined payload|| ||<:-3>... || ||<:>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 22^nd^ bit, as described in ''Flag'' field in [[MStream_2_0|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 [[MlinkCsr|M-Link CSR]]). ---- [[CategoryMlink|MLink]] [[CategoryMStream|MStream]] [[CategoryRawData|RawData]]