AI-generated text still pending human review/editing.
ISO-TP transport ↗

How EV Charging Talks

People lump "EV charging protocols" together, but they live on completely different wires. Only one of the three, CHAdeMO, puts decodable traffic on a CAN bus. Here's why a CAN adapter sees CHAdeMO and nothing else.

ProtocolWhat it isPhysical layerOn CAN?
SAE J1772AC connector + pilot signalingAnalog PWM on Control PilotNo
ISO 15118"V2G" smart / Plug & ChargePLC (HomePlug GP) over CP lineNo
CHAdeMODC fast chargingDedicated 500 kbit/s CANYes

SAE J1772, Analog Pilot Signaling not CAN

J1772 (the "J-plug") is the North-American AC connector. The charging conversation runs over two analog wires, not digital messaging:

Control Pilot: duty cycle to amps

For most of the range the rule is linear: available A = duty% × 0.6. Above 85% a second, steeper linear rule takes over, and past 96% it stops encoding a number at all.

CP, 1 kHz, ~50% duty ≈ 30 A available
Duty cycleMeaning
10% – 85%Available current = duty × 0.6 A (e.g. 50% → 30 A)
85% – 96%Available current = (duty − 64) × 2.5 A (e.g. 90% → 65 A)
96% – 97%80 A
5%Digital communication required (ISO 15118 / DIN handshake)
< 3% or > 97% (incl. steady +12 V)No charging allowed / not ready

Pilot States

A 12 V, not connected → B 9 V, connected, not ready → C 6 V, charging → D 3 V, charging, ventilation

Why a CAN tap sees nothing: the entire J1772 handshake is voltage levels and a PWM duty cycle on two analog pins. There are no CAN frames. You'd need an oscilloscope on CP/PP, not a CAN adapter.

ISO 15118, "V2G" Smart Charging not CAN

ISO 15118 is the digital layer behind Plug & Charge (the car authenticates and bills automatically) and high-power DC under CCS. It reuses J1772's CP wire, but instead of a simple PWM it runs a full networking stack through that wire:

ISO 15118 stack, top to bottom
EXI XML app msgsSessionSetup…
TLS / TCPPlug & Charge certs
IPv6link-local
HomePlug Green PHYPLC over CP wire

Why a CAN tap sees nothing: ISO 15118 is Ethernet- over-powerline with IPv6 and TLS on top. It never touches the vehicle CAN bus, so a CAN adapter can't decode it. Sniffing it needs a Green PHY / HomePlug interface.

CHAdeMO, DC Fast Charging on CAN

CHAdeMO is the one that puts real, decodable traffic on a CAN bus. The DC charge connector carries its own dedicated CAN at 500 kbit/s, separate from the vehicle's main bus, using fixed 11-bit IDs. The car and charger negotiate limits, then trade dynamic status every ~100 ms while current flows.

Vehicle → Charger 0x102 (sent ~10×/s during charging)
02proto#
3D 01target V (LE)
78req A
00faults
01status
32SoC %
00-
Charger → Vehicle 0x109 (sent ~10×/s during charging)
02proto#
3B 01present V (LE)
77present A
00-
05status
00rem 10s
14rem min

Message Set

IDDirMessageKey fields
0x100V→CCapabilitymax battery voltage, charged-rate reference
0x101V→CCharging timemax / estimated time, battery capacity
0x102V→CSession (dynamic)proto#, target V, requested A, faults, status, SoC
0x108C→VAvailable outputavailable V / A, threshold V
0x109C→VStatus (dynamic)proto#, present V / A, status, remaining time
0x118, 0x200–0x209bothDischarge / V2X (v2.0)bidirectional, name + raw only here

The Exchange

1 Capability (0x100/0x101 ↔ 0x108) → 2 Charging loop (0x102/0x109 @ 100 ms) → 3 Stop (normal-stop / stop-control bit)

Fault & Status Bitfields

The dynamic messages each carry a status byte the tab renders as labeled chips:

Revision drift: CHAdeMO 0.9 / 1.0 / 2.0 shuffle a few bytes. The CHAdeMO tab decodes the stable fields, always surfaces the protocol-number byte so you know which revision you're watching, and shows the rest raw. Tap the charge connector's dedicated bus (500k), not the vehicle's main bus, or start Demo mode and open the CHAdeMO tab to replay a looping handshake + charging ramp with no hardware.