LPC4370 high speed USB isochronous transfer

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPC4370 high speed USB isochronous transfer

2,124 Views
hchew
Contributor I

Hi, 

Has anyone successfully do a high speed USB isochronous transfer on the LPC4370 ? I have tested the AudioInputDevice example which works in full speed. However when set to high speed, it does not work. Have been trying a few days to figure out why but to no avail. Enumeration in high speed is successful and Windows XP detected it as a audio device. However, when recording is done on the audio device, no data is returned. The associated isochronous endpoint is primed but no transfer complete interrupt is generated.

Thank you.

Hew

Labels (1)
0 Kudos
Reply
5 Replies

1,468 Views
soledad
NXP Employee
NXP Employee

Hi,

Could you please mention the board and the example you are using?

Regards

Soledad

0 Kudos
Reply

1,468 Views
hchew
Contributor I

Hi,

I am using the LPC Link 2 board with LPC4370. The example is from AudioInputDevice example in nxpUSBlib v0.98

nxpUSBlib v0.98 | www.LPCware.com 

The example code has been modified to let it run in high speed mode with appropriate transfer queue head ,transfer descriptor and USB descriptor. I have moved to Ubuntu 14.04.2 for testing. Still can't get it to work in Windows. 

In Linux, looks like it is possible to go up to 650 bytes x 3 ISO transfer per microframe (15.6 Mbytes/s) on my J1900 Biostar motherboard through the internal Genesys Logic hub. The successful isochronous transfer is done using arecord and is monitored using tcpdump+usbmon.

However, I am still unable to get it to transfer at max rate of 1024 bytes x 3 per microframe. It starts failing for transfer rate higher than about 15.6 Mbyte/s. The LPC side keeps getting transaction/fulfillment error. PC side is not getting any data for USB ISO IN request. This could be due to PC side issues and not the LPC MCU. Unfortunately, I do not have a high speed USB hardware analyzer to see what is going on through the USB cable.

Thanks.

0 Kudos
Reply

1,468 Views
caleb
Contributor III

USB Audio Class 1.0 is shot in the foot.  It will *only* work at full speed speeds, even if running over a high speed link.

So, try some other isochronous transfers without USB Audio Class 1.0 and it is likely to work.

As far as I know, as of mid 2018, XMOS is the only vendor that has a vetted, full duplex, pro-quality USB Audio Class 2.0 system working that can work at high speeds with lots of channels.  I'd love it if I were wrong.  Somebody please do a proper full-duplex, bit-perfect USB Audio Class 2.0 for LPC or other microcontrollers!

0 Kudos
Reply

1,468 Views
hchew
Contributor I

LPC can actually manage isochronous transfer at 24Mbyte/s. The part that is actually failing is the Linux kernel itself. I belief the same for Windows USB audio driver too.

0 Kudos
Reply

1,468 Views
caleb
Contributor III

Yes I understand LPC can do high speed isochronous transfers.  The problem is that the USB Audio Class 1.0 does not support them, which means as long as you're using USB Audio Class 1.0 (which is what *every* vendor exclusively supports except XMOS) you're going to be limited on the host side.  It's not a bug, it's how USB Audio Class 1.0 was defined and any host-side drivers that allowed high speed transfers violate the class definition.  USB Audio Class 2.0 is much better and supports high speed and perhaps super speed transfers, but only XMOS supports it as far as I have found.  Not even Windows has a proper built-in USB Audio Class 2.0 driver -- you need to go through Thesycon to get a USB Audio Class 2.0 driver for Windows.  Of course, Linux and Mac support USB Audio class 2.0 natively. 

-Caleb

0 Kudos
Reply