Overclock.net banner

USB dongle, overclocks mice up to 1000 Hz

21K views 68 replies 19 participants last post by  Reina  
#1 ·
Hi guys, I was told you might be interested in this.

I made a USB dongle, I call it the HID Remapper, because its primary purpose is mouse/keyboard input remapping, but it can also override the declared polling rate of the connected device, in other words it can overclock the reporting rate up to 1000 Hz.

The dongle is very cheap and easy to make, it uses a Raspberry Pi Pico and a USB extension cable and only requires a little bit of easy soldering. It works completely in hardware and doesn't require any software running on the computer. The configuration is done through a web browser.

More details here:


Let me know if you have any questions.
 
#3 ·
It's a hardware limitation I'm afraid. I'm using RP2040's native USB for the interface that goes to the PC and that is limited to Full Speed. So even if it was possible to go beyond 1000 Hz on the mouse side (which uses a bit-banged USB implementation), we wouldn't really be able to benefit from it.
 
#5 ·
Hello, thank you very much. I constructed it (I want to overclock Microsoft IE 3.0 to 500 hz). Mouse lights are on, but the cursor doesnt move. I plugged the Remapper to USB, load the bios, and than I used the web link. Open device->HID remapper-> Unmapped inputs passthrough : ON -> Partial scroll timeout 1000 ms -> Override polling rate 500 hz -> Save to device
 
#7 ·
I assume you also tried with the option set to "don't override"?

At the moment it looks like the library that I'm using for the device side (the one which you connect your mouse to) doesn't like certain devices. I'm not yet sure why, but unfortunately variants of the IntelliMouse seem to be among them.

The issue was reported to the author, but I don't know what the chances of fixing it are (there certainly is no timeline).

On my side I'm considering making a version of the remapper that wouldn't use that particular library and instead would use two Pico boards, one for the host and one for the device USB interface (with the two sides communicating over serial or whatever). The idea being that the native hardware USB of the Pico should hopefully work with more (all) devices as it's more mature than the bit-banging library. The total cost would still be reasonable.

If I make such a version I will post here, but as of now I don't have other ideas.
 
#14 ·
I'm afraid it just doesn't work reliably at the moment. The fact that you went back to the "stable" firmware and then flashed the experimental one again probably didn't matter, it's just that it sometimes works and sometimes doesn't. At least as far as I can tell. :(

The authors of the pio-usb and tinyusb libraries are currently working on merging them (or rather making pio-usb work as one of the possible backends for tinyusb). I'm following that and will try to maybe bother them with making it work more reliably on some of those devices that are currently problematic.

For now I'm going to have to ask for your patience and thank you for your ongoing testing.
 
#17 ·
Conventional wisdom says that it's easier to bit-bang the host side because it's the host that controls the timing in USB, so we could be trading issues on one side for issues on the other.
Doesn't make much sense to me either. seems like a 1khz bottleneck is going to scupper the overclock no matter where along the line it is.

Are there enough resources to bit bang both the host and the client side? In theory then there should be no bottleneck.
 
#19 ·
rp2040 can bitbang 372mbps with overclocking+overvolting: GitHub - Wren6991/PicoDVI
but bitbanging 480mbps and meeting usb2.0 specs is not gonna be possible with 1ns rise times.

there does not yet exist a library for it, but i suspect it would be possible to use the PIO to bitbang 60mbps data on 8 pins, to a high speed usb transceiver e.g. https://www.microchip.com/en-us/product/USB3300
 
#20 ·
Hi guys,

I made a new version that might be of interest to people who had issues with compatibility previously. Since it uses the RP2040's native USB interface for both sides (host and device), it should hopefully work with more devices than the previous bit-banged implementation.

To achieve this the new version uses two Picos that talk to each other over serial. I haven't gotten around to properly documenting it yet, but the connection diagram below should have all the information needed if anyone's brave enough to try it:
Image

Flash the "A" side with remapper_dual_a.uf2 and the "B" side with remapper_dual_b.uf2. Don't connect both sides to a host at the same time. Use the same website for configuration as with the previous version.

As a bonus it should now also support multiple devices at the same time via a USB hub (though with certain limitations that I hope to address in the future).

 
#32 ·
I'm happy to report there is now an easy way to make this without any soldering. I designed a custom PCB that looks like this:
Image

It can be ordered from JLCPCB by just uploading three files available on the project's GitHub page. It's functionally equivalent to the dual Pico version discussed previously.

There's even a cute (optional) 3D printed case:
Image

 
#43 ·
Is there by chance a cheaper place to order a pre-assembled PCB? Currently don't have the ability to solder and the price on JLCPCB seems to be $60 due to quantity if I'm not mistaken. I'm not familiar with ordering PCBs so I could just be doing it wrong haha.
I don't think there's any place cheaper than JLCPCB.

If you don't want to solder, you can always use a breadboard and some jumper wires.

For a single Pico version you'd need a USB Type-A breakout board with the pins already soldered in. Or you could make the dual Pico version, then all you'd need is two Picos with headers (and an OTG cable).
Image
 
#44 ·
I don't know if advertising this is allowed but since I know some are waiting, adafruit is now selling assembled pcbs for a single pico hid remapper.
 
#45 ·
I don't know if advertising this is allowed but since I know some are waiting, adafruit is now selling assembled pcbs for a single pico hid remapper.
Yes! This should be a great way to try HID Remapper without messing with soldering, breadboards or ordering PCBs from China.

Just a heads-up, this will need a separate firmware build because the board uses different pins, but I hope to have it ready soon.
 
#46 · (Edited)
@jfedor a big thank you for all the work youve done on this project!!!
The detailed examples, instructions and schematics are great and provide ample options.

I have never used Raspberry Pi or similar boards and cant write a lick of code but I am good with computers/tech/wiring/fabrication etc.
Luckily the all knowing Google usually has answers and led me here! Hats off to you and others for making this accessible with some basic skills and minimal work.

My goal is to increase the polling rate on a Logitech MX Ergo Trackball. Currently its locked to 125hz with no adjustment options and I want to boost it to 500 or 1000hz. I prefer a trackball but a common issue with all of them is low polling rate. May also try this with a Microsoft Trackball Optical 1.0 USB; my go to setup for many years.

The new "Adafruit Feather RP2040" looks like a great quick/no solder options and likely would go that route if your new Firmware version was ready and tested.
Some quick soldering work doesnt scare me though and Amazon has 2x Raspberry Pi Pico, 2x USB female pigtails available in my area with same day delivery too!

Question... Is it possible MX Ergo or other trackballs will not have the necessary hardware to increase the polling rate? Potentially requiring modification to add a different Motion Sensor?

In the redit thread linked someone modified their MX Ergo with a PMW3360 Motion Sensor and Teensy 4.0 board to increase their polling rate to 1k.
My technical knowledge on this subject is limited and
any insight is appreciated!
 
#47 · (Edited)
The good... Made the Single Pico w/female USB A pigtail and verified input/output mapping does work!
Tested by changing a few buttons and & flipping the X/Y axis... worked perfect for both trackballs.

The bad... According to every polling rate checker Ive used my rate has remained unchanged at 125hz for both the MX Ergo and Microsoft Optical Trackball 1.0.

My technical expertise on this is fuzzy but everything in my gut points towards the Motion Sensor being the limiting factor. Just researching around on the subject I found this Github by Jfedor using the exact PMW3360 Motion Sensor for trackballs with the RP2040. Coincidence? I think not...

Can anyone enlighten me as to a rough idea of what I am getting into?
What would be the simplest way to increase the polling rate in my situation?

Honestly may be biting off more than I can chew since coding or custom/hacked firmware isnt within my skill. I will continue to research similar projects with other trackballs as well.

Factory Logitech MX Ergo Motion Sensor Board picture and PMW3360 Teensy4 mod example from Redit.
 
#48 ·
Some devices can be overclocked and some can't. If your mouse or trackball uses a 2.4GHz wireless dongle, there's a good chance that you won't be able to overclock it. We can only influence the USB polling rate between the PC and the dongle, we can do nothing about the protocol the mouse uses to communicate with the dongle, and that's likely fixed at the rate it uses by default.

The difference between a single Pico and a dual Pico version is just compatibility. Dual Pico version should work with more devices. This used to be a more significant difference, but thanks to firmware improvements, the single Pico version should work with almost everything these days.

Replacing the sensor and microcontroller in a trackball can of course change its characteristics, but it really is outside the scope of this project.
 
#49 · (Edited)
I don't have Adafruit's Feather RP2040 with USB Host board yet, but based on the specs I made this firmware build:


If you happen to have this board, please try the firmware and let me know if it works.

EDIT: Got a confirmation elsewhere that it's working. Enjoy!

EDIT2: If you're reading this in the future, use the latest release:

 
#51 ·
I think I'll buy the Adafruit board and use the remapper_feather.uf2 to remap my Slimblade(and hopefully raise it's polling to 500+) with this.
I wonder if it can also raise the polling of a plugged in Apple Magic Trackpad, my guess is no but it would be a nice bonus!

One more question about this remapper, can you remap multiple devices(obviously not plugged in at the same time) and how does it store the config for each device?
 
#52 ·
hid-config only allows one set of settings at a time, so no to multiple devices, without multiple hid-remappers. you can export the settings to a .json file for local backup. settings are stored on the device in 2mb flash.

For settings where keypresses are not duplicated, such as a mouse and keyboard into a usb hub, then into hid-remapper, that's fine.
 
#54 ·
Thanks, this is all new to me so if I have 2 different mice I want to use with this that I remapped, I only want to use one at a time so each time I plug it into this HID-remapper I have to export and import the .json file that I saved? If so the GitHub says how to do this also?