Many moons ago I "ported" V-USB to the Arduino platform (before any Arduino used an AVR with hardware USB support) & designed a small shield to enable the required hardware side:
As I recall it, mine was not the first ever port of V-USB to the Arduino but was IIRC the first released with source & schematic.
Fun times & enabled some fun example projects (e.g. keyboards, "encryption" dongle, dynamic product/vendor ID driver fuzzing) before hardware USB support became more common & affordable.
* http://web.archive.org/web/20120204231721/http://code.rancid... (via http://web.archive.org/web/20200119053709/http://www.labrado... (No thanks to Google for screwing over Google App Engine early adopters.))
The project even got featured in a chapter in a book: http://web.archive.org/web/20120203210440/http://www.practic...
As I recall it, mine was not the first ever port of V-USB to the Arduino but was IIRC the first released with source & schematic.
Fun times & enabled some fun example projects (e.g. keyboards, "encryption" dongle, dynamic product/vendor ID driver fuzzing) before hardware USB support became more common & affordable.
I highly recommend the write-up of how they achieved the required throughput to make USB work: https://www.obdev.at/articles/implementing-usb-1.1-in-firmwa...
The write-up is the kind of engaging roller-coaster process of discovery narrative that I thoroughly enjoy reading. :)