How to interface PC and FPGA through USB 2.0

Hi,

I want to write a C++ code that will allow for the communication between a USRP board (a hardware device that is used for making Software Defined Radio. It captures the actual data on which modulation/demodulation in software on the PC has to be performed. The USRP does some processing on raw data such as analog to digital conversion, down-conversion and decimation of data and throws it on a USB 2.0 port)and a PC. All of the high-speed general purpose operations like digital up and down conversion, decimation and interpolation are done on the Altera Cyclone EP1C12 FPGA on the USRP board. The FPGA, in turn, connects to a USB2 interface chip, the Cypress FX2, and on to the computer.

I want to interface the DSP board and USRP board through USB 2.0. For this, I am initially trying to write a code in Windows, which I will later on implement on the DSP board with necessary modifications. Please suggest me how I should go about writing this C++ code?

Reply to
ujala
Loading thread data ...

If you look on the Cypress web site you will find example PC drivers and applications which you can modify to make an app. of your own. It's a while since I did this but it wasn't that hard to get something working.

Then you mention a DSP board talking to your radio through USB - this is annother deal altogether and you would need to define the DSP board to get any advice.

Michael Kellett

Reply to
MK

You should read up on SLAVE FIFO mode, which is probably what you want.

For this mode, you have to write FX12 firmware which configures the chip and then basically goes to sleep. The FPGA treats the FX12 as parallel slave and writes the data to it (respecting the Ready/Busy signal). The FX12 automatically forwards the data to the host PC.

The firmware is to be created in 8051 C or assembler, and can be loaded at runtime or be stored in an I2C EEPROM on your board. You can find example firmware with source code in the EZUSB developer download. The "a3_load" example will show you how to load firmware at runtime.

You will also need a driver on the host PC, and functions that talk to it. There is sourcecode in the developer download, for the ezusb driver and EzMgr (?) application which shows you how to use it. However, this driver is deprecated, and it does not support overlapped IO. The alternative is to use the new Cypress driver (cyusb?) or a

3rd party driver, but I can't point you to any.

Let us know how everything turns out, once you've made progress!

Best regards Marc

Reply to
jetmarc

Have you heard of Google Search? It's a fabulous tool that comes free with every gmail account.

With this "search" tool, you can find a number of web sites where people are doing SDR with USB-2.0 and FPGA's. Most of them are very willing to share their research with the world.

As for writing C++ code, I prefer 'VIM'. Emacs is good; I like it too, but for C and C++, 'VIM' just works better for me. YMMV.

AL

Reply to
LittleAlex

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.