SATA CONT discrepancy in SATA / SAS standards!!

Shah, Amit M amit.m.shah at intel.com
Thu Apr 28 14:09:24 PDT 2005


* From the T10 Reflector (t10 at t10.org), posted by:
* "Shah, Amit M" <amit.m.shah at intel.com>
*
This is a multi-part message in MIME format.

------_=_NextPart_001_01C54C36.8EA59109
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,

=20

I am a bit confused about the way SATA_CONT behavior is mentioned in
SATA as well as SAS specs. Both the behaviors sound conflicting to me
and I would really appreciate if somebody can throw some light on
clarifying the standards.

=20

The SATA specification (section 7.4.5 as attached below) mentions that
SATA CONT should expected only once during a CONT sequence. So if the
receiver detects=20

XRDY    XRDY    CONT    CONT     RD    RD    RD    SOF

then it would be a unexpected / invalid sequence as there were two
CONT's back to back.

=20

Now the SAS Specifications (section 7.2.4.4 as attached below) mentions
that there could be one or more SATA_CONTs in a CONT sequence. So if =
the
receiver detects=20

XRDY    XRDY    CONT    CONT     RD    RD    RD    SOF

then it would be a valid sequence as there were two CONT's back to =
back.

=20

I am wondering if two or more CONT's back to back are valid or not.

=20

Amit Shah

Intel Corporation

=20

>>>>>>>>>>>=20

The SATA specs Revision 1.0 29-August-2001

=20

7.4.5 Continue primitive

In order to accommodate EMI reductions, scrambling of data is
incorporated in Serial ATA as

described in Section 7.5. The scrambling of data is simple, with a
linear feedback shift register

(LFSR) used in generating the scrambling pattern being reset at each =
SOF
primitive, or rolling over

every 2048 Dwords. However, the scrambling of primitives is not as
effective or simple because of the

small number of control characters available. In order to accommodate
EMI reductions, repeated

primitives are eliminated through the use of the CONT primitive.

Any repetitive primitive may be implied to continue repeating through
the use of the CONT primitive.

The recipient of the CONT primitive shall ignore all data received =
after
the CONT primitive until the

reception of any primitive, excluding ALIGN. After transmitting the =
CONT
character, the transmitter

may send any sequence of data characters to the recipient provided that
no primitives are included.

The reception of a CONT primitive shall cause the last valid primitive
to be implied as repeated until

the reception of the next valid primitive.

=20

=20

The SAS specs Revision 9   18 March 2005

=20

7.2.4.4 Continued primitive sequence

Primitives that form continued primitive sequences (e.g., SATA_HOLD)
shall be transmitted two times, then be

followed by SATA_CONT, if needed, then be followed by vendor-specific
scrambled data dwords, if needed.

ALIGNs and NOTIFYs may be sent inside continued primitive sequences as
described in 7.2.4.1. After the

SATA_CONT, during the vendor-specific scrambled data dwords:

a) a SATA_CONT continues the continued primitive sequence; and

b) any other STP primitive, including the primitive that is being
continued, ends the continued primitive

sequence.

Receivers shall detect a continued primitive sequence after at least =
one
primitive is received. The primitive

may be followed by one or more of the same primitive. The primitive may
be followed by one or more

SATA_CONTs, each of which may be followed by vendor-specific data
dwords. Receivers shall ignore invalid

dwords before, during, or after the SATA_CONT(s). Receivers do not =
count
the number of times the continued

primitive, the SATA_CONTs, or the vendor-specific data dwords are
received (i.e., receivers are simply in the

state of receiving the primitive).

Expanders forwarding dwords may or may not detect an incoming sequence
of the same primitive and convert

it into a continued primitive sequence.

=20

Table 64 in the SAS Specs also mentions that the SATA_CONT has a
primitive sequence type "Single".

=20

=20


------_=_NextPart_001_01C54C36.8EA59109
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:st1=3D"urn:schemas-microsoft-com:office:smarttags" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>

<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"Street"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"address"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:Arial;
	color:windowtext;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
	{page:Section1;}
-->
</style>

</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Hi,<o:p></o:p></span></font=
></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>I am a bit confused about =
the way
SATA_CONT behavior is mentioned in SATA as well as SAS specs. Both the
behaviors sound conflicting to me and I would really appreciate if =
somebody can
throw some light on clarifying the =
standards.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>The SATA specification =
(section
7.4.5 as attached below) mentions that SATA CONT should expected only =
once
during a CONT sequence. So if the receiver detects =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><st1:Street =
w:st=3D"on"><st1:address
 w:st=3D"on"><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:
  Arial'>XRDY&nbsp;&nbsp;&nbsp; XRDY&nbsp;&nbsp;&nbsp; =
CONT&nbsp;&nbsp;&nbsp;
  CONT&nbsp;&nbsp;&nbsp;&nbsp; =
RD</span></font></st1:address></st1:Street><font
size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>&nbsp;&nbsp;&nbsp;
RD&nbsp;&nbsp;&nbsp; RD&nbsp;&nbsp;&nbsp; =
SOF<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>then it would be a =
<b><font
color=3Dred><span style=3D'color:red;font-weight:bold'>unexpected / =
invalid sequence</span></font></b>
as there were two CONT&#8217;s back to =
back.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Now the SAS Specifications =
(section
7.2.4.4 as attached below) mentions that there could be one or more =
SATA_CONTs
in a CONT sequence. So if the receiver detects =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><st1:Street =
w:st=3D"on"><st1:address
 w:st=3D"on"><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:
  Arial'>XRDY&nbsp;&nbsp;&nbsp; XRDY&nbsp;&nbsp;&nbsp; =
CONT&nbsp;&nbsp;&nbsp;
  CONT&nbsp;&nbsp;&nbsp;&nbsp; =
RD</span></font></st1:address></st1:Street><font
size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>&nbsp;&nbsp;&nbsp;
RD&nbsp;&nbsp;&nbsp; RD&nbsp;&nbsp;&nbsp; =
SOF<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>then it would be a =
<b><font
color=3Dred><span style=3D'color:red;font-weight:bold'>valid =
sequence</span></font></b>
as there were two CONT&#8217;s back to =
back.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>I am wondering if two or =
more CONT&#8217;s
back to back are valid or not.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Amit =
Shah<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Intel =
Corporation<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>>>>>>>&gt=
;>>>><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><u><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;font-weight:bold'>The SATA =
specs Revision
1.0 29-August-2001<o:p></o:p></span></font></u></b></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></f=
ont></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;font-weight:bold'>7.4.5 =
Continue
primitive</span></font></b><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>In order to accommodate =
EMI
reductions, scrambling of data is incorporated in Serial ATA =
as<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>described in Section 7.5. =
The
scrambling of data is simple, with a linear feedback shift =
register<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>(LFSR) used in generating =
the
scrambling pattern being reset at each SOF primitive, or rolling =
over<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>every 2048 Dwords. =
However, the
scrambling of primitives is not as effective or simple because of =
the<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>small number of control =
characters
available. In order to accommodate EMI reductions, =
repeated<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>primitives are eliminated =
through
the use of the CONT primitive.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Any repetitive primitive =
may be
implied to continue repeating through the use of the CONT =
primitive.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><font size=3D2 =
color=3Dred
face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;color:red;
font-weight:bold'>The recipient of the CONT primitive shall ignore all =
data
received after the CONT primitive until =
the<o:p></o:p></span></font></b></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><font size=3D2 =
color=3Dred
face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;color:red;
font-weight:bold'>reception of any primitive, excluding =
ALIGN</span></font></b><font
size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>. After
transmitting the CONT character, the =
transmitter<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>may send any sequence of =
data
characters to the recipient provided that no primitives are =
included.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>The reception of a CONT =
primitive
shall cause the last valid primitive to be implied as repeated =
until<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>the reception of the next =
valid
primitive.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><u><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;font-weight:bold'>The SAS =
specs Revision
9&nbsp;&nbsp; 18 March 2005<o:p></o:p></span></font></u></b></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;font-weight:bold'>7.2.4.4 =
Continued
primitive sequence<o:p></o:p></span></font></b></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Primitives that form =
continued
primitive sequences (e.g., SATA_HOLD) shall be transmitted two times, =
then be<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>followed by SATA_CONT, if =
needed,
then be followed by vendor-specific scrambled data dwords, if =
needed.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>ALIGNs and NOTIFYs may be =
sent
inside continued primitive sequences as described in 7.2.4.1. After =
the<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>SATA_CONT, during the
vendor-specific scrambled data dwords:<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>a) a SATA_CONT continues =
the
continued primitive sequence; and<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>b) any other STP =
primitive,
including the primitive that is being continued, ends the continued =
primitive<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>sequence.<o:p></o:p></span>=
</font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Receivers shall detect a =
continued
primitive sequence after at least one primitive is received. The =
primitive<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>may be followed by one or =
more of
the same primitive. <b><font color=3Dred><span =
style=3D'color:red;font-weight:bold'>The
primitive may be followed by one or =
more<o:p></o:p></span></font></b></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><b><font size=3D2 =
color=3Dred
face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;color:red;
font-weight:bold'>SATA_CONTs, each of which may be followed by =
vendor-specific
data dwords</span></font></b><font size=3D2 face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial'>. Receivers shall ignore =
invalid<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>dwords before, during, or =
after the
SATA_CONT(s). Receivers do not count the number of times the =
continued<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>primitive, the SATA_CONTs, =
or the
vendor-specific data dwords are received (i.e., receivers are simply in =
the<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>state of receiving the =
primitive).<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>Expanders forwarding =
dwords may or
may not detect an incoming sequence of the same primitive and =
convert<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>it into a continued =
primitive
sequence.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><b><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;font-weight:bold'>Table 64</span></font></b><font =
size=3D2
face=3DArial><span style=3D'font-size:10.0pt;font-family:Arial'> in the =
SAS Specs
also mentions that the SATA_CONT has a primitive sequence type =
&#8220;Single&#8221;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>

------_=_NextPart_001_01C54C36.8EA59109--





More information about the T10 mailing list