Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
WaRa_4824346
Level 1
Level 1
10 questions asked 10 sign-ins 5 replies posted

Oh, wise FX3 masters this humble supplicant seeks your wisdom concerning Host, FX3 and FPGA interfacing. 

I'm investigating the use of an FX3 device for interfacing an FPGA to a host system via USB Gen 3.1.   I need to create a composite USB device with the following sub-devices:

1.  A 50 MB/s bidirectional stream.   Only inbound or outbound transfers will be active at a time but not both simultaneously.  The data must be transferred isochronously.

2. 1.2 MB/s bidirectional stream that must enumerate to the host as a USB audio device.  No need to produce I2S nor consume data supplied over I2S.  Outbound or inbound "Audio" (it isn't) data can simply be written as a stream of 16 bit samples onto the GPIF II bus.  Why fake an audio device?  To re-use existing software. The  exact reasons are both proprietary and far too arcane (boring even) to discuss.  The data must be transferred isochronously.

3. A register interface used for configuration, control and status  that will be sporadically accessed.  There should be an "interrupt" associated with this interface.  Transfer rates are unknown but believed to be well below 100KB/s.Perhaps,  USB  interrupt transfers are appropriate

I would like to use a synchronous ADMux interface on the GPIF II bus (perhaps, this is a dumb idea) that is 16 bits wide connected to the FPGA.  There seems to be a 2 bit address that associated with each stream.  Logic in the FPGA will use the two address bits to disambiguate among the high speed stream, the low speed stream and the register access stream.

Questions:

1.  Can the FX3 be operated this way?  Although 32 endpoints are available, I'm not sure that FX3 can actual support composite devices.

2. Is there a version of CyAPI for Linux?  Anyone have experience using CyAPI with Ubuntu 18.04? I don't want to write a Linux kernel driver, if it can be avoided.

3. Is it possible to enumerate as an USB audio device but send the data over the GPIF II bus?

Due to my ignorance, I can't see the forest for the trees.  As is typical, Cypress provides good documentation but I'm overwhelmed with the amount info that must be absorbed to really understand The FX3.

Thanks for entertaining a bunch of "durn fool" questions.  Your help is much appreciated!

Wayne

 

 

0 Likes
1 Solution
Hemanth
Moderator
Moderator
Moderator
First like given First question asked 750 replies posted

Hi Wayne,


1.  Can the FX3 be operated this way?  Although 32 endpoints are available, I'm not sure that FX3 can actual support composite devices.


First two points in your description is possible to be implemented in FX3 firmware. I did not get the requirement in third point - which registers do you want to access, is it of FPGA? If yes, what interface is available to read them from FX3? - please provide more details. By 'interface' I think you meant USB interface which will be available for your Host app - please confirm.

Composite device implementation is possible. For example you can see below project where FX3 enumerates as composite device: UVC+CDC. This is working with Windows Host and not tested on Linux.

https://community.cypress.com/t5/Knowledge-Base-Articles/Using-CyU3PDebugPrint-API-to-Send-Debug-Mes...


I would like to use a synchronous ADMux interface on the GPIF II bus (perhaps, this is a dumb idea) that is 16 bits wide connected to the FPGA.  There seems to be a 2 bit address that associated with each stream.

 


I think that FX3 Slave FIFO application note suits your requirement. Please check

https://www.cypress.com/documentation/application-notes/an65974-designing-ez-usb-fx3-slave-fifo-inte... 



2. Is there a version of CyAPI for Linux?  Anyone have experience using CyAPI with Ubuntu 18.04? I don't want to write a Linux kernel driver, if it can be avoided.


We have libusb based libraries which can be used for application development. You can have a look at it in Linux SDK present in below link:

https://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit

cyusb_linux application which you find in above SDK is based on libusb.


3. Is it possible to enumerate as an USB audio device but send the data over the GPIF II bus?


Yes this is possible. FX3 enumeration depends only on how you write USB descriptors. Data path to the endpoints within FX3 (for example, in your case, USB Audio endpoint to GPIF) can be implemented in many ways.

Regards,

Hemanth

View solution in original post

0 Likes
2 Replies
Hemanth
Moderator
Moderator
Moderator
First like given First question asked 750 replies posted

Hi Wayne,


1.  Can the FX3 be operated this way?  Although 32 endpoints are available, I'm not sure that FX3 can actual support composite devices.


First two points in your description is possible to be implemented in FX3 firmware. I did not get the requirement in third point - which registers do you want to access, is it of FPGA? If yes, what interface is available to read them from FX3? - please provide more details. By 'interface' I think you meant USB interface which will be available for your Host app - please confirm.

Composite device implementation is possible. For example you can see below project where FX3 enumerates as composite device: UVC+CDC. This is working with Windows Host and not tested on Linux.

https://community.cypress.com/t5/Knowledge-Base-Articles/Using-CyU3PDebugPrint-API-to-Send-Debug-Mes...


I would like to use a synchronous ADMux interface on the GPIF II bus (perhaps, this is a dumb idea) that is 16 bits wide connected to the FPGA.  There seems to be a 2 bit address that associated with each stream.

 


I think that FX3 Slave FIFO application note suits your requirement. Please check

https://www.cypress.com/documentation/application-notes/an65974-designing-ez-usb-fx3-slave-fifo-inte... 



2. Is there a version of CyAPI for Linux?  Anyone have experience using CyAPI with Ubuntu 18.04? I don't want to write a Linux kernel driver, if it can be avoided.


We have libusb based libraries which can be used for application development. You can have a look at it in Linux SDK present in below link:

https://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit

cyusb_linux application which you find in above SDK is based on libusb.


3. Is it possible to enumerate as an USB audio device but send the data over the GPIF II bus?


Yes this is possible. FX3 enumeration depends only on how you write USB descriptors. Data path to the endpoints within FX3 (for example, in your case, USB Audio endpoint to GPIF) can be implemented in many ways.

Regards,

Hemanth
0 Likes

Hermanth

Your guidance concerning the FX3 is very much appreciated.  Thank you!

Wayne

0 Likes