atom feed22 messages in org.freebsd.freebsd-usblibusb usb_interrupt_read hangs under...
FromSent OnAttachments
Xiaofan ChenApr 3, 2007 11:54 am 
Hans Petter SelaskyApr 3, 2007 12:26 pm 
Xiaofan ChenApr 3, 2007 1:34 pm 
Hans Petter SelaskyApr 3, 2007 2:42 pm 
Xiaofan ChenApr 3, 2007 11:55 pm 
Hans Petter SelaskyApr 4, 2007 7:37 am 
Xiaofan ChenApr 4, 2007 11:34 am 
Xiaofan ChenJul 4, 2007 5:32 pm 
Hans Petter SelaskyJul 5, 2007 3:24 pm 
Xiaofan ChenJul 8, 2007 12:25 am 
M. Warner LoshJul 8, 2007 5:11 am 
Xiaofan ChenJul 8, 2007 1:16 pm 
Xiaofan ChenJul 8, 2007 4:31 pm 
M. Warner LoshJul 8, 2007 8:00 pm 
Hans Petter SelaskyJul 9, 2007 4:35 pm 
Xiaofan ChenJul 10, 2007 1:27 am 
Xiaofan ChenJul 13, 2007 10:32 pm 
Hans Petter SelaskyJul 15, 2007 9:18 am 
Xiaofan ChenJul 16, 2007 3:44 pm 
Hans Petter SelaskyJul 17, 2007 5:55 am 
Xiaofan ChenAug 11, 2007 4:45 am 
Xiaofan ChenSep 22, 2007 3:47 am 
Subject:libusb usb_interrupt_read hangs under FreeBSD
From:Hans Petter Selasky (hsel@c2i.net)
Date:Jul 5, 2007 3:24:16 pm
List:org.freebsd.freebsd-usb

On Wednesday 04 July 2007 19:05, Xiaofan Chen wrote:

On 4/4/07, Hans Petter Selasky <hsel@c2i.net> wrote:

On Wednesday 04 April 2007 01:55, Xiaofan Chen wrote:

On 4/3/07, Hans Petter Selasky <hsel@c2i.net> wrote:

Hi,

I think that your device is broken, and goes bad when it receives a clear-stall request for the interrupt pipe. That is not very uncommon.

Could you be more clearer? I'd like to communicate this problem to the firmware developer of PICKit 2 inside Microchip. Thanks.

The chip does not handle a clear-stall request on the control pipe to clear-stall on the interrupt pipe. The result is that the interrupt pipe stops, or at least all buffers are cleared.

I could be more detailed, but I think the developers will understand what I mean.

Sorry to dig out this again. I read a bit more on the firmware source code and I found the following. Seems a bit dubious. The USB controller used is Microchip 18F2550.

Any comments? Thanks in advance.

This pre-condition does not always hold:

* * PreCondition: A STALL packet is sent to the host by the SIE. *

Usually the clear-stall is specific to an endpoint, which is stored in the lower byte of "wIndex". Where does this "wIndex" end up?

if(UEP0bits.EPSTALL == 1) { USBPrepareForNextSetupTrf(); // Firmware Work-Around UEP0bits.EPSTALL = 0; } UIRbits.STALLIF = 0; }//end USBStallHandler

Maybe this code path has never been taken before?

--HPS