1
0
mirror of git://projects.qi-hardware.com/f32xbase.git synced 2024-11-04 23:21:53 +02:00

Requests following a rejected SETUP requests failed too, which sometimes

produces user-visible errors and may confuse implementations. (E.g., when
probing for an unimplemented feature and subsequently being greeted by a
timeout.)

- fw/comon/usb.c (handle_setup): set SOPRDY when answering a request error
  with a stall, according to the example in AN139. This seems to eliminate
  the timeouts observed in requests following after bad requests.
- fw/boot/boot.c (run_payload): described how the host is expected to
  respond to the device resetting its USB stack
This commit is contained in:
Werner Almesberger 2010-08-24 19:12:22 -03:00
parent bc37839a3a
commit fd09655773
2 changed files with 14 additions and 4 deletions

View File

@ -71,6 +71,15 @@ void run_payload(void)
/* Restart USB */
USB0XCN = 0;
/*
* The USB host must detect a disconnect (pull-ups absent) within 2 and
* 2.5 us according to parameter Tddis in table 7-13 on page 186 of the
* Universal Serial Bus Specification Revision 2.0.
*
* If our application calls usb_init really really quickly, we may need
* an extra delay here.
*/
debug("launching payload\n");
__asm

View File

@ -1,8 +1,8 @@
/*
* common/usb.c - USB hardware setup and standard device requests
*
* Written 2008, 2009 by Werner Almesberger
* Copyright 2008m 2009 Werner Almesberger
* Written 2008-2010 by Werner Almesberger
* Copyright 2008-2010 Werner Almesberger
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -258,8 +258,9 @@ okay:
}
stall:
printk("STALL\n");
usb_write(E0CSR, SDSTL_0);
ep0.state = EP_STALL;
/* AN139 recommends this sequence */
usb_write(E0CSR, SOPRDY | SDSTL_0);
ep0.state = EP_IDLE;
}