Beagleboard xM isochronous usb trasfer corrupted


I have tried many things and now in a need of help I have decided to post here.

Capturing MJPG frames using Video4Linux2 API gives me corrupted frames. Some of the frames are fine, but not all. I added some extra logging to the uvcvideo driver which is used by v4l2. And the corrupted data also appeared on that level. In the end I also captured usb traffic using /dev/usbmon, and the corrupted data was still there. Amount of corruption is proportional to the amount of data. Using lower resolution or fever framerate means that the corruption is less frequent.

BeagleBoard xM revision C1.
2 x Logitech C250 webcams.
Some other webcam.

Tested things:
I tried various distributions. Including the original Angstrom, the latest Angstrom, Ubuntu and Arch linux ARM. All of them had this problem.
I also applied this patch to the kernel coming with arch linux arm. But nothing really changed for me. Not to mention that the same cameras work just fine on various other platforms like my laptop runnning (x86) linux, friends laptop (x86_64) linux and even on a PandaBoard (Arch linux arm).

I want to get this board working properly. So I am open to suggestions on what to try or research next.


Well isochronous transfers allow data loss when there isn't enough
bandwidth... Other then the webcam's is there anything else connected
to the usb ports on the beagle? Ethernet hooked up? external usb
harddrive? Remember there is only one ehci port routed to the 4 port
hub on the xM..

So a better question, with nothing else on the usb bus, how much
bandwidth is one Logitech C250 webcam taking up?


This is a fair question. Because most of the test were done using the ethernet to stream video onward. However I don’t seem this to be a bandwidth problem. Because capturing to file, when only one camera was connected (no ethernet cable) also yielded corrupted frames.

And to corrupt a MJPG frame all it takes is one bit wrong in a specific location. Capturing with uncompressed image format does seem to work. But then again, I really can’t tell if 1 pixel is wrong on image.