explaingit

dekunukem/nintendo_switch_reverse_engineering

Analysis updated 2026-07-03

3,734CAudience · developerComplexity · 4/5Setup · hard

TLDR

Hobbyist reverse-engineering notes on how Nintendo Switch Joy-Con controllers work internally, covering PCB layout, chip addresses, connector pinouts, and Bluetooth communication protocols.

Mindmap

mindmap
  root((Joy-Con RE))
    Hardware
      PCB diagrams
      Test points
      1.8V logic
    Internal Chips
      4MB flash memory
      6-axis motion sensor
      Keypad scanner
    Physical Connector
      10 pins mapped
      Serial data lines
      Handshake sequences
    Wireless
      Bluetooth protocol
      Input report formats
      Button matrix layout
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Build a custom driver or homebrew app that communicates with Joy-Con controllers over Bluetooth using the documented input report formats.

USE CASE 2

Understand the Joy-Con hardware bus to read data from the built-in motion sensor or flash chip in a DIY project.

USE CASE 3

Map the 10-pin physical connector between a Joy-Con and the Switch console to wire up custom hardware or accessories.

USE CASE 4

Study how Nintendo's button-matrix scanning works as a reference for designing your own controller hardware.

What is it built with?

C

How does it compare?

dekunukem/nintendo_switch_reverse_engineeringnethack/nethacktimescale/pg_textsearch
Stars3,7343,7343,736
LanguageCCC
Setup difficultyhardmoderatemoderate
Complexity4/54/53/5
Audiencedeveloperdeveloperdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · hard Time to first run · 1day+

This is reference documentation, not a runnable library, applying it requires hardware access and low-level programming knowledge.

License information is not specified in the explanation.

In plain English

This repository is a collection of notes from a hobbyist who physically took apart Nintendo Switch Joy-Con controllers to figure out how they work internally. The findings are shared openly for the Switch homebrew and hardware community. The content covers low-level hardware details. There are annotated PCB diagrams showing the physical circuit board layout of both left and right Joy-Con, with test points identified. The Joy-Con runs at 1.8 volts internally, and the author notes Nintendo used an unusual button-scanning method: instead of the standard approach of pulling individual button lines high or low, the buttons are arranged in a matrix grid scanned by a built-in keypad scanner chip at 128KHz, which makes it much harder to fake button inputs programmatically. On the hardware side, the Joy-Con contains two chips on its internal data bus: a 4 megabit flash memory chip and a 6-axis motion sensor (accelerometer and gyroscope combined). The repository documents the addresses and data formats used to communicate with both, including captured recordings of the actual signals on those lines during startup and while the controller is in use. The motion sensor is polled around 740 times per second, though the controller only reports data to the console every 15 milliseconds. The physical connector between Joy-Con and the Switch console has 10 pins. The repository maps out the function of each pin, including power, serial data lines in each direction, a reset line, and a flow control line. The initial connection runs at 1,000,000 bits per second and then switches to 3,125,000 bits per second after a handshake. The handshake byte sequences for the console and controller are documented. The repository also covers Bluetooth communication, button and input report formats, and notes from other contributors who added findings of their own.

Copy-paste prompts

Prompt 1
I want to read Joy-Con motion sensor data over Bluetooth in a Python script. Based on the nintendo_switch_reverse_engineering docs, what report format do I parse and at what polling rate?
Prompt 2
Show me how to implement the Joy-Con Bluetooth handshake byte sequence from the reverse-engineering notes to connect a Joy-Con to a custom device.
Prompt 3
What are the functions of each of the 10 pins on the Joy-Con rail connector according to the reverse-engineering documentation?
Prompt 4
How does the Joy-Con button matrix scanning work, and why does Nintendo's approach make it hard to simulate button presses programmatically?

Frequently asked questions

What is nintendo_switch_reverse_engineering?

Hobbyist reverse-engineering notes on how Nintendo Switch Joy-Con controllers work internally, covering PCB layout, chip addresses, connector pinouts, and Bluetooth communication protocols.

What language is nintendo_switch_reverse_engineering written in?

Mainly C. The stack also includes C.

What license does nintendo_switch_reverse_engineering use?

License information is not specified in the explanation.

How hard is nintendo_switch_reverse_engineering to set up?

Setup difficulty is rated hard, with roughly 1day+ to a first successful run.

Who is nintendo_switch_reverse_engineering for?

Mainly developer.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Scan in gitsafehub Deploy in gitdeployhub dekunukem on gitmyhub

Verify against the repo before relying on details.