Designed using Kicad 8
Unlike harness box, OBD2-C doesn't use relay.
The purpose of it is to sniff CAN buses that are already present in OBD-2 port, similar to what white panda was doing in the past, but compatible with OBD-C, though often only diagnostic CAN is populated on OBD-2.
The device exposes three CAN buses out of OBD-C:
- CAN0 (3, 11)
- CAN1 is routed to the JST (pin 2,3) connector (can be connected .e.g to StepperServoCAN) and has optional 120ohm termination resistor (see jumpers). Alternatively, bus 1 can be rerouted using jumpers as a GMLAN (obd pin 1) as in white panda - but unlike white panda it uses single wire hack and is not tested
- CAN2 (pins 12, 13)
- CAN3 (pins 6, 14) - this one can be used e.g. as "ELM327" or vin reading in openpilot
https://www.csselectronics.com/cdn/shop/files/obd2-connector-pinout-socket.svg
Some notes regarding openpilot bus names mapping to STM32 peripherals and harness - (the indexes are not always consistent):
HARNESS_STATUS_NORMAL
openpilot | STM32F4 | Harness | WhitePanda |
---|---|---|---|
sbu1 | sbu2 | ||
sbu2 | sbu1 | ||
bus 0 | CAN1 | CAN0 | CAN1 |
bus 1 | CAN2 | CAN1 | CAN2 |
bus 1(obd) | CAN2 alt | CAN3 | GMLAN |
bus 2 | CAN3 | CAN2 | CAN3 |
HARNESS_STATUS_FLIPPED
openpilot | STM32F4 | Harness | WhitePanda |
---|---|---|---|
sbu1 | sbu1 | ||
sbu2 | sbu2 | ||
bus 0 | CAN3 | CAN0 | CAN1 |
bus 1 | CAN2 alt | CAN1 | CAN2 |
bus 1(obd) | CAN2 | CAN3 | GMLAN |
bus 2 | CAN1 | CAN2 | CAN3 |
+obd
means set_obd_multiplexing(True)
in openpilot aka panda.set_obd(True)
in panda lib aka set_can_mode(CAN_MODE_OBD_CAN2)
in panda firmware.
Confusing? Yes. Especially inside panda firmware.