jvanakker GitHub Mirror
🪞 MirrorGitHub mirror of the GitLab original. 84+ stars, major discovery point for newcomers.
CanFeather – Tesla FSD CAN Bus Enabler
Credits for the original repo go to https://gitlab.com/Starmixcraft/tesla-fsd-can-mod
Why is this public? Some sellers — such as Michal Gapinski — charge up to 500 € for a solution like this. In our opinion, that is massively overpriced. The board costs around 20 €, and even with labor factored in, a fair price is no more than 50 €. This project exists so nobody has to overpay.
What It Does
This firmware runs on an Adafruit CAN Bus FeatherWing (MCP25625/MCP2515-based) and intercepts specific CAN bus messages on a Tesla vehicle to enable and configure Full Self-Driving (FSD) functionality.
It listens for autopilot-related CAN frames on the vehicle's CAN bus and checks whether "Traffic Light and Stop Sign Control" is enabled in the vehicle's Autopilot settings. When this setting is turned on, the chip treats it as the trigger to enable Full Self-Driving by modifying the relevant bits in the CAN frame and re-transmitting it onto the bus. It also reads the follow-distance stalk setting and maps it to a speed profile.
Supported Hardware Variants
The firmware supports three Tesla hardware generations, selected at compile time via the #define HW directive:
| Define | Target | Listens on CAN IDs | Notes |
|---|---|---|---|
LEGACY |
HW3 Retrofit | 1006 | Sets FSD enable bit and speed profile |
HW3 |
HW3 vehicles | 1016, 1021 | Adds speed-offset control via follow-distance |
HW4 |
HW4 vehicles | 1016, 1021 | Extended speed-profile range (5 levels) |
Key Behaviour
- FSD enable bit is set when "Traffic Light and Stop Sign Control" is enabled in the vehicle's Autopilot settings.
- Speed profile is derived from the scroll-wheel offset or follow-distance setting.
- Nag suppression — clears the hands-on-wheel nag bit.
- Debug output is printed over Serial at 115200 baud when
enablePrintistrue.
Hardware Requirements
- Adafruit Feather M4 CAN (or compatible board with MCP25625/MCP2515)
- The board must expose these pins (defined at the top of the sketch):
PIN_CAN_CS— SPI chip-select for the MCP2515PIN_CAN_INTERRUPT— interrupt pin (unused; polling mode)PIN_CAN_STANDBY— CAN transceiver standby controlPIN_CAN_RESET— MCP2515 hardware reset
- CAN bus connection to the vehicle (500 kbit/s)
Installation
1. Install the Arduino IDE
Download from https://www.arduino.cc/en/software.
2. Add the Adafruit Board Package
- Open File → Preferences.
- In Additional Board Manager URLs, add:
https://adafruit.github.io/arduino-board-index/package_adafruit_index.json - Go to Tools → Board → Boards Manager, search for Adafruit SAMD (or the appropriate family for your Feather), and install it.
3. Install Required Libraries
Install the following library via Sketch → Include Library → Manage Libraries… or the Arduino Library Manager:
- MCP2515 by autowp — CAN controller driver (
mcp2515.h)
4. Select Your Hardware Target
Near the top of CanFeather.ino, change the HW define to match your vehicle:
#define HW HW3 // Change to LEGACY, HW3, or HW4
5. Upload
- Connect the Feather via USB.
- Select the correct board and port under Tools.
- Click Upload.
6. Wiring
The recommended connection point is the X179 connector:
| Pin | Signal |
|---|---|
| 13 | CAN-H |
| 14 | CAN-L |
Connect the Feather's CAN-H and CAN-L lines to pins 13 and 14 on the X179 connector.
Important: Cut the onboard 120 Ω termination resistor on the Feather CAN board. The vehicle's CAN bus already has its own termination, and adding a second resistor will cause communication errors.
Serial Monitor
Open the Serial Monitor at 115200 baud to see live debug output showing FSD state and the active speed profile. Disable logging by setting enablePrint = false.