You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					144 lines
				
				7.5 KiB
			
		
		
			
		
	
	
					144 lines
				
				7.5 KiB
			| 
								 
											8 years ago
										 
									 | 
							
								```
							 | 
						||
| 
								 | 
							
								                                                                                                        ;"   ^;     ;'   ",
							 | 
						||
| 
								 | 
							
								______/\\\\\\\\\\\____/\\\\\\\\\_______/\\\\\\\\\\\\\\\______/\\\\\\\\\\_____________/\\\____           ;    s$$$$$$$s     ;
							 | 
						||
| 
								 | 
							
								 _____\/////\\\///___/\\\///////\\\____\/\\\///////////_____/\\\///////\\\__________/\\\\\____          ,  ss$$$$$$$$$$s  ,'
							 | 
						||
| 
								 | 
							
								  _________\/\\\_____\///______\//\\\___\/\\\_______________\///______/\\\_________/\\\/\\\____         ;s$$$$$$$$$$$$$$$
							 | 
						||
| 
								 | 
							
								   _________\/\\\_______________/\\\/____\/\\\\\\\\\\\\_____________/\\\//________/\\\/\/\\\____        $$$$$$$$$$$$$$$$$$
							 | 
						||
| 
								 | 
							
								    _________\/\\\____________/\\\//______\////////////\\\__________\////\\\_____/\\\/__\/\\\____      $$$$P""Y$$$Y""W$$$$$
							 | 
						||
| 
								 | 
							
								     _________\/\\\_________/\\\//____________________\//\\\____________\//\\\__/\\\\\\\\\\\\\\\\_     $$$$  p"$$$"q  $$$$$
							 | 
						||
| 
								 | 
							
								      __/\\\___\/\\\_______/\\\/____________/\\\________\/\\\___/\\\______/\\\__\///////////\\\//__    $$$$  .$$$$$.  $$$$
							 | 
						||
| 
								 | 
							
								       _\//\\\\\\\\\_______/\\\\\\\\\\\\\\\_\//\\\\\\\\\\\\\/___\///\\\\\\\\\/_____________\/\\\____  _ $$$$$$$$$$$$$$$$
							 | 
						||
| 
								 | 
							
								        __\/////////_______\///////////////___\/////////////_______\/////////_______________\///_____| |  "Y$$$"*"$$$Y"
							 | 
						||
| 
								 | 
							
								                                                                                _ __   __ _ _ __   __| | __ _"$b.$$"
							 | 
						||
| 
								 | 
							
								                                                                               | '_ \ / _` | '_ \ / _` |/ _` |
							 | 
						||
| 
								 | 
							
								                                                                               | |_) | (_| | | | | (_| | (_| |
							 | 
						||
| 
								 | 
							
								                                                                               | .__/ \__,_|_| |_|\__,_|\__,_|
							 | 
						||
| 
								 | 
							
								                                                                               | |     A comma.ai product.
							 | 
						||
| 
								 | 
							
								                                                                               |_| (Code by Jessy Diamond Exum)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											7 years ago
										 
									 | 
							
								# Installing J2534 driver:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Download](https://github.com/commaai/panda/files/1742802/panda.J2534.driver.install.zip)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Depending on what version of windows you are on, you may need to separately install the WinUSB driver (see next section).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Installing WinUSB driver:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Installation automatically happens for Windows 8 and Windows 10 because the panda
							 | 
						||
| 
								 | 
							
								firmware contains the USB descriptors necessary to auto-install the WinUSB driver.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Windows 7 will not auto-install the WinUSB driver. You can use Zadig to install
							 | 
						||
| 
								 | 
							
								the WinUSB driver. This software is not tested on anything before 7.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								More details here:
							 | 
						||
| 
								 | 
							
								[WinUSB (Winusb.sys) Installation](https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/winusb-installation)
							 | 
						||
| 
								 | 
							
								[WCID Devices](https://github.com/pbatard/libwdi/wiki/WCID-Devices)
							 | 
						||
| 
								 | 
							
								[Zadig for installing libusb compatible driver](https://github.com/pbatard/libwdi/wiki/Zadig)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Using J2534:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								After installing the J2534 drivers for the panda, you can do... nothing.
							 | 
						||
| 
								 | 
							
								You first need to get a J2534 client that can load the drivers and talk to
							 | 
						||
| 
								 | 
							
								the panda for you.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A simple tool for testing J2534 drivers is DrewTech's 'J2534-1 Bus Analysis
							 | 
						||
| 
								 | 
							
								Tool' available in the 'Other Support Applications' section of their
							 | 
						||
| 
								 | 
							
								[Download Page](http://www.drewtech.com/downloads/).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											8 years ago
										 
									 | 
							
								# What is J2534?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								J2534 is an API that tries to provide a consistent way to send/receive
							 | 
						||
| 
								 | 
							
								messages over the many different protocols supported by the OBD II
							 | 
						||
| 
								 | 
							
								port. The place this is perhaps most obvious, is sending data over
							 | 
						||
| 
								 | 
							
								different protocols (each using unique packetizing methods) using the
							 | 
						||
| 
								 | 
							
								same data format.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For each PassThru Device that should be used with J2534 (in this case,
							 | 
						||
| 
								 | 
							
								the panda), a 'driver' has to be written that can be loaded by a
							 | 
						||
| 
								 | 
							
								client application wanting to send/receive data.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A lot of J2534 has good ideas behind it, but the standard has some odd choices:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* Platform Locked: Requires using the Windows Registry to find installed J2534 libraries/drivers. Drivers have to be DLLs.
							 | 
						||
| 
								 | 
							
								* Architecture Locked: So far there is only support for x86.
							 | 
						||
| 
								 | 
							
								* No device autodetect, and poor support for selecting from multiple devices.
							 | 
						||
| 
								 | 
							
								* Constant vague language about important behavior (small differences between vendors).
							 | 
						||
| 
								 | 
							
								* Most common differences become standard in later revisions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Why use J2534 with the panda?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								J2534 is the only interface supported by most professional grade
							 | 
						||
| 
								 | 
							
								vehicle diagnostics systems (such as HDS). These tools are useful for
							 | 
						||
| 
								 | 
							
								diagnosing vehicles, as well as reverse engineering some lesser known
							 | 
						||
| 
								 | 
							
								features.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# What parts are supported with panda?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [ ] **J1850VPW** *(Outdated, and not physically supported by the panda)*
							 | 
						||
| 
								 | 
							
								- [ ] **J1850PWM** *(Outdated, and not physically supported by the panda)*
							 | 
						||
| 
								 | 
							
								- [X] **CAN**
							 | 
						||
| 
								 | 
							
								- [X] **ISO15765**
							 | 
						||
| 
								 | 
							
								- [ ] **ISO9141** *(This protocol could be implemented if 5 BAUD init support is added to the panda.)*
							 | 
						||
| 
								 | 
							
								- [ ] **ISO14230/KWP2000** *(Could be supported with FAST init, 5baud init if panda adds support for 5bps serial)*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Building the Project:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											8 years ago
										 
									 | 
							
								This project is developed with Visual Studio 2017, the Windows SDK,
							 | 
						||
| 
								 | 
							
								and the Windows Driver Kit (WDK).
							 | 
						||
| 
								 
											8 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								The WDK is only required for creating the signed WinUSB inf file. The
							 | 
						||
| 
								 | 
							
								WDK may also provide the headers for WinUSB.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To build all the projects required for the installer, in Visual
							 | 
						||
| 
								 | 
							
								Studio, select **Build->Batch Build.** In the project list select:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **"panda"** *Release|x86*
							 | 
						||
| 
								 | 
							
								- **"panda"** *Release|x64*
							 | 
						||
| 
								 | 
							
								- **"panda Driver Package"** Debug|x86 (Note this inf file works with x86/amd64).
							 | 
						||
| 
								 | 
							
								- **"pandaJ2534DLL"** *Release|x86*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The installer is generated with [NullSoft NSIS](http://nsis.sourceforge.net/Main_Page).
							 | 
						||
| 
								 | 
							
								Use NSIS to run panda_install.nsi after building all the required projects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Before generating the installer, you must go to copy vscruntimeinfo.nsh.sample to
							 | 
						||
| 
								 | 
							
								vscruntimeinfo.nsh and follow the instructions to bundle in the Visual Studio C
							 | 
						||
| 
								 | 
							
								Runtime required by your version of Visual Studio. Without this runtime, the panda
							 | 
						||
| 
								 | 
							
								code will not work, so without this file, the installer will refuse to build.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Developing:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Edit and merge pandaJ2534DLL\J2534register_x64.reg to register your development J2534 DLL.
							 | 
						||
| 
								 | 
							
								- Add your output directory (panda\drivers\windows\Debug_x86) to your system PATH to avoid insanity.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ToDo Items:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Apply a style-guide and consistent naming convention for Classes/Functions/Variables.
							 | 
						||
| 
								 | 
							
								- Send multiple messages (each with a different address) from a given connection at the same time.
							 | 
						||
| 
								 | 
							
								- Implement ISO14230/KWP2000 FAST (LIN communication is already supported with the raw panda USB driver).
							 | 
						||
| 
								 | 
							
								- Find more documentation about SW_CAN_PS (Single Wire CAN, aka GMLAN).
							 | 
						||
| 
								 | 
							
								- Find example of client using a _PS version of a protocol (PS is pin select, and may support using different CAN buses).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Known Issues:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- ISO15765 Multi-frame TX: Hardware delays make transmission overshoot
							 | 
						||
| 
								 | 
							
								  STMIN by several milliseconds. This does not violate the requirements
							 | 
						||
| 
								 | 
							
								  of STMIN, it just means it is a little slower than it could be.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- All Tx messages from a single Connection are serialized. This can be
							 | 
						||
| 
								 | 
							
								  relaxed to allow serialization of messages based on their address
							 | 
						||
| 
								 | 
							
								  (making multiple queues, effectively one queue per address).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											8 years ago
										 
									 | 
							
								# Troubleshooting:
							 | 
						||
| 
								 | 
							
								troubleshooting:
							 | 
						||
| 
								 | 
							
								1. Install DrewTech J2534-1 Bus Analysis Tool
							 | 
						||
| 
								 | 
							
								http://www.drewtech.com/downloads/tools/Drew%20Technologies%20Tool%20for%20J2534-1%20API%20v1.07.msi
							 | 
						||
| 
								 | 
							
								2. Open DrewTech tool and make sure it shows "panda" as a device listed (this means registry settings are correct)
							 | 
						||
| 
								 | 
							
								3. When DrewTech tool attempts to load the driver it will show an error if it fails
							 | 
						||
| 
								 | 
							
								4. To figure out why the driver fails to load install Process Monitor and filter by the appropriate process name
							 | 
						||
| 
								 | 
							
								https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											8 years ago
										 
									 | 
							
								# Other:
							 | 
						||
| 
								 | 
							
								Panda head ASCII art by dcau
							 |