[Any] idea is dead without a good application for it. So California Dreamin USB virtual peripheral could be a very nice sample of academic research, but hardly anybody is going to build a keyboard or mouse using it. I have been thinking for a while what to do with it as well. First project that came to my mind was building a hardware key logger for USB keyboards, something like www.keyghost.com, built for PS2 protocol using PIC16F877. It was quite simple to implement USB part using SX, serial EEPROM and a few switching ICs. Furthermore I found out that built-in features of SX MCU would help to create a device able to work not only with pure low-speed USB keyboards, but also composite, built-in-hub, things, hence covering all existing systems (SUN, Mac, PC). Recording keystrokes is fun, but if we can do that, why not go further and try to record all low-speed USB traffic. No problem for SX again, problem for the memory. Serial EEPROM is just to slow to handle it. Solution was www.ramtron.com FRAM with 1MHz two-wire interface (let me pay credit here to www.svtehs.com, who happens to advertise it). Finally California Dreamin found a real life application in the worlds smallest low-speed USB analyzer Atapchi (stands for a small fruit in Singapore, tastes like apricot). I hope you find this project interesting (mail your questions to chinook at pacific.net.sg)
The list of MCUs you can use with Atapchi (not full)
Input, recording low-speed USB traffic. Atapchi is plugged into a USB self-powered hub, a USB repeater is plugged into Atapchi, device under development is plugged into the repeater. All traffic from/to the device is recorded.
Output, downloading the data. Atapchi is plugged into a USB repeater, the repeater is plugged into a self-powered hub. Atapchi enumerates as a generic USB keyboard and types memory content into any text editor.
Device is the mouse you see on the picture above (Justy UMN-05 SG). MCU used is omnipresent Cypress CY7C63001A. Total listing length is 1083 lines.
reset
eop 060
0001 00 0 setup
0002 data0 [ bb 29 ] 80 06 00 01 00 00 40 00
0003 ack
eop 001
0004 00 0 in
0005 data1 [ c8 e7 ] 12 01 00 01 00 00 00 08
0006 ack
eop 002
0007 00 0 out
0008 data1 [ 00 00 ] zero-length
0009 ack reset
eop 043
0010 00 0 setup
0011 data0 [ 57 85 ] 00 05 05 00 00 00 00 00
0012 ack
eop 001
0013 00 0 in
0014 data1 [ 00 00 ] zero-length
0015 ack
eop 014
0016 05 0 setup
0017 data0 [ 07 2f ] 80 06 00 01 00 00 12 00
0018 ack
eop 001
0019 05 0 in
0020 data1 [ c8 e7 ] 12 01 00 01 00 00 00 08
0021 ack
eop 001
0022 05 0 in
0023 data0 [ 7e 33 ] 58 04 03 00 00 00 01 02
0024 ack
We benefit if you read this: Interested in buying a new computer? Get computer tips online first! Learn everything you need to know about programing your computer and how to purchase online music. Or find the computer parts you need to build your own!