-
Notifications
You must be signed in to change notification settings - Fork 147
Description
Hi,
Since about a year I've been working on a new Facedancer backend for boards made by Benjamin Vernoux @bvernoux. This is a R&D project I'm doing at my company @quarkslab in direct collaboration with Benjamin.
The backend is for boards based on the WCH569 chip from WCH, a RISC-V chip which supports both USB3 and USB2. The project started with two HydraUSB3 boards connected through HSPI, but we moved to a new single board that splits the USB3/USB2 on a single chip as shown in the image below (currently in prod, nearly finished). The goal is to propose a faster backend than the current Facedancer21 and GreatFET One, support USB2 High-speed and more endpoints.
Here are some characteristics and results of this backend, which I think would make it a good addition to this project:
- supports USB2 High-speed, Full-speed and should support low-speed
- 6 endpoints including EP0, in both IN/OUT directions simultaneously
- endpoint numbers from 0 to 15 (but with incompatibilities, some EP numbers cannot be used together, check backend)
- increased speed compared to Facedancer21/GreatFET One, results here https://github.com/HydraDancer/hydradancer_fw
- support for NAKs, but also priming using
handle_buffer_empty - tested emulation of a mouse peripheral and the included mass storage example
- tested proxy mode with a High-speed USB key (got 1.5MB transfer rate while proxying a 1.5GB file), tested proxy mode with a Full-speed mouse
- made the stress tests pass (both highly stressed and regular) : highly stressed crashes after a few thousand tries. This should be ok in regular use, but can explain timeouts or data corruption in highly stressed scenarios.
We published a blogpost a few weeks ago, but there have been quite a few changes to make the stress test work.
I'm proposing the following PRs from high to low priority :
- Hydradancer fixes for Facedancer #92 : fix for bugs encountered while playing with Facedancer
- New Hydradancer backend for Facedancer #93 : based on the above branch/PR. Adds the new Hydradancer backend
- New mouse peripheral and tests #94 : a mouse peripheral i implemented when starting with Facedancer, speed and loopback tests that could need more polish
Best,