Universal Serial Bus Specification Revision 2.0
In contrast to bulk/control processing, the full-/low-speed handler must not do local retry processing on the full-/low-speed bus in response to a transaction error for full-/low-speed interrupt transactions.
11.20.1 Interrupt Split Transaction Sequences
The interrupt IN and OUT flow sequence figures use the same notation and have descriptions similar to the bulk/control figures.
In contrast to bulk/control processing, the full-speed handler must not do local retry processing on the fullspeed bus in response to a transaction errors (including timeout) of an interrupt transaction.
Start split
st1
SSPLIT
st2 ![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi2.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi3.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi4.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi5.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi6.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi7.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi8.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi9.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi10.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi11.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi12.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi13.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi14.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi15.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi16.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi17.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi18.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi19.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi20.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi21.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi22.jpg)
OUT
se1![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc411xi23.jpg)
DATA0/1
not trans_err, |
Trans_err |
Data_into_SS_pipe |
|
|
|
|
|
se2 |
|
sh1 |
|
|
|
Go to |
|
Host |
|
TT |
|
|
|
|
comp. split |
|
|
|
|
Figure 11-68. Interrupt OUT Start-split Transaction Sequence
Universal Serial Bus Specification Revision 2.0
Complete split
ct1
OUT
Fast_match
Search not complete in time
No split response found
old/stall |
old/ack |
old/nak |
old/trans_err |
|
Trans_err |
ch1 |
ch2 |
ch3 |
ch4 |
ch5 |
ce1 |
STALL |
ACK |
NAK |
ERR |
NYET |
|
|
|
|
|
|
|
ce2 |
Last |
Endpoint |
Go to next |
Retry |
|
ce7 |
|
|
|
Inc err |
|
halt |
cmd |
start split |
|
|
|
|
|
|
|
count |
|
|
|
|
|
|
|
|
|
|
Host |
TT |
|
|
ce3 ce4
if err_count < 3 retry start split
Inc err
Not last count ch6![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc412xi2.jpg)
![](/html/2706/176/html_3BHy9GWFte.8f2K/htmlconvd-byqhDc412xi3.jpg)
Next comp. split
ce5 ce6
if err_count < 3 retry immed. comp. split
if err_count >= 3 endpoint halt
Figure 11-69. Interrupt OUT Complete-split Transaction Sequence
Universal Serial Bus Specification Revision 2.0
Start split
st1
Data_into_SS_pipe
Go to comp. split
Host TT
Figure 11-70. Interrupt IN Start-split Transaction Sequence
Complete split
ct1
|
Search not |
Fast_match |
|
|
Host |
|
TT |
|
|
|
|
|
|
|
|
|
|
|
|
complete in time |
|
|
|
No split response found |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
old/moredata |
old/lastdata |
|
old/nak |
old/stall |
old/trans_err |
|
|
Trans_err cd2 |
|
|
cd1 |
|
ch1 |
ch2 |
ch3 |
|
ch4 |
|
|
MDATA |
DATA0/1 |
|
NAK |
STALL |
ERR |
|
NYET |
|
Trans_ |
not trans_err |
|
Retry |
Endpoint |
|
Last |
Not last |
|
|
ce3 |
|
|
err |
|
ch5 |
|
|
start split |
halt |
|
ch6 |
ce1 |
|
|
|
|
|
|
HC_Accept_data |
|
not |
|
not |
Inc err |
|
Next |
|
|
|
|
comp. split |
|
|
|
|
Trans_ |
|
count |
|
|
|
|
|
|
trans_err, |
|
trans_err, |
|
|
|
|
ce4 |
Next comp. err |
|
|
ce2 |
|
|
|
|
|
Datax = |
|
Datax /= |
|
|
|
|
Split |
ce5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
toggle |
|
toggle |
|
|
|
|
|
|
|
|
|
|
ce6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Inc err count |
|
|
|
|
|
|
ch8 |
|
|
|
|
|
|
|
ch7 |
|
if err_count < 3 |
|
|
|
|
|
|
|
|
|
|
ce7 |
|
|
ce8 |
|
|
|
|
Retry |
retry start split |
|
|
|
|
|
Go to next cmd |
|
|
ce9 |
|
if err_count >= 3 |
|
if err_count < 3 |
start split |
|
|
|
HC_Accept_data |
HC_reject_data |
if err_count >= 3 |
endpoint halt |
|
retry immed. |
|
|
|
|
|
|
|
|
comp. split |
|
|
|
|
|
endpoint halt |
Figure 11-71. Interrupt IN Complete-split Transaction Sequence
Universal Serial Bus Specification Revision 2.0
11.20.2 Interrupt Split Transaction State Machines
st1
Issue_packet(HSD1, SSPLIT);
DoOUTSS
st2
Issue_packet(HSD1, tokenOUT);
DodataSS
sd1
Issue_packet(HSD1, DATAx);
Doupdate
sh1
RespondHC(Do_complete);
HC_Do_IntOSS
Figure 11-72. Interrupt OUT Start-split Transaction Host State Machine
Universal Serial Bus Specification Revision 2.0 |
|
HSU2.PID = NAK |
ch3 |
RespondHC(Do_start); |
ct1 |
|
ch1 |
HSU2.PID = STALL |
|
& |
RespondHC(Do_halt); |
|
ch2 |
|
Issue_packet(HSD1, CSPLIT); |
|
ch5 |
HSU2.PID = ACK |
|
|
RespondHC(Do_next_cmd); |
HSU2.PID = NYET |
|
Dooutintcs |
|
|
|
|
|
ce2 |
& |
ch6 |
not HC_cmd.last |
|
|
ct2 |
|
|
ce7 |
RespondHC(Do_next_complete); |
|
|
|
ce1 |
|
|
|
|
|
|
|
Issue_packet(HSD1, tokenOUT); |
|
HC_cmd.last |
|
|
|
|
ErrorCount < 3 |
|
HSU2.PID = ERR |
|
Packet_ready(HSU2) |
|
RespondHC(Do_start); |
|
|
|
|
|
|
|
(HSU2.PID /= STALL and HSU2.PID /= NAK and HSU2.PID /= ACK and HSU2.PID /= ERR and HSU2.PID /= NYET) or HSU2.timeout
ce3
ICSO_error_2
RespondHC(Do_halt);
IncError;
ce4
ErrorCount >= 3
&
ErrorCount >= 3
ICSO_wait |
ce5 |
|
|
|
|
ErrorCount < 3 |
|
|
Wait_for_packet(HSU2, ITG); |
|
|
|
|
|
|
|
|
RespondHC(Do_comp_immed_now); |
ICSO_error |
|
|
IncError; ce6
HC_Do_IntOCS
Figure 11-73. Interrupt OUT Complete-split Transaction Host State Machine
Universal Serial Bus Specification Revision 2.0
HSD2.PID /= DATAx or |
HSD2.timeout |
se1
&
HSD2.PID = DATAx
Packet_ready(HSD2)
HSD2.CRC16 = ok
sh1 Data_into_SS_pipe;
&
se2
HSD2.CRC16 = bad
TT_IntOSS_wait
Wait_for_packet(
HSD2, ITG);
TT_Do_IntOSS
Figure 11-74. Interrupt OUT Start-split Transaction TT State Machine
Universal Serial Bus Specification Revision 2.0 |
|
CS_Buff.match.down_result = r_trans_err |
|
Issue_packet(HSU1, ERR); |
ch4 |
|
ch3 |
CS_Buff.match.down_result = r_nak |
& |
Issue_packet(HSU1, NAK); |
|
ch2 |
|
ch1 |
CS_Buff.match.down_result = r_ack |
|
CS_Buff.match.state = old |
Issue_packet(HSU1, ACK); |
|
CS_Buff.match.down_result = r_stall |
Issue_packet(HSU1, STALL); |
ch5
TT_IntOCS_match ce1
Fast_match;
CS_Buff.match.state = no_match |
Issue_packet(HSU1, NYET); |
CS_Buff.match.state = match_busy
TT_Do_IntOCS
Figure 11-75. Interrupt OUT Complete-split Transaction TT State Machine
st1
Issue_packet(HSD1, SSPLIT);
DoinINSS
st2
Issue_packet(HSD1, tokenIN);
DoinupdateSS
RespondHC(Do_complete);
HC_Do_IntISS
Figure 11-76. Interrupt IN Start-split Transaction Host State Machine
Universal Serial Bus Specification Revision 2.0
HC_IntICS_error |
|
IncError; |
ce6 |
ErrorCount < 3 |
|
|
ce9 |
RespondHC(Do_start); |
|
|
|
ErrorCount >= 3 |
|
RespondHC(Do_halt); |
|
not HC_cmd.last |
ct1 |
RespondHC(Do_next_complete); |
|
Issue_packet(HSD1, CSPLIT); |
HSU2.PID = NYET |
|
|
HSU2.PID = NAK |
|
RespondHC(Do_start); |
ch2
DoinINcs
HSU2.PID = STALL
Issue_packet(HSD1, tokenIN);
HC_Data_or_error
ch4 |
|
|
ch1 |
HC_IntICS_wait |
|
Wait_for_packet( |
|
HSU2, ITG); |
(HSU2.PID /= NAK and |
Packet_ready(HSU2) |
HSU2.PID /= STALL and |
& |
HSU2.PID /= NYET and |
|
HSU2.PID /= ERR) or |
|
HSU2.timeout |
HC_Do_IntICS |
|
Figure 11-77. Interrupt IN Complete-split Transaction Host State Machine
Universal Serial Bus Specification Revision 2.0
|
HSU2.x = HC_cmd.toggle |
|
|
|
RespondHC(Do_next_cmd); |
|
RespondHC(Do_start); |
|
|
|
|
|
|
HSU2.x /= HC_cmd.toggle |
Dostartss |
|
ch7 |
HC_Reject_data; |
|
|
|
|
ch8 |
|
|
|
Acceptdata |
|
|
ErrorCount >= 3 |
|
|
|
|
|
|
RespondHC(Do_next_complete); |
RespondHC(Do_halt); |
|
|
|
|
|
HSU2.PID = DATAx and |
|
ErrorCount < 3 |
|
HSU2.CRC16 = ok |
Docmpl |
|
|
|
|
RespondHC(Do_comp_immed_now); |
|
HC_Accept_data; |
|
|
|
|
HSU2.PID = MDATA and |
|
ce8 |
|
|
|
ce7 |
|
|
HSU2.CRC16 = ok |
|
|
|
|
|
|
ch5 |
HC_Accept_data; |
|
|
|
|
|
|
(HSU2.PID = MDATA or |
HSU2.PID = DATAx) and |
HSU2.CRC16 = bad |
ce4/ce5 |
(HSU2.PID /= MDATA and |
|
HSU2.PID /= DATAx) or |
|
ce1 |
|
HSU2.timeout |
HC_Data_or_error
Figure 11-78. HC_Data_or_Error State Machine
Data_into_SS_pipe;
TT_Do_IntISS
Figure 11-79. Interrupt IN Start-split Transaction TT State Machine
|
Universal Serial Bus Specification Revision 2.0 |
|
|
CS_Buff.match.down_result = r_moredata |
|
|
Issue_packet(HSU1, MDATA); |
|
cd2 |
CS_Buff.match.down_result = r_lastdata |
|
Issue_packet(HSU1, DATAx); |
|
cd1 |
|
& |
ch3 |
|
ch1 |
CS_Buff.match.down_result = r_trans_err |
|
|
Issue_packet(HSU1,ERR); |
CS_Buff.match.down_result = r_nak |
Issue_packet(HSU1, NAK); |
CS_Buff.match.state = old |
|
ch2 |
|
CS_Buff.match.down_result = r_stall |
|
Issue_packet(HSU1, STALL); |
|
ch4 |
CS_Buff.match.state = no_match |
|
Issue_packet(HSU1, NYET); |
TT_IntICS_match |
|
Fast_match; |
ce1 |
|
CS_Buff.match.state = match_busy
TT_Do_IntICS
Figure 11-80. Interrupt IN Complete-split Transaction TT State Machine
11.20.3 Interrupt OUT Sequencing
Interrupt OUT split transactions are scheduled by the host controller as normal high-speed transactions with the startand complete-splits scheduled as described previously.
When there are several full-/low-speed transactions allocated for a given microframe, they are saved by the high-speed handler in the TT in the start-split pipeline stage. The start-splits are saved in the order they are received until the end of the microframe. At the end of the microframe, these transactions are available to be issued by the full-/low-speed handler on the full-/low-speed bus in the order they were received.
In a following microframe (as described previously), the full-/low-speed handler issues the transactions that had been saved in the start-split pipeline stage on the downstream facing full-/low-speed bus. Some transactions could be leftover from a previous microframe since the high-speed schedule was built assuming best case bit stuffing and the full-/low-speed transactions could be taking longer on the full-/low-speed bus. As the full-/low-speed handler issues transactions on the downstream facing full-/low-speed bus, it saves the results in the periodic complete-split pipeline stage and then advances to the next transaction in the startsplit pipeline.
In a following microframe (as described previously), the host controller issues a high-speed complete-split transaction and the TT responds appropriately.