Hall Joysticks On Switch Pro Controller

  • Thread starter Thread starter NeoHoth
  • Start date Start date
  • Views Views 56,444
  • Replies Replies 130
  • Likes Likes 7
In case anyone is still looking for replacement joysticks, I think I've found a suitable part, new TMR joysticks from GuliKit:
https://www.aliexpress.com/item/1005007307245843.html
Be careful about buying from other sources, the first version which was PS4/Switch Pro didn't actually work on Switch Pro controller.
Calibrated fine, the movement range seems to be circular, the deadzone non-existent. Confirmed working on Switch and Steam Deck.
For some reason can't get the controller properly detected on Windows / Steam, but works just fine in Yuzu.
Joystick caps are detachable and they seem to have an anti-friction insert on the stem of the thumbstick, appears to be metal, which should prevent the stem from grinding against the circular gate.
Tentatively recommend.
 
In case anyone is still looking for replacement joysticks, I think I've found a suitable part, new TMR joysticks from GuliKit:
https://www.aliexpress.com/item/1005007307245843.html
Be careful about buying from other sources, the first version which was PS4/Switch Pro didn't actually work on Switch Pro controller.
Calibrated fine, the movement range seems to be circular, the deadzone non-existent. Confirmed working on Switch and Steam Deck.
For some reason can't get the controller properly detected on Windows / Steam, but works just fine in Yuzu.
Joystick caps are detachable and they seem to have an anti-friction insert on the stem of the thumbstick, appears to be metal, which should prevent the stem from grinding against the circular gate.
Tentatively recommend.
thanks for the update.
 
Hi everyone! I can fully confirm that the cheap hall effect modules for the switch pro controller you find on AliExpress are working. The sticks worked right after soldering but if you calibrate them using the Switch Calibration Tool, they will be dead center and you will be able to turn the dead-zone all the way to zero. I have documented my full journey here . The specific modules I installed had an orange color and read "L-4J" printed on the PCB.

2024-10-13_16-42-45.png
joysticks.jpg
 
So I finally got around to installing those orange sticks. They do work well.

After calibrating them on the Switch, I used Joy-Con Toolkit to read the raw values of user calibration for each stick, and then write them back as the factory calibration. So resetting to defaults will always get the controller back to a known well calibrated state.
Disclaimer: This uses the debug functionality of Joy-Con Toolkit to write directly to addresses on the SPI flash, so it is sensitive to errors, can wear the memory, and it is very easy to mess up.

:!: This could very well brick your Pro Controller, so don't blame me for any consequences if you try it.
Making a SPI backup first is a good idea, just in case, but that does not guarantee you can recover from a brick if things go wrong.

Steps are the same for both sticks, only the memory addresses are different (and of course the values).
Read User calibration of left stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in Little Endian (0x8012)] [size to read (9)] -> 12 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 12 80 00 00 09 xx
xx xx xx xx xx xx xx xx

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of left stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x603D)] [size to write (9)] [calibration data (values)] -> 3D 60 00 00 09 xx xx xx xx xx xx xx xx xx

Read User calibration of right stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in LE (0x801D)] [size to read (9)] -> 1D 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 1D 80 00 00 09 yy
yy yy yy yy yy yy yy yy

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of right stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x6046)] [size to write (9)] [calibration data (values)] -> 46 60 00 00 09 yy yy yy yy yy yy yy yy yy
 
Last edited by Nephiel,
So I finally got around to installing those orange sticks. They do work well.

After calibrating them on the Switch, I used Joy-Con Toolkit to read the raw values of user calibration for each stick, and then write them back as the factory calibration. So resetting to defaults will always get the controller back to a known well calibrated state.
Disclaimer: This uses the debug functionality of Joy-Con Toolkit to write directly to addresses on the SPI flash, so it is sensitive to errors, can wear the memory, and it is very easy to mess up.

:!: This could very well brick your Pro Controller, so don't blame me for any consequences if you try it.
Making a SPI backup first is a good idea, just in case, but that does not guarantee you can recover from a brick if things go wrong.

Steps are the same for both sticks, only the memory addresses are different (and of course the values).
Read User calibration of left stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in Little Endian (0x8012)] [size to read (9)] -> 12 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 12 80 00 00 09 xx
xx xx xx xx xx xx xx xx

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of left stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x603D)] [size to write (9)] [calibration data (values)] -> 3D 60 00 00 09 xx xx xx xx xx xx xx xx xx

Read User calibration of right stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in LE (0x801D)] [size to read (9)] -> 1D 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 1D 80 00 00 09 yy
yy yy yy yy yy yy yy yy

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of right stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x6046)] [size to write (9)] [calibration data (values)] -> 46 60 00 00 09 yy yy yy yy yy yy yy yy yy
Hi, the 5.20 version of the Joy-Con Toolkit doesn't let me send 0x10 or 0x11 debug commands. How did you manage to copy the user calibration to defaults? Did you use a different version of the toolkit or is there a way to unlock those commands?
Thanks!
 
Hi, the 5.20 version of the Joy-Con Toolkit doesn't let me send 0x10 or 0x11 debug commands. How did you manage to copy the user calibration to defaults? Did you use a different version of the toolkit or is there a way to unlock those commands?
Thanks!
Debug mode does not have that enabled by default, you have to do something first. But I can't remember what... and that's funny, because part of the reason I wrote that post was to remember stuff myself, and it seems I left out that part. I probably thought it was straightforward.

Anyway, one of these would likely enable it:
On debug panel, search for a tiny button below the cmd window. It will highlight as you pass over it. Click it. This will enable full debug mode and you'll be able to write to the SPI.
[...]
hint: the button is at the bottom left of the debug commands pane :P
open "More..." and go to "Debug" to open "Debug: Custom Command".
[...]
Then click on "HD Rumble Player". This is necessary to trick the program into allowing you to set the Subcmd to 11,
as it's normally disabled. Open "Debug: Custom Command" again
I can't run the toolkit where I am now, otherwise I would check which of those methods does the trick.
 
  • Like
Reactions: twins333
Debug mode does not have that enabled by default, you have to do something first. But I can't remember what... and that's funny, because part of the reason I wrote that post was to remember stuff myself, and it seems I left out that part. I probably thought it was straightforward.

Anyway, one of these would likely enable it:


I can't run the toolkit where I am now, otherwise I would check which of those methods does the trick.
The rumble method works. thank you!
 
  • Like
Reactions: Nephiel
Debug mode does not have that enabled by default, you have to do something first. But I can't remember what... and that's funny, because part of the reason I wrote that post was to remember stuff myself, and it seems I left out that part. I probably thought it was straightforward.
This makes you a human. Thanks for the write up!
 
  • Like
Reactions: Nephiel
So I finally got around to installing those orange sticks. They do work well.

After calibrating them on the Switch, I used Joy-Con Toolkit to read the raw values of user calibration for each stick, and then write them back as the factory calibration. So resetting to defaults will always get the controller back to a known well calibrated state.
Disclaimer: This uses the debug functionality of Joy-Con Toolkit to write directly to addresses on the SPI flash, so it is sensitive to errors, can wear the memory, and it is very easy to mess up.

:!: This could very well brick your Pro Controller, so don't blame me for any consequences if you try it.
Making a SPI backup first is a good idea, just in case, but that does not guarantee you can recover from a brick if things go wrong.

Steps are the same for both sticks, only the memory addresses are different (and of course the values).
Read User calibration of left stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in Little Endian (0x8012)] [size to read (9)] -> 12 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 12 80 00 00 09 xx
xx xx xx xx xx xx xx xx

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of left stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x603D)] [size to write (9)] [calibration data (values)] -> 3D 60 00 00 09 xx xx xx xx xx xx xx xx xx

Read User calibration of right stick:
Debug Subcommand: 0x10 (SPI flash read)
Arguments: [address in LE (0x801D)] [size to read (9)] -> 1D 80 00 00 09

From the result of sending that read command, note the set of nine raw values returned:
90 10 1D 80 00 00 09 yy
yy yy yy yy yy yy yy yy

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00

Write Factory calibration of right stick:
Debug Subcommand: 0x11 (SPI flash write)
Arguments: [address in LE (0x6046)] [size to write (9)] [calibration data (values)] -> 46 60 00 00 09 yy yy yy yy yy yy yy yy yy
I forgot to ask, does this work for regular joy-cons? are the addresses the same?
 
Made an account today specifically to reply to this thread. I ordered a similar example from Aliexpress (can't link, new account restrictions) on "New Chip Store." Orange and white.

They were out of stock but the seller was kind enough to message me as soon as they got back. I got the "Switch Pro" variant.
Fit perfect. Got to the calibration screen and it was a little off-center at rest...one calibration cycle fixed it. I've played about an hour of splatoon on it so far and so good so far.
Post automatically merged:



I can't post pictures yet but my results using this site were kind of similar - got 17.2% circularity on the Hall Stick compared to 6.3% on the OEM one (I only replaced the left stick so far). Left stick is also in the (+x, -y) quadrant at rest but running the calibration on the switch removed that at rest. So I'm also guessing the tester is not taking into account calibration
~2ish year follow-up. I'm still using the same hall effect stick (left, standard switch 1 pro controller) and no issues at all so far. Previously, I would kill about one aftermarket traditional stick a year, so it's a big step-up. I also replaced my right stick with the same hall effect stick this year as well.

Performance...is hard to quantify. My main game is competitive splatoon 3 where probably 95% of people use motion controls, myself included. Most of my fine adjustments are motion so perfect stick performance isn't something I would easily notice. As an experiment, I asked my teammate who is a rare sticks-only player and plays at the same level as I to give my controller a go. He immediately noticed that the stick dead zones feel different than on his OEM controllers, which I found super interesting. I believe he also noted that the spring resistance of the stick felt different as well. I haven't done any adjustment to mine at all besides the normal calibration cycle on the switch itself. I need to look into some of the external tools other people in this thread have used to adjust their dead zones.
 

Site & Scene News

Popular threads in this forum