Universal Serial Bus Specification Revision 2.0
2) Normal: full-speed bus transaction crosses microframe boundary
|
|
|
HUB |
Full-speed |
|
Host |
|
device |
|
|
SS: start-split buffer status |
|
(toggle) |
|
(toggle) |
|
|
CS: complete-split buffer status |
|
0 |
|
|
0 |
|
st1 |
SSPLIT |
SS = Free |
|
|
|
uFrame M |
|
|
|
|
st2 |
IN |
Create SS entry with status = Pending |
|
|
|
|
|
|
|
|
IN |
|
|
|
|
|
Create CS entry |
uFrame M + 1 |
|
|
|
SS = Free |
|
|
|
|
|
ct1 |
CSPLIT |
|
Create CS[1] entry |
|
|
|
|
ct2 |
IN |
|
|
uFrame M + 2 |
|
|
|
Send data in CS[0] with |
|
|
|
|
|
|
MDATA |
cd2 |
MDATA |
|
|
|
|
0 |
ch4 |
|
|
CS[0] = Old/more data |
|
|
|
|
|
|
|
|
Create CS[2] entry |
|
ct1 |
CSPLIT |
|
|
uFrame M + 3 |
ct2 |
IN |
|
|
|
|
|
Send data in CS[1] with
MDATA
MDATA |
cd2 |
|
CS[1] = Old/more data |
CSPLIT
IN
DATA0
CS[0] = Ready/more-data
CS[1] = Ready/more-data
CS[2] = Ready/last-data
Send data in CS[2] with
DATA0
DATA0 |
cd1 |
|
CS[2] = Old/last data |
0
ch1
Universal Serial Bus Specification Revision 2.0
4) IN after HS SSPLIT corrupted
|
Host |
HUB |
Full-speed |
|
SS: start-split buffer status |
device |
|
(toggle) |
|
CS: complete-split buffer status |
(toggle) |
|
0 |
|
|
|
|
|
st1 SSPLIT |
SS = Free |
|
|
uFrame M |
|
|
|
st2 |
|
|
|
IN |
se1 |
|
|
|
No SS entry created |
|
uFrame M + 1
ct1 CSPLIT
ct2 IN
uFrame M + 2
Search not complete in
time
Timeout ce7 Err_count = 1 -> ce3 Immediate retry CS
ct1 CSPLIT
ct2 IN
No split response found
ch4
NYET
If not last CS ch3
If last CS ce6
uFrame M + 3
Universal Serial Bus Specification Revision 2.0
11) TT has more data than HC expects
Host
(toggle)
0
uFrame M
uFrame M + 1
uFrame M + 2
uFrame M + 3
uFrame M + 4
st1 SSPLIT
st2
IN
ct1 CSPLIT ct2 IN
MDATA
ch4
ct1 CSPLIT ct2 IN
MDATA
ch4
ct1 CSPLIT ct2 IN
|
HUB |
Full-speed |
|
device |
|
SS: start-split buffer status |
|
CS: complete-split buffer status |
(toggle) |
|
SS = Free |
|
|
Create SS entry with status = Pending |
|
|
IN |
|
|
Create CS entry |
|
|
SS = Free |
DATA0 |
|
|
CS[0] = Ready/more-data
Create CS[1] entry
|
Send begin-data in CS[0] |
cd2 |
with MDATA |
|
CS[0] = Old/more data |
|
CS[1] = Ready/more-data |
|
Create CS[2] entry |
|
Send mid-data in CS[1] |
|
with MDATA |
cd2 |
CS[1] = Old/more data |
|
CS[2] = Ready/more-data |
CS[3] = Ready/last-data
Send mid-data in CS[2] with MDATA
MDATA cd1 |
CS[2] = Old/more data |
HC has sent the last CS, but it receives MDATA, so something goes wrong -> ce8
CS[3] = Old/last-data