[ DIY OBD-II Diagnostic Cable ]

What this is: a ~30cm / 12″ pigtail cable terminating in a
standard OBD-II J1962 male connector.  It plugs into the diagnostic
socket under the dash on any post-1996 vehicle and exposes the
individual pins as bare wires you can hook up to a SocketCAN adapter,
a logic analyser, or a Raspberry Pi CAN HAT.

The point is to use it with general-purpose tooling
(can-utils, python-can,
SavvyCAN, etc.) rather than a commercial scan tool.  Originally built
11.2023; reviewed and updated 05.2026.

[ Parts ]

OBD-II J1962 Male Connector to Open Plug Wire
       (any "OBD-II pigtail" cable works -- the linked one happens to
       have decent wire gauge and the connector latches cleanly)

  — SocketCAN-capable adapter to wire the other end to.  Options:
       - Waveshare 2-CH CAN HAT for a Pi (two MCP2515s, lets you
         talk to CAN-C and CAN-IHS simultaneously)
       - Any USB-CAN adapter that exposes itself as SocketCAN
         (Korlan USB2CAN, PCAN-USB, gs_usb-class adapters)
       - Plain MCP2515 module + Pi GPIO if you only need one bus

  — Heatshrink + multimeter for verifying continuity before you
       plug into the vehicle.

[ Pin assignments ]

OBD-II J1962 male connector with pigtail leads
  PIN   COLOUR*       SIGNAL
  ----- ------------- --------------------
  PIN 6  Green        CAN-C high  (HS-CAN)
  PIN 14 Brown-white  CAN-C low
  PIN 3  Red          CAN-IHS high (FCA)
  PIN 11 Pink         CAN-IHS low  (FCA)

  PIN 4  Orange       Chassis ground
  PIN 5  Yellow       Signal ground  (use this for your SocketCAN
                                      adapter's signal-ground reference)
  PIN 16 (n/a here)   +12V battery power -- NOT brought out on this
                                          cable; pull from a fuse box
                                          tap if you need to power
                                          the adapter from the vehicle

  * Wire colours are the cable manufacturer's choice and are NOT
    standardised by SAE J1962.  Verify with a multimeter against the
    pin numbers on the connector shell before trusting them.

PIN 6 / PIN 14 are SAE J1962–standard CAN High and CAN Low for the primary HS-CAN bus — on FCA / Stellantis platforms that maps to CAN-C (500 kbps powertrain bus). PIN 3 and PIN 11 are optional/manufacturer-defined J1962 pins; FCA uses them for the CAN-IHS body / comfort bus (125 kbps). Other manufacturers use these pins for different purposes — this assignment is JEEP / RAM / Chrysler / Dodge specific.

For signal ground, use PIN 5 (signal ground) for the CAN transceiver reference. PIN 4 (chassis ground) works as a fallback but mixing chassis and signal ground paths through the same adapter can introduce noise on long pigtails.

[ DLC pinout diagram (2021 Wrangler) ]

Reference diagram for the DLC pinout on a 2021 Wrangler. Other JEEP platforms reuse the same J1962 layout, but always cross-reference against the FSM or a known-good factory diagram for your specific year / model before wiring up — FCA does shuffle non-required pins between platforms.

DLC pinout diagram for 2021 JEEP Wrangler

[ Use ]

Once the cable is wired into a SocketCAN adapter, the bus comes up like
any other socketcan interface.  Typical first-session sequence:

    # Bring CAN-C up at 500 kbps
    sudo ip link set can0 up type can bitrate 500000

    # Bring CAN-IHS up at 125 kbps (if using a 2-CH HAT or second adapter)
    sudo ip link set can1 up type can bitrate 125000

    # Sniff all traffic on CAN-C
    candump can0

    # Watch a specific message ID (e.g. $122 ignition state on CAN-IHS)
    candump can1,0122:0FFFF

    # Send a frame (UDS extended-session request to the BCM)
    cansend can0 620#0210030000000000

From here, the rest of the
Car Hacking landing page applies -- script
catalog, bus & message reference, UDS write operations guide, etc.

For a virtual-CAN dry run before connecting to a real vehicle, see the
Python CAN Bus Lab Guide
on the Guides & Tutorials page.

[ SGW caveat for 2018+ FCA / Stellantis ]

On 2018+ FCA / Stellantis vehicles the Secure Gateway Module sits between the OBD-II port and the rest of the CAN bus. Read-only diagnostics (Mode 01 PIDs, Service 0x22, VIN, stored DTCs — Diagnostic Trouble Codes, the standardised fault codes like P0420 or U0101 that ECUs store when something goes wrong) pass through unauthenticated; writes (Service 0x2F IOControl, Service 0x2E WriteDataByIdentifier, Service 0x31 RoutineControl, Service 0x04 ClearDTCs, etc.) return NRC 0x33 (securityAccessDenied) or silently drop.

This cable plugs into the OBD-II port, so on 2018+ vehicles it inherits the SGW gating: full reads, no writes. If you need write access on a 2018+ vehicle without paying for an AutoAuth subscription, the 13-way connectors behind the glovebox are the unblocked alternative — they sit inside the SGW boundary, so traffic originating from there reaches the internal CAN-C and CAN-IHS buses directly. See the SGW reference for the full picture and bypass-cable options.

[ Safety ]

  - Verify continuity before plugging in.  A bridged short
    between PIN 16 (+12V) and any other pin will trip a fuse at best,
    damage your adapter at worst.

  - Don't power the Pi off PIN 16 unless you know what you're doing.
    PIN 16 is hot whether the ignition is on or not.  A Pi left running
    indefinitely will eventually flatten the vehicle battery, and a Pi
    that draws too much during a crank brown-out can corrupt its SD
    card.  See the Example CANBus dev stack
    page for the Zero2Go Omni mitigation.

  - Writes can have real consequences.  Stuck immobiliser,
    bricked module, ABS fault that needs a dealer reflash.  Always
    sniff first, write second; bench-test on a spare module before
    touching a real vehicle wherever possible.

  - The OBD-II port shares ground with the vehicle chassis.
    If your adapter is also USB-connected to a laptop that's plugged
    into mains power, you've created a ground loop between the vehicle
    and your house wiring.  Use a USB isolator or run the laptop on
    battery while connected.

[ See also ]