2023-06-05
一文读懂汽车SAE J2534诊断协议
作者:triv 点击:665
SAE J2534 协议
协议概要
SAE J2534是一种汽车诊断协议,许多主机厂的诊断软件以及接口设备制造商都支持该协议。它是一种针对与射频相关的ECU进行闪存编程的概念,而不用考虑ECU使用的通信协议。其目的是所有类型的ECU都应当只需一个工具(硬件设备),通常被称为通过式设备。
J2534设备和ECU之间的连接是SAE J1962连接器。J2534硬件设备需要连接到一台装有来自车辆厂商的应用程序编程接口的标准电脑(图1)。电脑和J2534硬件设备之间的连接方式取决于接口工具制造商,但是USB可能是最常见的形式。J2534 API DLL由硬件工具开发人员提供,用来处理与电脑的通信。支持的通信协议包括:ISO9141、ISO14230 (KWP2000)、J1850、CAN (ISO11898)、ISO15765和SAE J2610。2005年开始支持J1939。
![图片](static/picture/20230605153638_48171.jpg)
协议背景
汽车所具备的功能通常都由电子控制单元(ECU)进行控制,ECU连接到通信总线以便共享数据。不同的车辆厂商使用不同的通讯协议,每家车辆厂商都提供工具用于对其产品进行分析和二次编程,这造成了工具价格高昂,也使得汽车、客车或卡车修理店很难分析和修理所有类型的车辆。
J2534是由SAE(汽车工程师协会)在2002发布,并由美国环境保护署(EPA)授权用于汽车ECU重新编程的接口标准。目的是创建一个API(应用程序编程接口),能被所有的汽车制造商采用,允许独立的售后市场(IAM)具备重新编程ECU的能力,而无需特殊的经销商专用工具。
硬件需求
J2534硬件在车辆ECU和个人电脑之间充当网关的角色。这种通过式设备把电脑发送的报文转换为车辆ECU中所用协议的报文。J2534支持下列协议:
◉ ISO9141
◉ ISO14230 (KWP2000)
◉ J1850
◉ ISO11898
◉ ISO15765
◉ SAE J2610
◉ J1939(从2005年开始)
设备厂商可以自由选择电脑和J2534硬件之间的连接,例如RS-232、USB、甚至包括无线接口。车辆厂商的应用编程不依赖于硬件连接。所以,可以使用任何设备对任何厂商的任何车辆进行编程。
J2534硬件和车辆之间的连接应当是SAE J1962连接器(图2),也称为OBDII连接器。J2534设备和车辆之间线缆的最大长度为5米。如果车辆厂商不使用J1962连接器,那么必须提供用于连接的必需信息。
![图片](static/picture/20230605153705_39859.jpg)
软件需求
使用J2534为射频相关的ECU进行编程可以在装有Win32操作系统(Windows 95或更新的版本)的电脑上完成。
每家车辆厂商都将有其自己的API软件用来对其车辆进行分析和编程。如果他们的车辆只使用一种协议(例如ISO 9141),那么应用程序无需支持任何其它协议。这个应用程序必须采用J2534 API中的函数,这一点非常重要。
这个应用程序将拥有应用程序所支持ECU的全部信息。这个应用程序还包含一个用户界面,在该界面中,可以根据ECU和要执行的操作进行选择。
想要对来自不同厂商车辆进行分析和重新编程的汽车维修店必须拥有每家厂商的API。这个API可以从因特网下载,或者从CD和DVD进行安装。这个API的提供方式取决于厂商,但是他们对购买API的客户(维修店)进行收费。每家厂商之间的价格相差很大,一年的订阅费用在75美元和2500美元之间。
每个制造商的J2534工具(硬件设备)都必须有一个DLL文件,其中包含与电脑进行通信的函数和例程。然后DLL文件被加载到车辆厂商的应用程序中。J2534工具中的函数被链接到应用程序中一个相应的函数。DLL文件还包含用于在J2534工具和电脑之间进行连接(RS-232和USB等)的例程。
目的是每种J2534工具都应能够与J2534标准支持的所有协议进行通信。车辆厂商提供的应用程序使用J2534标准中描述的命令来连接到硬件工具(任何品牌)。连接和初始化为硬件工具提供所用协议的信息。此后,硬件工具负责采用合适的相关协议来管理与车辆的连接。电脑应用程序将以早期确定的协议格式将报文发送到硬件工具,硬件工具缓存报文并按照接收到的次序发送报文。
J2534应用程序编程接口(API)
J2534 API包含许多用于通信的函数,硬件工具和车辆厂商应用程序都必须支持这些函数。对于电脑应用程序开发人员来讲,这意味着所有命令和报文都必须使用API中定义的函数构成,请参见下表。
![图片](/upload/system/image/20230605/20230605153716_42694.jpg)
发送的第一个命令是PassThruConnect,它在电脑应用程序和J2534硬件工具之间建立连接。这个命令包含的信息有:使用的协议、标准或扩展CAN标识符或者是否使用ISO15765。命令还包含一个通道标识,将用于所有后续的通信。如果连接成功,将返回STATUS_NOERROR值,这个值指示函数已经成功执行。在发送任何报文之前,都必须进行初始化。函数PassThruIoctl用于初始化,需要设置各种参数,例如节点地址、波特率或协议特定的参数。
从电脑应用程序发送的所有报文都具有相同的结构,其中包含:协议类型(例如J1850、CAN和J9141)、接收报文状态、发送报文标志、接收到的报文的时间戳(微秒)、数据大小(以字节为单位)、额外数据索引(接收到的报文中额外数据的起始位置,即IFR、CRC和检验和)和最后但不是最小的数据字节数组(接收到的报文)。如果在连接时选择了这项特性,可以使用ISO15765命令发送超过8字节的CAN报文。
一些ECU发送报文间隔时间很短的大量报文。可以设置过滤函数PassThruStartMsgFilter来阻止或传递报文。这将减少硬件工具和电脑之间需要发送的报文数。报文首先与一个掩码进行逻辑与操作,这样可以只比较标识符的一些重要位。然后,经过逻辑与操作的报文将与一个特定的模式进行比较。
J2534 API DLL
J2534 API DLL为API函数和硬件工具之间提供链接。因此电脑应用程序不必关注电脑和硬件工具之间使用哪种通信协议。每家硬件工具厂商都有名称唯一的DLL文件。这样,电脑上的软件程序可以区分连接到哪个硬件工具。重要的是,硬件工具的固件开发人员需要遵循API并使用与J2534描述中完全同名的函数。否则,在进行链接时,电脑应用程序将无法在DLL中找到函数。
Kvaser 与 J2534
Kvaser驱动程序安装包随Kvaser硬件免费提供,该软件支持J2534,下面是操作步骤。
首先你需要考虑使用哪些协议,然后查找相关协议基础知识和该协议的操作顺序。要访问Kvaser的J2534 DLL,你需要安装CANlib驱动程序,请确保选择安装“J2534驱动程序”(默认设置)。
![图片](static/picture/20230605153729_34068.jpg)
这将根据标准安装J2534 DLL和设置Windows注册表。如果你需要配置DLL,可通过Kvaser的J2534 Options Tool(选项工具)进行配置,以及通过“Tools”菜单下的Kvaser Device Guide (Kvaser设备指南)轻松访问:
![图片](static/picture/20230605153741_32553.jpg)
![图片](static/picture/20230605153749_23952.jpg)
你可通过该程序执行一些操作,例如启用运行记录以及J2534(如已启用)记录文件的存放位置。此文件将记录包含你正在使用的DLL、你连接的通道以及所有错误状态,这些信息将帮助Kvaser技术人员处理问题。
![图片](static/picture/20230605153759_52991.jpg)
J2534选项工具还将显示J2534 DLL的安装位置(可在Windows注册表中配置;此工具中的所有选项都保存到此注册表中)。
在已安装的DLL旁边是非常重要的自述文件。现在要做的第一件事是查看自述文件。如果将CANlib驱动程序安装到默认路径,则可以在C:Program FilesKvaserDriversj2534api-readme.txt 处找到自述文件。本自述文件包含有关Kvaser为此标准所做更新的最新信息,以让API和CANlib完全兼容。自述文件中的信息很重要,这些信息会随着Kvaser产品的性能不断更新。
然后你就可以加载DLL到你的应用环境中并开始开发。请注意检查API返回的所有状态代码,如果显示出任何错误,请调用PassThruGetLastError()以获取错误的细节描述。完成这一系列的操作后,你就可以使用Kvaser设备,通过任何安装Win32(或Win64)操作系统的电脑诊断车辆!