Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

usb_2.0_english

.pdf
Скачиваний:
42
Добавлен:
03.05.2015
Размер:
5.98 Mб
Скачать

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

OUT

sd1

 

Trans_err

 

 

se1

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

383

Universal Serial Bus Specification Revision 2.0

Complete split

ct1

CSPLIT

Trans_err

ct2

 

 

 

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

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

384

Universal Serial Bus Specification Revision 2.0

Start split

st1

SSPLIT

Trans_err

 

 

 

st2

 

 

 

IN

se1

Data_into_SS_pipe

Go to comp. split

Host TT

Figure 11-70. Interrupt IN Start-split Transaction Sequence

Complete split

ct1

Trans_err

CSPLIT

 

ct2

 

 

 

IN

 

 

 

 

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

385

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

386

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

387

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

388

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

389

Universal Serial Bus Specification Revision 2.0

ce2

HSU2.PID = ERR

ce3 HC_cmd.last

&

ch6

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

ct2

RespondHC(Do_halt);

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

390

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_IntICS_err3

IncError;

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

391

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.

392

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]