SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
The basic unit of SATA information is Dword – a double sized word (32 bits). An encoded Dword has a 40-bit length (4 x 10 bits), but, for simplicity, unencoded Dword lengths are considered here. Each Dword is serially transmitted or received by the SATA_PHY components in LSB character to MSB character order.
The shortest meaningful component of the SATA stream is the primitive, which consists of a single Dword. Different types of primitive characters are inserted into the SATA stream to maintain synchronization between the host and the SATA peripheral device. Primitives convey real-time state information regarding the SATA communication channel itself. For example, the SATA link layer generates primitives to perform flow control, synchronize power management state transitions, frame enveloping, etc. The transport layer is not aware of the lower level primitive Dwords. They are subject to processing only to the link layer.
In some cases, the transmitter of a primitive can require that the receiver send an acknowledge Dword to confirm primitive reception, which is a primitive handshake.
The first byte of a primitive Dword is always a control character (or Z = K) with two possible encodings. The remaining three data bytes (Z = D) contain the function of the primitive. According to the SATA standard, the transmitter and the receiver are not required to match the number of primitives sent and received.
Table 24-443 briefly summarizes the primitives used by SATA.
Primitive Name | Short Description |
---|---|
ALIGNp | Sent in pairs to PHY component to readjust its internal operations |
CONTp | After CONTp insertion, previous primitives are repeated continuously until a different primitive is inserted |
DMATp | terminates DMA data transmission |
EOFp | End of frame |
HOLDp | Inserted to hold data when transmitter doesn't have data ready to transmit |
HOLDAp | Acknowledges a HOLDp primitive |
PMACKp | Acknowledges a power management request |
PMNAKp | A power management request denial |
PMREQ_Pp | Power management request to PARTIAL state |
PMREQ_Sp | Power management request to SLUMBER state |
R_ERRp | Reception error occurred |
R_IPp | Current node is receiving data |
R_OKp | Reception without error |
R_RDYp | Receiver is ready for reception |
SOFp | Start of frame |
SYNCp | Synchronization primitive |
WTRMp | Transmitter inserts this primitive while waiting to get the reception status from receiver |
XRDYp | Transmitter has data ready for transmission |
SATA data frames incorporate data FISs constructed at the transport layer along with some primitives (see Figure 24-156). The maximum number of Dwords between SOFp to EOFp does not exceed 2064 Dwords, including the FIS type and CRC fields described here.
The FIS (Frame Information Structure) contents of a frame incorporate the Dwords that correspond to SATA target data structures. FIS Dwords are output from transport layer TxFIFO to the transmitter link 8b/10b encoder during transmission. In the case of reception, the FIS content is obtained at transport layer RxFIFO after being successfully decoded by the receiver link logic. The commands and data embedded into Frame FISs are generated/interpreted at a higher transport level of the SATA controller and are user software-accessible in the host system memory.
The CRC is the last Dword in a frame, immediately following the last FIS Dword of the frame and preceding the EOFp primitive. The 32-bit CRC calculation is performed only on the FIS Dwords of the frame contents, so that frame-inserted primitives such as HOLDp, CONTp, etc., are not taken into account. The CRC is aligned on a Dword boundary. CRC code computation expects an input of an even number of words and should be Dword-multiple. If an FIS block contains an odd number of words, the last FIS word is padded with 0s to a full Dword before the CRC is calculated.
The beginning of a frame is marked with a SOFp primitive, and the end is marked with an EOFp primitive. Some primitives, such as HOLDp and HOLDAp acknowledge, can be inserted into frames between data FISs.
As shown in Figure 24-156, the SATA data stream is composed of frames carrying the target data/command contents combined with various primitives generated to maintain consistency of transfers over the SATA interface.