democratize access to car decoder rings
Go to file
Willem Melching 1faf67c8ec fix crv steering_control message 2018-01-27 13:31:55 -08:00
generated fix crv steering_control message 2018-01-27 13:31:55 -08:00
generator fix crv steering_control message 2018-01-27 13:31:55 -08:00
.gitignore make opendbc import work, and ignore junk 2017-06-05 01:36:59 -07:00
README.md Update README.md 2017-08-05 16:05:02 -07:00
__init__.py make opendbc import work, and ignore junk 2017-06-05 01:36:59 -07:00
acura_ilx_2016_nidec.dbc Nidec radar: name change to RADAR_DIAGNOSTIC msg 2017-09-21 15:54:58 -07:00
acura_rdx_2018_can.dbc consistent can message names for supported Hondas 2018-01-24 18:47:36 -08:00
ford_cgea1_2_bodycan_2011.dbc ford cgea 1.2 2011 (#32) 2017-10-05 09:31:28 -07:00
ford_cgea1_2_ptcan_2011.dbc ford cgea 1.2 2011 (#32) 2017-10-05 09:31:28 -07:00
gm_global_a_chassis.dbc Fix Chevy Volt actuator signal parsing (#66) 2018-01-15 17:59:33 -08:00
gm_global_a_lowspeed.dbc Volt gen 2 support 2017-07-04 00:45:40 -07:00
gm_global_a_lowspeed_1818125.dbc Update gm_global_a_lowspeed_1818125.dbc (#34) 2017-10-09 21:07:55 -07:00
gm_global_a_object.dbc Volt gen 2 support 2017-07-04 00:45:40 -07:00
gm_global_a_powertrain.dbc Fix Chevy Volt actuator signal parsing (#66) 2018-01-15 17:59:33 -08:00
honda_accord_touring_2016_can.dbc Cleanup and corrections to the accord DBC 2017-10-14 12:33:41 -07:00
honda_civic_hatchback_ex_2017_can.dbc consistent can message names for supported Hondas 2018-01-24 18:47:36 -08:00
honda_clarity_hybrid_2018_can.dbc Cleanup duplicate message names 2018-01-24 12:15:36 -08:00
honda_crv_ex_2017_can.dbc consistent can message names for supported Hondas 2018-01-24 18:47:36 -08:00
honda_pilot_touring_2017_can.dbc consistent can message names for supported Hondas 2018-01-24 18:47:36 -08:00
hyundai_2015_ccan.dbc add hyundai 2015 (#63) 2017-12-28 11:28:20 -08:00
hyundai_2015_mcan.dbc add hyundai 2015 (#63) 2017-12-28 11:28:20 -08:00
hyundai_i30_2014.dbc add hyundai_i30_2014.dbc 2017-09-10 00:59:29 -07:00
mercedes_benz_e350_2010.dbc create mercedes e350 (2010) dbc (#47) 2017-12-21 13:28:19 -08:00
subaru_outback_2016_eyesight.dbc Add chffr metrics for cars 2017-09-10 02:23:08 -07:00
tesla_can.dbc Corrected MCU_clusterBacklightRequest (typo) 2017-11-04 09:07:25 -04:00
toyota_iQ_2009_can.dbc Created toyota iQ base plus reversed some signals (#48) 2017-11-04 18:26:15 -07:00
toyota_prius_2017_adas.dbc Toyota: changed dbc names 2017-10-10 12:21:50 -07:00
vw_golf_mk4.dbc Create vw_golf_mk4.dbc 2017-09-22 00:27:01 -07:00
vw_mqb_2010.dbc Create vw_mqb_2010.dbc 2017-09-30 23:40:46 -07:00

README.md

opendbc

The project to democratize access to the decoder ring of your car.

DBC file basics

A DBC file encodes, in a humanly readable way, the information needed to understand a vehicle's CAN bus traffic. A vehicle might have multiple CAN buses and every CAN bus is represented by its own dbc file. Wondering what's the DBC file format? Here a good overview.

How to start reverse engineering cars

opendbc is integrated with cabana.

Use panda to connect your car to a computer.

Good practices for contributing to opendbc

  • Comments: the best way to store comments is to add them directly to the DBC files. For example:

    CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
    

    is a comment that refers to signal LONG_ACCEL in message 490. Using comments is highly recommended, especially for doubts and uncertainties. cabana can easily display/add/edit comments to signals and messages.

  • Units: when applicable, it's recommended to convert signals into physical units, by using a proper signal factor. Using a SI unit is preferred, unless a non-SI unit rounds the signal factor much better. For example:

    SG_ VEHICLE_SPEED : 7|15@0+ (0.00278,0) [0|70] "m/s" PCM
    

    is better than:

    SG_ VEHICLE_SPEED : 7|15@0+ (0.00620,0) [0|115] "mph" PCM
    

    However, the cleanest option is really:

    SG_ VEHICLE_SPEED : 7|15@0+ (0.01,0) [0|250] "kph" PCM
    
  • Signal's size: always use the smallest amount of bits possible. For example, let's say I'm reverse engineering the gas pedal position and I've determined that it's in a 3 bytes message. For 0% pedal position I read a message value of 0x00 0x00 0x00, while for 100% of pedal position I read 0x64 0x00 0x00: clearly, the gas pedal position is within the first byte of the message and I might be tempted to define the signal GAS_POS as:

    SG_ GAS_POS : 7|8@0+ (1,0) [0|100] "%" PCM
    

    However, I can't be sure that the very first bit of the message is referred to the pedal position: I haven't seen it changing! Therefore, a safer way of defining the signal is:

    SG_ GAS_POS : 6|7@0+ (1,0) [0|100] "%" PCM
    

    which leaves the first bit unallocated. This prevents from very erroneous reading of the gas pedal position, in case the first bit is indeed used for something else.