When USB 2.0 is not enough

When you designing a peripheral device, which is supposed to to communicate with a PC by wire, USB is the clear choice. A USB 1.0 (Full Speed) can be found on every better microcontroller. What if, however, we want to create some peripheral with the need for a much faster communication – say, a USB camera? Professional webcams often use their own custom (ASIC) circuit, which obviously are not intended for general use and therefore are not very interesting for us. Our USB controller should be universal (for general purpose), programmable and therefore it should contain some kind of microcontroller. If you are satisfied with modest bandwidth of USB 2.0 you can choose from variety of interesting general purpose USB controllers (especially from TI and Cypress). For example you can use popular Cypress CY7C68013 (a programmable core here is the good old Intel 8051). However, if you need to transfer a significantly more data, it is time for USB3.0. Although the newer USB3.1 is now the top edge, there is still not so great variety of USB3.0 controllers to choose on the current market. A very interesting programmable USB3.0 controllers seems to be, for example the Cypress EZ-USB FX3 family. The circuits from this family are among other very popular just in USB3.0 digital cameras.

This is of course a high-speed circuit with a BGA housing. So it is somewhat DIY unfriendly and the only way to play with the circuits provide a various developer kits. Today we will take a look at the official developer kit for CYUSB3014 circuit and of course, we will take a peek on the circuit itself.

USB 3.0

USB 3.0 is the third generation of USB. Similarly as shifting from USB 1.0 to USB 2.0, also this upgrade brings mainly higher transmission speed – theoretically up to 5 Gbit/s (625 MB/s). Changes, however, are by no means a mere increase in the frequency of transmission. USB 3.0 delivers a completely redesigned physical layer of communication. While USB 2.0 communicates with one bi-directional half-duplex data line, USB 3.0 has two independent, asynchronous communication channels. Communication is thus in a fully duplex mode and this improvement brings a number of benefits.

USB lanes
USB lanes

Thanks to the presence of a separate broadcast and reception channel, communication can now be made more efficient. USB 3.0 does not hold on pooling (periodical host queries), therefore much more of bandwidth can be used to transfer useful data, and a much smaller portion of it serves to just communication overhead. For the same reason, USB 3.0 communication is also more energy efficient. Slave devices can easily manage their sleep mode with asynchronous communication (the slave no longer needs to wake up every 1ms to respond to the host only that it exists). USB 3.0 also provides a generous power transfer capabilities. This change is particularly reflected on USB 3.0 cabling, which has a significantly enlarged cross section on power wires. Due to the incompatibility of the physical layer of the original USB 2.0 and the new USB 3.0 (and the need for backward compatibility between both), USB 3.0 also includes the original USB 2.0 communication channel.

CYUSB3014

CYUSB3014 je univerzální programovatelný USB3.0 řadič. Řadič zahrnuje také podporu USB2.0 a USB OTG (On-The-Go) v roli hostitele i v roli periferie. Hlavní zajímavostí řadiče je ovšem plnohodnotné integrované 200MHz ARM jádro ARM926EJ (architektura ARMv5TEJ), které má k dispozici 512KB SRAM. Právě programovatelné ARM jádro ve spolupráci s 58 GPIO piny (s konfigurovatelnými napěťovými úrovněmi) a podporou široké škály klasických sběrnic (UART, SPI, I2C, I2S) dělá z obvodu velmi univerzální nástroj. K CYUSB3014 lze snadno připojit CCD či CMOS obrazový senzor, ale také například externí RAM paměť, jakýkoliv další mikrokontrolér, Arduino, Raspberry Pi a mnoho dalšího. Rychlost GPIO je 100Mhz. Zdrojem hodinového signálu pro CYUSB3014 může být externí zdroj 19.2, 26, 38.4 či 52 MHz. Při 19.2Mhz se ovšem CYUSB3014 spokojí i se svým interním oscilátorem a externě je třeba připojit pouze krystal. Vysokorychlostní data, která tečou z GPIO pinů do USB rozhraní samozřejmě nemusí být zdržována v ARM jádru, ale mohou využít propracovaný DMA řadič.

CYUSB3014
CYUSB3014

CYUSB3KIT-001

Vývojářský kit nese označení CYUSB3KIT-001 a vyrábí ho sám Cypress. Deska zajišťuje čipu CYUSB3014 napájení (pomocí několika LDO TPS76801). Z integrovaného obvodu také rozvádí GPIO linky na GPIO headery (Samtec Expansion Connector) a poskytuje zdroj hodin (19.2MHz krystal). Deska dále obsahuje konvertor logických úrovní MAX3378 a řadič RS232 linky MAX13235 – oba obvody zajišťují RS232 komunikaci s CYUSB3014, fyzicky realizovanou prostředníctvím klasického 9-pin D-Sub konektoru. Na desce je také dutinkový konektor pro připojení externího napájení a pak samozřejmě samotný USB3.0 konektor v provedení microUSB.

Cypress package
Cypress EZ-USB FX3 CYUSB3KIT-001

Software development for CYUSB3014

Všechny nástroje potřebné pro vývoj firmwaru řadiče CYUSB3014 lze nalézt na webu Cypressu. Před stažením je třeba se zdarma zaregistrovat. Je zde dostupná jak dokumentace tak i samotné SDK (EZ-USB FX3 SDK). Firmware je standardně psán v jazyku C (ANSI C). Pro pohodlé psaní softwaru nabízí SDK upravené IDE Eclipse. Kompilování a debugging je prováděn pomocí toolchainu Sourcery CodeBench Lite. Výstupem po zkompilování (a zlinkování) je standardní *.elf binární soubor. Ten je následně pomocí toolu elf2img převeden na image paměti *.img, který již může být nahrán do RAM paměti CYUSB3014 – opět pomocí toolu, který je ve formě pluginu součástí Eclipse. Fyzicky lze nahrání firmwaru realizovat pomocí rozhraní JTAG (vyžaduje speciální HW debugger – např. Segger J-Links) nebo pomocí samotného USB spojení PC s vývojovým kitem. V CYUSB3014 v takovém případě zajištuje USB komunikaci připravený Boot loader. V PC je ovšem potřeba naistalovat příslušný ovladač (je opět součástí SDK, ale je třeba ho naistalovat ručně). SDK zahrnuje rovněž několik vzorových projektů. Vzorové projekty jsou nastavené tak, aby proces převodu na *.img prováděla Eclipse automaticky, také includují příslušné knihovny a vůbec obsahují mnoho custom nastavení. Je tedy velmi radno nové projekty stavět na kopii již nexistujícího, vzorového projektu. Lze se tím vyhnout mnoha problémům.

Perhaps it would be appropriate at the end ot the article to add a little tutorial “How blink LED on the USB3.0 controller” (like a “Hello world” for electronics developers), but exactly this type of tutorial is part of the CYUSB3KIT-001 User Guide on Cypressu web.
Thats why I’m saying goodbye just with a photo of flashing LEDs on the controller USB3.0.

Be the first to comment

Leave a Reply

Your email address will not be published.


*