LPC4370 high speed USB isochronous transfer

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

LPC4370 high speed USB isochronous transfer

2,077件の閲覧回数
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

ラベル(1)
0 件の賞賛
返信
5 返答(返信)

1,421件の閲覧回数
soledad
NXP Employee
NXP Employee

Hi,

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

Regards

Soledad

0 件の賞賛
返信

1,421件の閲覧回数
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 件の賞賛
返信

1,421件の閲覧回数
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 件の賞賛
返信

1,421件の閲覧回数
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 件の賞賛
返信

1,421件の閲覧回数
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 件の賞賛
返信