概要

J2534是一种针对与射频相关的ECU进行闪存编程的概念,而不用考虑ECU使用的通信协议。其目的是所有类型的ECU都应当只需一个工具(硬件设备),通常被称为通过式设备。J2534设备和ECU之间的连接是SAE J1962连接器。J2534硬件设备需要连接到一台装有来自车辆厂商的应用程序编程接口的标准电脑(图1)。电脑和J2534硬件设备之间的连接方式取决于接口工具制造商,但是USB可能是最常见的形式。J2534 API DLL由硬件工具开发人员提供,用来处理与电脑的通信。J2534文档对J2534工具的硬件和软件的需求描述有限。支持的通信协议包括:ISO9141、ISO14230 (KWP2000)、J1850、CAN (ISO11898)、ISO15765和SAE J2610。2005年开始支持J1939。

图1. J2534设置

背景

车辆变得越来越复杂,几乎每个功能都由电子控制单元(ECU)进行控制。ECU经常连接到通信总线,以便能够相互之间共享数据。最常见的协议是CAN,但是还存在其它协议。有多少家车辆厂商,几乎就有多少种不同的通信协议。每家车辆厂商都提供工具用于对其产品进行分析和二次编程,这种工具经常价格昂贵。这使得汽车、客车或卡车修理店很难分析和修理所有类型的车辆。

美国环境保护署(EPA)和加州空气资源管委会(ARB)一直在尝试让车辆厂商为配件市场支持共同的射频相关服务。美国汽车工程师协会(SAE)在2002年建立了J2534标准,以推动EPA和ARB的工作。

硬件需求

J2534硬件在车辆ECU和个人电脑之间充当网关的角色。这种通过式设备把电脑发送的报文转换为车辆ECU中所用协议的报文。J2534支持下列协议:

设备厂商可以自由选择电脑和J2534硬件之间的连接,例如RS-232、USB或者可能是无线接口。车辆厂商的应用编程不依赖于硬件连接。所以,可以使用任何设备对任何厂商的任何车辆进行编程。

J2534硬件和车辆之间的连接应当是SAE J1962连接器(图2),也称为OBDII连接器。J2534设备和车辆之间线缆的最大长度为5米。如果车辆厂商不使用J1962连接器,那么必须提供用于连接的必需信息。

图2. J1962公接头(左图)和J1962母接头(右图)

J2534硬件接口应当能够为J1962连接器提供5到20伏特之间的电压。电源应使用一款引脚为6、9、11、12、13或14的连接器,且应当可以在软件中进行选择。最大供电电流是200毫安,校正时间应在1毫秒内。

J2534硬件接口应当有足够内存来缓存4Kb的发送报文和4Kb的接收报文。处理器速度必须够快,以便处理所有报文,从而不会丢失任何报文。

软件需求

使用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中定义的函数构成。请参见下方表1。

函数 说明
PassThruConnect 建立与协议通道的连接
PassThruDisconnect 终止与协议通道的连接
PassThruReadMsgs 从协议通道读取报文
PassThruWriteMsgs 向协议通道写入报文
PassThruStartPeriodicMsg 在协议通道上以指定的时间间隔开始发送报文
PassThruStopPeriodicMsg 停止周期性报文
PassThruStartMsgFilter 开始过滤协议通道上传入的报文
PassThruStopMsgFilter 停止过滤协议通道上传入的报文
PassThruSetProgrammingVoltage 在特定的引脚上设置编程电压
PassThruReadVersion 读取DLL和API的版本信息
PassThruGetLastError 获取最后一个错误的文本描述
PassThruIoctl 通用的I/O控制函数,用于读写协议配置参数(例如初始化、波特率和编程电压等)。

表1. J2534函数说明

发送的第一个命令是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中找到函数。

原文链接:https://www.kvaser.cn/about-can/can-standards/j2534/

SAE J2534介绍的更多相关文章

  1. SAE J2534 Pass-Thru API

    Connects to the OBDII J1962 DLC and supports the following protocols. 1 CAN2 Single Wire2 J1850PWM+ ...

  2. J2534 Pass-Thru Vehicle Programming ( SAE J1962 connector and Protocol )

    SAE J1962—Diagnostic Connector SAE J1850—Class B Data Communications Network Interface SAE J1939—Tru ...

  3. 关于Vector CANoe的讨论

    默认排序​ 踩猫尾巴 汽车电子攻城狮 27 人赞同了该回答 好像是很久以前的问题啊,为什么会现在收到邀请. 我觉得 @lijuqqkiko 介绍的足够啦. 我再额外发散一点吧. 目前在CAN总线测试和 ...

  4. CarDAQ-Plus

    Overview CarDAQ-Plus is the most validated and accepted J2534 device in the world. It has been on th ...

  5. How to do if the GM MDI cant connect with the software

    When you use GM MDI on your laptop , you may meet some troubles . Such as it cant communicate with t ...

  6. [异常解决] 初玩SAE遇到的小问题——注册&创建项目+MyEclipse装插件直接部署+一个简单的JSP部署实现

    ① 新浪SAE快速上手教程:http://jingyan.baidu.com/season/43090 上面一个链接是针对PHP的相关介绍,如果用java还有点不一样,具体请看新浪SAE官网:http ...

  7. 新手在sae部署程序容易忽略的一个细节

    从来没用过这类云空间服务,尝了下鲜试用一下sae,但是部署的时候发现问题了,各种404..各种无奈啊..虽然百度无数篇介绍,但是都千篇一律没什么启发.. 但是巧在我部署的应用有个欢迎页面,点击链接的时 ...

  8. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  9. 极速地将git项目部署到SAE的svn服务器上

    本文最初发布于我的个人博客:http://jerryzou.com/posts/gitForSAE/ 我花了一些时间自己写了一个能够极速地将一个git项目部署到SAE的svn服务器上的脚本.代码不是复 ...

随机推荐

  1. 杂项-DTO:DTO(数据传输对象)

    ylbtech-杂项-DTO:DTO(数据传输对象) 数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据访问对象从数据 ...

  2. SpringBoot使用注解方式整合Redis

    1.首先导入使用Maven导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <a ...

  3. 03_Hibernate关系映射

    关系映射? Hibernate的主要目的就是JAVA程序员可以随心所欲的使用对象编程思维来操作数据库.一些数据库表的关系我们应该可以通过hibernate实现,比如数据库中用到的主外键关系,还有一些与 ...

  4. Mybatis Plus 入坑(含最新3.X配置)

    简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 使用它可以简化单表的操作, 节省开发时间, 国人 ...

  5. C#获取七牛云token/删除七牛云图片接口

    // 获取七牛token public ApiResponse GetQiniuToken(QiniuToken req) { try { Mac mac = new Mac(req.AccessKe ...

  6. 全栈之路-杂篇-前端Http请求封装优化

    在项目开发过程中,代码的封装是很有必要的,我觉得这是程序员进阶的一个重要的技能,不会封装代码,你的代码看起来乱的一批,基本上不能维护,像一次性塑料袋一样,用完一次就失去了价值,这同时也会无缘无故的增加 ...

  7. BZOJ 1822[JSOI2010]Frozen Nova 冷冻波

    网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...

  8. utils02_使用github创建一个远程仓库

    1.注册github账号 https://github.com/ 2.第一次登陆需要创建一个仓库 3.在本地生成密钥和公钥 ssh-keygen -t rsa 会在当前用户下生成2个文件就是公钥和密钥 ...

  9. sas正则式之prxparen

    sas正则式之prxparen 今天还是要继续正则式的内容,这周的内容是prxparen函数,这个函数我个人觉得特别有用,是因为他和"|"结合使用可以同时容纳很多种情况的字符串. ...

  10. 2019.10.26 csp-s模拟测试88 反思总结

    今天的主人公是什么? 60.1K!!!! 先扔代码再更新防止我等会儿一上头不打算写完题解 T1: #include<iostream> #include<cstdio> #in ...