2013年10月13日 星期日

ATA(SATA) protocol introduction


Src :
http://www.serialtek.com/sata_protocol_overview.asp (15'1/20 : NA)

Ref:
http://www.youtube.com/watch?feature=player_embedded&v=586wy4G0-1Q (SATA Introduction)
http://www.youtube.com/watch?feature=player_embedded&v=jFOmiLtYSLg (SATA Frame)

Book:

- The Essential Guide to Serial ATA and SATA Express (available in Google Ebook)

https://books.google.com.tw/books?id=PqvNBQAAQBAJ&printsec=frontcover&hl=zh-TW#v=onepage&q&f=false



Notes:

SATA's protocol :
- Link Layer - Primitives, out of Band (OOB) Signalling)
- Packet Layer - Frame Information Structures (FISes)
- Application/Command Layer - ATA Commands.


Link Layer:

- Primitives

Primitives are primarily used to start/stop/request data.
ALIGN – Sent to align activities between hosts and devices. Must be sent every 256 DWORDs
SYNC – Synchronize
X_RDY – Product is ready to start transmitting a frame
R_RDY – Product is ready to start receiving a frame
R_IP –  Product is receiving the frame
WTRM – Product has finished sending the frame and is waiting to terminate the connection
R_OK – Product has received the frame and it’s CRC is good
R_ERR – Product has received the frame and it’s CRC is bad
SOF – Start of Frame
EOF – End of Frame. DWORD previous to EOF is the CRC value
HOLD – Product not ready to send/receive additional data
HOLDA – Product acknowledges that other product needs time to “catch up”
CONT – “Continues” previous primitive until a different one is sent. Used to reduce EMI.
PMREQ_S – Interface Power Management Request for Slumber

PMREQ_P – Interface Power Management Request for Partial

PMACK – Power Management Request Acknowledged (approved)

PMNAK – Power Management Request Not Acknowledged (denied)

DMAT – Sent to terminate a DMA transmission

- Out Of Band Singaling (OOB) / Speed Negotiation

OOB, Out of Band, is a signaling pattern of either ALIGN primitives or DWORDs consisting of D24.3 characters and idle time used to initialize the SATA interface. There are three kinds of OOB signals used in SATA:
COMINIT – Used by the device to request a communication initialization
COMRESET – Used by the host to force a hardware reset on the device
COMWAKE – Used by either the host or device to signal the PHY layer to wake up.
Below is a diagram showing how speed negotiation is achieved.

speed_neg_diag.JPG
1.Host sends COMREST.
2.Device sees COMRESET, sends COMINIT
3.Host sees COMINIT, sends COMWAKE
4.Device sees COMWAKE, sends ALIGN primitives at highest supported speed
5.Host sends D10.2 at 1.5Gps as clock reference, sees ALIGNs and sends ALIGNs
6.Host and device send SYNC primitives



沒有留言:

張貼留言