layout | title | section |
---|---|---|
default |
OpenXC Vehicle Interface Reference Design |
overview |
OpenXC is an API to your car - by installing a small hardware module to read and translate metrics from a car's internal network, the data becomes accessible from most Android applications using the OpenXC library. You can start making vehicle-aware applications that have better interfaces based on context, can minimize distraction while driving, are integrated with other connected services, and can offer you more insight into your car's operation. This website is the documentation for a reference design of an OpenXC-compatible Vehicle Interface - for more information on the platform in general, visit openxcplatform.com.
The Vehicle Interface (VI) is piece of hardware that connects to the car's CAN bus, translates proprietary CAN messages to the standard OpenXC message format and sends the output over a common interface like USB to a host device - this particular implementation has USB and Bluetooth.
Ford created this design and manufactured a small quantity to seed the developer community. If you have an idea for an OpenXC application and this hardware would help, make sure there aren't any known issues with the fit for the reference VI in your car.
<ul class="nav nav-tabs">
<li class="active"><a href="#app-devs" data-toggle="tab">For App Developers</a></li>
<li><a href="#firmware-devs" data-toggle="tab">For Firmware Developers</a></li>
<li><a href="#hardware-devs" data-toggle="tab">For Hardware Developers</a></li>
</ul>
<div class="tab-content">
<div class="active tab-pane" id="app-devs">
<p>The VI needs to be programmed with firmware before you can get data
from a car. You can use the <a href="https://github.com/openxc/vi-firmware/releases">emulator
firmware (zip file)</a> to test the data connection to a <a
href="http://openxcplatform.com/host-devices/index.html">host device</a>
(a computer, smartphone or tablet). To get data from a real car, grab one
of the <a href="http://openxcplatform.com/vehicle-interface/firmware.html">other
available firmwares</a>.
</p>
<p>Once you've downloaded a firmware file (it should be a version for the
"FORDBOARD" and have the ".bin" extension) programming the VI is simple -
follow the <a href="/firmware/programming/usb.html">USB programming
instructions</a>.
</p>
</div>
<div class="active tab-pane" id="firmware-devs">
<p>Besides using <a href="http://openxcplatform.com/vehicle-interface/firmware.html">binary
firmware for app developers</a>, you can build your own code to run on the
VI. You can use the <a href="http://vi-firmware.openxcplatform.com">official OpenXC VI
firmware</a> (the source for most binary firmware, e.g. those from Ford)
or start from scratch with a <a href="https://github.com/openxc/lpc17xx-starter">blank project</a>.</p>
<p>Alternatively, you can use one of a few lower level programming options
(some even allow in-circuit debugging). More details are available in the
<a href="/firmware/index.html">firmware page</a>.
</p>
</div>
<div class="active tab-pane" id="hardware-devs">
<p>This site contains complete documentation of the hardware,
design motivations, fabrication and testing plans. Every component is
released as open source hardware and the source files are available in the
<a href="https://github.com/openxc/reference-vi">openxc/reference-vi</a>
GitHub repository (along with the contents of this website).
</p>
</div>
</div>
The particular unit is a reference design for a "dongle" style vehicle interface that connects directly to the diagnostic port with no cable. Ford created this design as an iteration from the original, chipKIT-based vehicle interface with the goal to:
- Require no OBD-II cable to connect to the vehicle
- Be compact enough to sit directly on the OBD-II port and not hit the driver's knees
- Include Bluetooth by default
- Be powered from the vehicle and not drain the battery when left attached
- Provide 12v power from the vehicle to an external USB hub for other OpenXC hardware modules
This streamlined vehicle interface uses a ARM Cortex-M3 microcontroller (NXP's LPC1769), a dual-channel CAN transceiver from NXP, the RN-41 Bluetooth module from Roving Networks and includes a micro-USB port. The design also includes a 12v port (with a Molex connector) to power an external device from the car, and this port can be shut off with the car to avoid battery drain.
We also designed and prototyped a plastic housing for the board that allows it to be easily gripped and attached/detached from the OBD-II port underneath the steering wheel.
The device is not as compact as it could be, primarily because we design it to use only a 2-layer PCB (to make it more accessible for hobbyists). Depending on the placement and angle of the OBD-II port in your vehicle, the VI may protrude too much - we recommend one of the many available OBD-II extension cables if that's the case.
The current BOM total cost for the electrical components in 1,000 unit quantities is around $45.
- Reads from 2 different CAN buses simultaneously at up to 1Mbps per bus - by default CAN1 and CAN2-1 (according to the OpenXC naming scheme), with CAN2-2 available behind a solder jumper
- Can relay vehicle data at up to 250kbps over a Bluetooth connection
- Can relay vehicle data at up to 11Mbps over a USB connection
- Passes up to 6A of power from the vehicle to accessories
The electrical reference design was created by Bug Labs, contracted by Ford and in collaboration with Ford Research and Innovation engineers in both Palo Alto, CA and Dearborn, MI. For a full list of the contributors to this project, see the AUTHORS file.
Copyright (c) 2013 Ford Motor Company
This vehicle interface is open source hardware. The electrical and mechanical designs in this repository are available under the Creative Commons Attribution 4.0 International license.