CAN总线及SAE J1939协议应用程序分析所对应的驱动文件

合集下载

CAN 总线的特点及 J1939 协议通信原理、内容和应用

CAN 总线的特点及 J1939 协议通信原理、内容和应用
1 CAN 总线特点及其发展
控制器局域网络(CAN)是德国 Robert bosch 公司在 20 世纪 80 年代初为汽车业开发的一种串行数据通 信总线。CAN 是一种很高保密性,有效支持分布式控制或实时控制的串行通信网络。CAN 的应用范围遍及 从高速网络到低成本底多线路网络。在自动化电子领域、发动机控制部件、传感器、抗滑系统等应用中, CAN 的位速率可高达 1Mbps。同时,它可以廉价地用于交通运载工具电气系统中,如灯光聚束、电气窗口 等,可以替代所需要的硬件连接。它采用线性总线结构,每个子系统对总线有相同的权利,即为多主工作 方式。CAN 网络上任意一个节点可在任何时候向网络上的其他节点发送信息而不分主从。网络上的节点可 分为不通优先级,满足不同的实时要求。采用非破坏性总线裁决技术,当两个节点(即子系统)同时向网络 上传递信息时,优先级低的停止数据发送,而优先级高的节点可不受影响地继续传送数据。具有点对点、 一点对多点及全局广播接收传送数据的功能。
CAN 总线
节点 1 节点 2 节点 3 节点 4
PC 机
图 2 CAN 局域网 软件的编写主要包括对寄存器的配置、硬件初始化、中断调用、数据通信几大模块。中断调用中包括 数据中的中断接收、中断发送,以及错误处理、报警等模块。通信模块又分为数据的发送、接收、请求等。 综上所述,J1939 通信协议解决了如下问题。 (I)优先权问题。如自动换挡要求减油门,巡航控制同时要求增油,而 ASR 则要求减油门以维持驱动 轴的低扭矩。根据重要程度,则应确定换挡优先,协议能定义各个子系统的优先权顺序。 (2)灵活性问题。因为各个子系统都是不同类型的控制系统,网络应具备将各个子系统有机地融合在 一起的能力。 (3)可扩展性。即需要增加新的子系统时,不需要对基本系统作修改。 (4)独立性。每个子系统都可以独立工作,某个子系统出现故障时并不影响其他系统的正工作。 (5)为满足不同控制系统的要求,应具有高的数据传输速率带宽,具有通用的故障诊断接口诊断协议。

CAN总线论文:基于SAE J1939协议的发动机参数显示系统研究

CAN总线论文:基于SAE J1939协议的发动机参数显示系统研究

CAN总线论文:基于SAE J1939协议的发动机参数显示系统研究【中文摘要】能源和环境是当今社会发展的两大主要问题,随着经济的发展,车辆逐年快速的增长,能源和环境问题变得更加的严峻。

汽车的电子化有许多优势,如无污染,高效率,安全及结构简单等,这对环境和能源来说是一个好的方向。

车辆总线技术只是众多技术的一个方面,运用汽车总线系统可以建立多个子网络,它有可靠的功能和安全的信息传递都是依赖于子系统,基于CAN总线的网络是使子系统相互合作的最理想的方法。

有了CAN协议并不能构成一个完整的系统,还需要选择合适的高层协议来支持,这个高层协议不仅用来进行网络连接,而且应该能够进行网络管理和处理各种应用数据,J1939就是这样的高层协议。

德国某公司研究出了协议栈,为用户提供了一个接口,使其不必花大量精力来研究SAE J1939协议的相关细节,给基于J1939协议的开发带来了便利。

国内的一些企业和机构也对SAE J1939的研究十分感兴趣,纷纷进行相关的开发和研究,实现了一些功能,研发出很多新的产品,促进了SAE J1939协议的发展。

车辆的信息显示系统是人机交互界面,提供了各种相关的参数和状态,以便实行故障检测排除等应用,随着汽车电子技术和仪器仪表技术的发展,很多高精度、美观实用的信...【英文摘要】Energy and environment is today’s two major problems with social development, along with economicdevelopment, the numbers of vehicles are rapid growth year by year, energy and environmental problems become serious day by day. Automotive electronic has many advantages, such as less pollution, high efficiency, safety and simple structure. this is a good direction to the environment and energy. Vehicle-bus technology is only one aspect of many technologies, the use of automotive bus systems can create multipl...【关键词】CAN总线 SAE J1939协议参数显示系统【英文关键词】CAN SAE J1939 parameter display apparatus 【目录】基于SAE J1939协议的发动机参数显示系统研究摘要4-6Abstract6-7第1章绪论10-13 1.1 项目研究背景10-11 1.2 国内外发展现状11 1.3 论文的主要内容11-13第2章系统涉及的基础理论与关键技术13-23 2.1 CAN 总线13-17 2.2 SAE J1939 协议分析17-20 2.3 软件工程20-22 2.4 本章小结22-23第3章发动机参数显示系统架构研究23-29 3.1 发动机参数显示系统功能设计23-24 3.2发动机参数显示系统结构设计24-27 3.2.1 硬件结构设计24-25 3.2.2 软件结构设计25-27 3.3 发动机参数显示系统采用的设计方法27-28 3.4 本章小结28-29第4章发动机参数显示系统硬件结构29-41 4.1 硬件设计思想29 4.2 基本硬件模块设计29-33 4.3 通信模块硬件接口设计33-40 4.4 本章小结40-41第5章发动机参数显示系统软件设计41-62 5.1 软件设计思想41 5.2 软件环境的搭建41-45 5.2.1 嵌入式操作系统41-42 5.2.2 交叉编译环境42-43 5.2.3Bootloader43-44 5.2.4 Linux 内核移植44-45 5.2.5 文件系统45 5.3 通信系统软件设计45-54 5.4 基于MiniGUI 的图形界面设计54-59 5.5 系统测试与分析59-61 5.6 本章小结61-62第6章总结与展望62-64 6.1 总结62 6.2 展望62-64参考文献64-67致谢67。

saej1939协议(中文)

saej1939协议(中文)

竭诚为您提供优质文档/双击可除saej1939协议(中文)篇一:saej1939协议saej1939协议_综述(转载)发表于20xx/10/2611:16:06saej1939协议是由美国汽车工程师协会——卡车和公共汽车电气电子委员会下的卡车和公共汽车控制和通讯网络分委员会制定的高层can网络通讯协议。

它主要用于为重型道路车辆上电子部件间的通讯提供标准的体系结构[1]。

1saej1939协议构成文件saej1939协议包括如下几部分内容:saej1939-11物理层,250kbits/s,屏蔽双绞线saej1939-13物理层,离线诊断连接器saej1939-15简化的物理层,250kbits/s,非屏蔽双绞线saej1939-21数据链路层saej1939-31网络层saej1939-71车辆应用层saej1939-73应用层-诊断saej1939-81j1939网络管理协议-----------------------------------------------------------------------------------2各层协议的功能2.1物理层saej1939的物理层规范包含saej1939-11(物理层,250kbits/s,屏蔽双绞线)、saej1939-15(简化的物理层,250kbits/s,非屏蔽双绞线)和saej1939-13(物理层,离线诊断连接器)三部分。

其中saej1939-11和saej1939-15给出了物理层为屏蔽双绞线和非屏蔽双绞线时的网络物理描述、功能描述、电气规范、兼容性测试、总线错误讨论。

而saej1939-13(物理层,离线诊断连接器)则定义了离线诊断连接器的通用需求、性能需求和物理需求。

2.2数据链路层saej1939的数据链路层在物理层之上提供了可靠的数据传输功能。

通过数据链路层的组织,发送的can 数据帧具有必需的同步、顺序控制、错误控制和流控制等功能。

J1939协议

J1939协议

CAN总线的特点及J1939协议通信原理、内容和应用众多国际知名汽车公司早在20世纪80年代就积极致力于汽车网络技术的研究及应用。

迄今已有多种网络标准,如专门用于货车和客车上的SAE的J1939、德国大众的ABUS、博世的CAN、美国商用机器的AutoCAN、ISO的VAN、马自达的PALMNET等。

在我国的轿车中已基本具有电子控制和网络功能,排放和其他指标达到了一定的要求。

但货车和客车在这方面却远未能满足排放法规的要求。

计划到2006年,北京地区的货车和客车的排放要满足欧Ⅲ标准。

因此,为了满足日益严格的排放法规,载货车和客车中也必须引入计算机及控制技术。

采用控制器局域网和国际公认标准协议J1939来搭建网络,并完成数据传输,以实现汽车内部电子单元的网络化是一种迫切的需要也是必然的发展趋势。

1 CAN总线特点及其发展控制器局域网络(CAN)是德国Robert bosch公司在20世纪80年代初为汽车业开发的一种串行数据通信总线。

CAN是一种很高保密性,有效支持分布式控制或实时控制的串行通信网络。

CAN的应用范围遍及从高速网络到低成本底多线路网络。

在自动化电子领域、发动机控制部件、传感器、抗滑系统等应用中,CAN的位速率可高达1Mbps。

同时,它可以廉价地用于交通运载工具电气系统中,如灯光聚束、电气窗口等,可以替代所需要的硬件连接。

它采用线性总线结构,每个子系统对总线有相同的权利,即为多主工作方式。

CAN网络上任意一个节点可在任何时候向网络上的其他节点发送信息而不分主从。

网络上的节点可分为不通优先级,满足不同的实时要求。

采用非破坏性总线裁决技术,当两个节点(即子系统)同时向网络上传递信息时,优先级低的停止数据发送,而优先级高的节点可不受影响地继续传送数据。

具有点对点、一点对多点及全局广播接收传送数据的功能。

随着CAN在各种领域的应用和推广,对其通信格式的标准化提出了要求。

1991年9月Philips Semiconductors制定并发布了CAN 技术规范(Versio 2.0)。

CAN总线及SAEJ1939通讯协议在汽车上的应用

CAN总线及SAEJ1939通讯协议在汽车上的应用

CAN总线及SAEJ1939通讯协议在汽车上的应用引言:CAN总线是“Controller Area Network”的简称,它是一种经典的控制器局域网络,被广泛应用于汽车电子系统中。

而SAE J1939通讯协议是一种基于CAN总线的协议,用于在专用车辆中实现高级自动化功能。

CAN总线及SAE J1939通讯协议的应用使得汽车电子系统的通讯变得更加灵活、高效,并且可以实现更多的功能。

本文将详细介绍CAN总线及SAE J1939通讯协议在汽车上的应用。

1.1.车身电子控制系统1.2.发动机管理系统1.3.刹车控制系统1.4.底盘控制系统1.5.安全系统SAEJ1939通讯协议是基于CAN总线的协议,它是专门针对专用车辆的通讯标准。

SAEJ1939通讯协议的应用可以归纳为以下几个方面:2.1.丰富的数据传输SAEJ1939协议定义了丰富的数据传输格式和数据类型,可以满足复杂的车辆控制和监测需求。

通过SAEJ1939协议,各个控制模块能够高效地传输和解析各种类型的数据,提高了通讯的灵活性和可靠性。

2.2.灵活的网络管理SAEJ1939协议中定义了网络管理的机制,可以实现网络中各个节点的自动配置和故障诊断。

通过SAEJ1939协议,可以实现网络中各个控制模块的自动发现和连通性检测,提高了网络的可靠性和稳定性。

2.3.高级自动化功能SAEJ1939协议的设计目标之一就是支持高级自动化功能的实现。

通过SAEJ1939协议,可以实现车辆之间的信息交换和协同工作,例如车队管理、自适应巡航控制等功能,提高了车辆的安全性和效率性。

2.4.车辆诊断和维护SAEJ1939协议定义了丰富的诊断和维护功能,可以实现对车辆各个控制模块的远程诊断和维护。

通过SAEJ1939协议,车辆制造商和维修人员可以远程获取车辆的故障信息、传感器数据等,提高了车辆的可靠性和可维护性。

结论:综上所述,CAN总线及SAEJ1939通讯协议在汽车上的应用非常广泛,并且具有很大的潜力。

CAN总线的特点及J1939协议通信原理、内容和应用

CAN总线的特点及J1939协议通信原理、内容和应用

CAN总线的特点及J1939协议通信原理、内容和应用众多国际知名汽车公司早在20世纪80年代就积极致力于汽车网络技术的研究及应用。

迄今已有多种网络标准,如专门用于货车和客车上的SAE的J1939、德国大众的ABUS、博世的CAN、美国商用机器的AutoCAN、ISO的VAN、马自达的PALMNET等。

在我国的轿车中已基本具有电子控制和网络功能,排放和其他指标达到了一定的要求。

但货车和客车在这方面却远未能满足排放法规的要求。

计划到2006年,北京地区的货车和客车的排放要满足欧Ⅲ标准。

因此,为了满足日益严格的排放法规,载货车和客车中也必须引入计算机及控制技术。

采用控制器局域网和国际公认标准协议J1939来搭建网络,并完成数据传输,以实现汽车内部电子单元的网络化是一种迫切的需要也是必然的发展趋势。

1 CAN总线特点及其发展控制器局域网络(CAN)是德国Robert bosch公司在20世纪80年代初为汽车业开发的一种串行数据通信总线。

CAN是一种很高保密性,有效支持分布式控制或实时控制的串行通信网络。

CAN的应用范围遍及从高速网络到低成本底多线路网络。

在自动化电子领域、发动机控制部件、传感器、抗滑系统等应用中,CAN的位速率可高达1Mbps。

同时,它可以廉价地用于交通运载工具电气系统中,如灯光聚束、电气窗口等,可以替代所需要的硬件连接。

它采用线性总线结构,每个子系统对总线有相同的权利,即为多主工作方式。

CAN网络上任意一个节点可在任何时候向网络上的其他节点发送信息而不分主从。

网络上的节点可分为不通优先级,满足不同的实时要求。

采用非破坏性总线裁决技术,当两个节点(即子系统)同时向网络上传递信息时,优先级低的停止数据发送,而优先级高的节点可不受影响地继续传送数据。

具有点对点、一点对多点及全局广播接收传送数据的功能。

随着CAN在各种领域的应用和推广,对其通信格式的标准化提出了要求。

1991年9月Philips Semiconductors制定并发布了CAN技术规范(Versio 2.0)。

SAE J1939协议

SAE J1939协议

SAE J1939协议吉林大学汽车动态模拟国家重点实验室底盘控制研究室丁海涛杨建森2008年10月30日大纲)SAE J1939概述)物理层(SAE J1939-11))数据链路层(SAE J1939-21) )网络层(SAE J1939-31))应用层(SAE J1939-71))故障诊断(SAE J1939-73) )网络管理层(SAE J1939-81) )应用实例SAE J1939协议概述)SAE J1939协议:是由美国汽车工程师协会(SAE)制定的主要针对商用车的CAN总线通讯协议)基础: CAN 2.0B协议)对象:客车和载重货车;船舶、农业机械等非路面设备SAE J1939协议文档结构)SAE J1939 车辆网络串行通信的控制总标准Revised 2007-10-9 )SAE J1939/01 卡车及客车等路面控制及信息网络Issued 2000-09-1 )SAE J1939/02 农业设备等非路面控制及信息网络Issued 2006-08-23 )SAE J1939/05 发动机故障诊断方面的应用Issued 2008-2-21 )SAE J1939/11 物理层,250K 比特/秒,屏蔽双绞线Revised 2006-9-18 )SAE J1939/13 物理层,非车载诊断连接器Revised 2004-3-11 )SAE J1939/15 物理层,250K 比特/秒,非屏蔽双绞线Revised 2008-8-21 )SAE J1939/21 数据链路层Revised 2006-12-22 )SAE J1939/31 网络层Revised 2004-4-2 )SAE J1939/71 车辆应用层Revised 2008-1-28 )SAE J1939/73 诊断应用层Revised 2006-9-8 )SAE J1939/74 应用层信息配置Revised 2006-11-21 )SAE J1939/75 应用层设置及工业化Revised 2007-06-21 )SAE J1939/81 网络管理层Revised 2003-5-8 )SAE J1939/82 相容性-卡车和客车Issued 2008-8-11CAN的发展概况)20世纪80年代,Bosch的工程人员开始研究用于汽车的串行总线系统)1986年,Bosch在SAE(汽车工程师协会)大会上提出了CAN)1987年,INTEL就推出了第一片CAN控制芯片—82526;随后Philips半导体推出了82C200。

SAE J1939 协议简介(大结局)

SAE J1939 协议简介(大结局)

SAE J1939 协议简介(大结局)由于应用层会根据不同的行业和需求有所不同,所以应用层的开发可以参考标准自行研究,关于这个系列,今天是最后一集,我们来讲讲J1939的网络管理层(J1939/81)。

其实任何一种协议单看协议文件都是很枯燥的,但是其实协议软件的开发流程图就隐含在这协议描述中,多看几遍,多读几遍,多琢磨琢磨,在找些参考资料,相信你一定会理解协议中的需求,为你的后续开发扫平障碍。

肯定有人会问,总线上有那么多节点,总线上的那么多节点是如何管理和通信的呢?网络管理层就是解决这些问题的。

先来讲讲什么叫控制器应用程序。

控制器应用程序(CA)Controller Application(CA)控制器为电控单元(ECU) 内执行一种特殊控制功能的软件和硬件。

控制器里的软件称为“控制器应用程序”(CA)。

一个ECU 可以执行一个或多个控制功能,因此可以包括一个或多个CA。

为了能够在本标准网络上进行通信,每个CA都必须有一个地址以及一个和它联系在一起的名字。

网络管理层为唯一识别网络上的CA、管理地址分配和网络错误提供必要的定义和程序。

每个CA应能提供唯一的64位名字(8个字节).CA必须首先声明地址成功,然后才能向网络发送,如果CA按地址声明过程声明地址失败,必须按标准方式进行处理并向网络报告。

在采用J1939标准的网络中,地址用于保证消息标识符的唯一性以及表明消息的源地址。

地址声明消息包括地址和名字,用于把名字和网络中的某个地址关联在一起。

每个CA在开始正常的网络通信之前,必须有一个名字并且成功声明了一个地址。

名字有两个用途:其一用于表示CA的功能描述(如发动机1,发动机2)其二,作为一个数值,用于地址仲裁。

把一个地址与唯一的名字相关联,也就把一个地址和一个CA关联起来。

ECU的制造商和网络集成商必须保证所有在一个网络上传输消息CA的名字是唯一的。

网络上的每个CA都应有一个名字,这样CA可以根据它的主要功能被唯一标识。

SAEJ1939

SAEJ1939
图3典型的μC/OS-II任务流程
SAEJ1939协议更大程度地发挥了CAN优异的性能。
(二)SAEJ1939报文帧格式
J1939的信息是以PDU(Protocol Data Unit协议数据单元)的形式进行传输的,PDU的封装在应用层中完成。PDU提供了组织信息的框架,这一点对于每一个要发送的CAN数据帧来说是至关重要的。
车速、发动机转速、冷却水温度、燃油油量采用步进电机(VID29-02)驱动指针指示,里程信息采用里程表专用段式LCD模块LCM1010显示,各开关和报警信号则采用LED指示灯。
二、CAN总线及SAEJ1939协议分析
(一)CAN总线及SAEJ1939协议介绍
CAN(Controller Area Network)总线是德国Bosch公司在80年代初为解决数据可靠交换而开发的一种串行数据通信总线,它强调了实时性,又具有极高的可靠性和独特的设计,在现代汽车中已经成为必备装置。为进一步减少车身线束,方便故障诊断,满足主要电控单元和系统间大量数据信息实时交换的需要,使汽车各方面性能趋于最佳状态,基于CAN总线的C类网络被应用于车内数据通讯。CAN总线有效地将发动机电控系统、驱动防滑系统、自动巡航系统等连接成为一个综合控制系统,使整车性能得以大幅提高。
对于现代汽车而言,汽车仪表是汽车信息的中心,集中、直观、迅速地反映了汽车在行驶过程中的各种动态指标,如行驶速度、里程、电系状况、制动、压力、发动机转速、冷却液温度、油量、及各种危险报警。
汽车仪表已成为体现汽车高精尖技术的主要部分。
本文所述的总线式汽车仪表一方面具有传统仪表的数据采集功能,另一方面利用CAN总线技术,使该仪表成为车身网络的一部分,集中处理来自其他电控单元的数据,且其通讯符合SAEJ1939协议,可以与汽车上其他按照此协议工作的电控单元进行通讯。

汽车CAN总线核心技术J1939

汽车CAN总线核心技术J1939

当前位置:首页> 信息分类> 技术文章> 汽车电器技术> 正文现代汽车的核心技术-SAE J1939hc360慧聪网汽车配件行业频道2004-06-15 15:39:18一、技术背景在当今的中高档汽车中都采用了汽车总线技术。

汽车总线为汽车内部各种复杂的电子设备、控制器、测量仪器等提供了统一数据交换渠道。

一些汽车专家认为,就像在20世纪70年代引入集成电路、80年代引入微处理器一样,近10年来数据总线技术的引入也将是汽车电子技术发展的一个里程碑。

20世纪90年代以来,汽车上由电子控制单元(ECU)控制的部件数量越来越多,例如电子燃油喷射装置、防抱死制动装置、安全气囊装置、电控门窗装置、主动悬架等等。

随着集成电路和单片机在汽车上的广泛应用,车上的ECU数量越来越多。

因此,一种新的概念--车上控制器局域网络CAN(Controller Area Network)的概念也就应运而生了。

CAN最早是由德国BOSCH 公司为解决现代汽车中的控制与测试仪器之间的数据交换而开发的一种数据通信协议,按照ISO 有关标准,CAN的拓扑结构为总线式,因此也称为CAN总线。

CAN协议中每一帧的数据量都不超过8个字节,以短帧多发的方式实现数据的高实时性;CAN总线的纠错能力非常强,从而提高数据的准确性;同时CAN总线的速率可达到1M bit/s,是一个真正的高速网络。

总之,将CAN总线应用在汽车中使用有很多优点:(1)用低成本的双绞线电缆代替了车身内昂贵的导线,并大幅度减少了用线数量;提高可靠性,安全性、降低成本。

(2)具有快速响应时间和高可靠性,并适合对实时性要求较高的应用如刹车装置和气囊;控制平台、信息平台、驾驶平台的互连基础。

(3)CAN芯片可以抗高温和高噪声,并且具有较低的价格,开放的工业标准。

在现代轿车的设计中,CAN已经成为必须采用的装置,奔驰、宝马、大众、沃尔沃、雷诺等汽车都采用了CAN作为控制器联网的手段。

STM32的CAN总线+J1939数据格式说明

STM32的CAN总线+J1939数据格式说明

在STM32中都是有标准的数据结构和函数供大家使用,那么对于具体的每一部分对应那些数据、每一位代表什么意思都没有具体说明。

特别在使用某些协议,需要辨别该部分的具体信息时,就必须对数据结构中的每位的意义清楚才能提取出具体的含义。

先来看一下下面的东西吧。

CAN帧结构。

这个就不具体介绍了,不过先提一点疑问:在STM32中直接给结构体中各成员直接赋值或读取,那么其实际的发送或接收的最底层的结构又是怎么样的呢?typedef struct{uint32_t StdId;uint32_t ExtId;uint8_t IDE;uint8_t RTR;uint8_t DLC;uint8_t Data[8];uint8_t FMI;} CanRxMsg; 接受结构体和发送结构体一样,就只是结构体名不一样而已(CanTxMsg)。

对于上面的问题,在一些协议中进行解析时,如何将这些标识符与协议的具体项对应呢?由于在做J1939协议的编程,所以就以这个为例说明一下。

如上所示,在J1939中CAN帧结构为32位,包含优先级、PDU格式(PF)、PS、SA。

而在STM32的结构体中却是32位的ID,8位的IDE、RTR、DLC。

如果要单独提取标识符中的某一个有如何提取呢?这就涉及到STM32的收发邮箱的寄存器存储结构了。

来看一下其标识符寄存器结构吧(接收和发送寄存器结构除0位外都一样)对于J1939协议来说,必须对帧数据和优先级、PF、PS、SA进行双向解析。

所以我们在发送数据或收到数据时必须做一定的处理。

在STM32的固件库函数中该寄存器中的各个部分的值提取出来赋给其结构体中个部分的值。

发送数据时:u32 Id_Ext = 0x00000000;Id_Ext = Id_Ext|Priority<<26;Id_Ext = ((Id_Ext>>16)|Pdu_PF)<<16;Id_Ext = ((Id_Ext>>8)|Pdu_Ps)<<8;Id_Ext = Id_Ext|Pdu_Sa;接收数据时:PDU_PF = (RxMessage.ExtId&0x00ff0000)>>16;PDU_PS = (RxMessage.ExtId&0x0000ff00)>>8;PDU_SA = RxMessage.ExtId&0x000000FF;注意:在帧结构图中我们看到PF被分成了两部分,而在上面的处理中PF却是连在一起的8位。

CAN卡与使用J1939应用层协议设备间的通信

CAN卡与使用J1939应用层协议设备间的通信

CAN卡与使用J1939应用层协议设备间的通信CAN总线协议:对CAN协议的媒体访问控制子层的一些概念和特征做如下说明: (1)报文(Message) 总线上的报文以不同报文格式发送,但长度受到限制。

当总线空闲时,任何一个网络上的节点都可以发送报文。

(2)信息路由(Information Routing) 在CAN中,节点不使用任何关于系统配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。

因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在CAN中增加节点。

(3)标识符(Identifier) 要传送的报文有特征标识符(是数据帧和远程帧的一个域),它给出的不是目标节点地址,而是这个报文本身的特征。

信息以广播方式在网络上发送,所有节点都可以接收到。

节点通过标识符判定是否接收这帧信息。

  (4)数据一致性应确保报文在CAN里同时被所有节点接收或同时不接收,这是配合错误处理和再同步功能实现的。

(5)位传输速率不同的CAN系统速度不同,但在一个给定的系统里,位传输速率是唯一的,并且是固定的。

(6)优先权 由发送数据的报文中的标识符决定报文占用总线的优先权。

标识符越小,优先权越高。

(7)远程数据请求(Remote Data Request) 通过发送远程帧,需要数据的节点请求另一节点发送相应的数据。

回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名。

(8)仲裁(Arbitration) 只要总线空闲,任何节点都可以向总线发送报文。

如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。

通过使用标识符的逐位仲裁可以解决这个碰撞。

仲裁的机制确保了报文和时间均不损失。

当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。

在仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。

如果电平相同,则这个单元可以继续发送,如果发送的是“隐性”电平而监视到的是“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态。

J1939协议分析指南

J1939协议分析指南

广州致远电子有限公司修订历史目录1. SAE J1939协议分析插件简介 (1)1.1 SAE J1939协议及其插件简介 (1)1.2 SAE J1939协议插件安装说明 (1)1.3 SAE J1939数据分析结果的实例 (2)2. SAE J1939协议分析的方法 (3)2.1 分析SAE J1939协议帧 (3)2.2 发送SAE J1939协议帧 (5)3. 免责声明 (9)1. SAE J1939协议分析插件简介1.1 SAE J1939协议及其插件简介SAE J1939协议是由汽车工程协会(SAE)定义的,SAE J1939协议在商用车辆、舰船、轨道机车、农业机械和大型发动机中是应用最广泛的应用层协议,基于传输可靠性能优越的CAN-bus总线,可达到250Kbps的通讯速率。

在协议中,不仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义,SAE J1939协议由美国SAE( Society of Automotive Engineer)组织维护和推广SAE J1939(以下简称J1939)协议分析插件是CANPro协议分析平台的一部分,与CAN 分析仪配套使用。

用于分析J1939网络的数据、错误状态、网络负载,或模拟J1939应用终端的工作状态等,是J1939网络开发工程师的好帮手,可以大大缩短开发周期,方便实现网络维护、查错、管理等复杂工作。

1.2 SAE J1939协议插件安装说明要使用J1939协议插件对J1939网络进行分析,您需要两个安装包:CANPro协议分析平台安装包和J1939协议分析插件安装包。

安装包可以从广州致远电子有限公司的网站上下载:/products/CANalyst/CANalyst.asp。

请注意,在安装J1939协议分析插件之前,必须已安装好CANPro协议分析平台软件,且CANPro协议分析平台软件需要1.40或更高的版本。

SAE J1939 协议简介(一)

SAE J1939 协议简介(一)

SAE J1939 协议简介(一)微信公众号:嵌入式程序猿QQ:280192619提到SAE J1939协议就不得不提CAN通讯,大家都知道CAN是目前比较流行的一种现场总线,CAN 总线是一种串行数据通信协议,最早由德国BOSCH公司推出,用于汽车内部测量与执行部件之间的数据通信。

CAN 推出之后,世界上各大半导体生产厂商迅速推出各种集成有CAN 协议的产品,由于得到众多产品的支持,使得CAN 在短期内得到广泛应用。

CAN 在全世界范围的应用和用户在不断扩大。

具体的CAN 基本协议,可以参考BOSCH公司的官方文档。

CAN只规定了底层的协议,对高层的应用协议并没有做具体规定,这就给一些高层协议的开发留下了很大的空间,像CANOpen,Devicenet,以及SAE J1939等都是比较流行的CAN高层协议。

SAEJ1939 协议是由汽车工程协会(SAE)定义的,SAE J1939 协议在商用车辆、舰船、轨道机车、农业机械和大型发动机中是应用最广泛的应用层协议,基于传输可靠性能优越的CAN-bus总线,可达到250Kbps的通讯速率。

在协议中,不仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义,SAE J1939 协议由美国SAE( Society of Automotive Engineer)组织维护和推广。

CAN 总线的特点… 多主站依据优先权进行总线访问;… 非破坏性的基于优先权的总线仲裁;… 借助接收滤波的多地址信息传送;… 远程数据请求;… 配置灵活;… 全系统的数据相容性;… 错误检测和出错信令;… 发送期间若丢失仲裁或由于出错而遭破坏的数据包可自动重发;… 暂时错误和永久性故障节点的判别以及故障节点与CAN 总线的自动脱离。

主要协议文档:J1939/11J1939/13J1939/15J1939/21J1939/31J1939/71J1939/73J1939/74J1939/75J1939/81J1939/84具体协议内容可以参考官方文档。

CAN总线及SAEJ1939通讯协议在汽车上的应用

CAN总线及SAEJ1939通讯协议在汽车上的应用
该协议是美国 SAE 汽车和客车控制和通信网络子委员 会 提 出 一 个 支 持 开 放 系 统 互 连 ( OSI) 模 型 , 即 通 过 提 供 一 个 标 准 的 框 架 使 电 控 单 元 ( ECU) 之 间 可 以 相 互 通 信 , 已经广泛用于公路上的汽车和铁路上的火车。
4 CAN 总线接口电路
数据, 表明了协议数据单元的格式, 并且被部分或完全的 用来为参数群提供标志。该数据在参数群中还被用来标注 CAN 数据帧的数据域。
特 定 协 议 数 据 单 元 ( PDU Specific ( PS) 为 一 个 8 位 数据, 其具体数据由协议数据单元格式的值决定。该数据 可 能 是 一 个 目 标 地 址 ( DA) , 还 可 能 是 群 扩 展 ( GE) 信 息 。 该 数 据 在 参 数 群 中 也 被 用 来 标 注 CAN 数 据 帧 的 数 据 域 。 源 地 址 ( Source Address ( SA) 表 示 消 息 来 源 的 8 位 数据域。源地址域中保存了发出消息的电控单元的地址, 具体的对应关系见表 1。
6 结论
由于汽车电子技术的发展, 人们对车辆的性能越来越 高, 车载电子元器件的个数越来越多, 带来的汽车线束复 杂, 传统的连线方式远远不能满足需要。CAN 总线技术的
表 2 发动机控制模块数据帧实例
J1939 29 位 ID
0XOCFF8280
数据长度
2 字节 2 字节 2 字节 2 字节
数据场组成
⑦严格的错误检测和界定: CAN 节点在错误严重的情
了 电 信 号 间 的 电 气 隔 离 。82C250 是 CAN 控 制 器 和 物 理 层
况下具有自动关闭输出的功能, 以使总线上其它节点的操

基于SAE—J1939协议的CAN总线仪表盘设计

基于SAE—J1939协议的CAN总线仪表盘设计

: 8 0 5 1 F 5 0 ( )
内置 CAN
ADC
LC D报 警 灯
电气隔离
P CA
LCD点 阵 屏
权( P ) 、 保 留位 ( R) 、 数 据页 ( D P ) 、 P DU 格式 ( P F) 、 P D U 细节 ( P s ) 、 源地址 ( s A) 及数据域 ( D a t e F i e l d ) 等 7个域组成 , 如表 1
S AE - J 1 9 3 9 协 议 是美 国汽车 工程 师 协会 S AE 制 定 的 以
即S P N 。 2 系统 设 计
仪表盘系统 由信号 采集 、 处理 、 显示 、 C N 总线通 信等 模 A 块组 成 。如 图 1 所示, 通过模拟量 信号采集 滤波 电路 , 脉 冲 信 号变换整形电路和 C AN总线信号收发器转换后发送至 主控 制
量 坌 塑 ! s n e j v u e n ×
基于 S AE — J 1 9 3 9协议 的 C AN 总 线 仪 表盘 设 计
田海 贵 秦 玉 明
( 徐州达 康 电控科技 有 限公 司, 江苏 徐州 2 2 1 0 0 4 ) 摘 要: 首先 对 S A E - J 1 9 3 9 通信 协议 的特点 和 E C U 电喷发 动机 的特点进 行 了阐述 , 随后 分 析 了基 于 S A ̄J 1 9 3 9 通信 协 议 的 C AN总
1 S AE — J 1 9 3 9协 议 介 绍
J 1 9 3 9网络模 型共 定 义 为 7层 , 下面 的层对 应 的 J 1 9 3 9标 准 文件 是经 常 用 到 的 : L a y e r 1 一 J 1 9 3 9 / 1 1 : 物理层 , 要 点 是 通 信 的

saej1939标准介绍

saej1939标准介绍

saej1939标准介绍
SAE J1939标准是一种用于商用车辆和重型设备之间进行通信的控制器局域网络(CAN)协议。

这个标准由SAE国际制定,旨在提供一种统一的通信协议,以便不同制造商的电子控制单元(ECU)能够相互通信,实现数据交换和系统集成。

SAE J1939标准涵盖了许多方面,包括物理层、数据链路层、网络层和应用层。

物理层定义了电气特性和连接器规范,以确保不同设备之间的互操作性。

数据链路层负责错误检测和纠正,网络层管理数据包的路由和优先级,而应用层定义了通信的参数和消息格式。

这个标准广泛应用于卡车、拖车、农业和建筑设备等商用车辆领域,用于实现发动机控制、传感器监测、车辆诊断、车载通信和其他功能。

通过采用SAE J1939标准,不同制造商的设备可以更容易地集成到统一的车辆系统中,提高了设备的互操作性和可靠性。

总的来说,SAE J1939标准是一种重要的通信协议,它促进了商用车辆和重型设备之间的数据交换和系统集成,为整个行业带来了许多便利和效益。

SAE J1939多包传输协议及应用分析

SAE J1939多包传输协议及应用分析

SAE J1939多包传输协议及应用分析谢娟娟;李晋;郑创明【期刊名称】《周口师范学院学报》【年(卷),期】2016(033)002【摘要】描述一种 SAE J193921协议应用于商用车车载 CAN 网络系统设计过程的多包数据传输协议的传输原理、传输过程,结合工程实践,分析了多包传输协议在商用车整车 CAN 网络系统开发过程中的应用,该协议对处理诊断报文等数据具有重要的意义。

%In this paper,transport protocol and transport process for multiple packet data was introduced detailedly.This transport protocol was defined in SAE J1 939 21 protocol and used in CAN network design of commercial vehicles.Then, the application of multiple packet transport was analyzed based on the components of CAN network.The protocol is of great significance to the diagnosis of message data processing.【总页数】5页(P66-70)【作者】谢娟娟;李晋;郑创明【作者单位】周口师范学院机械与电气工程学院,河南周口 466001;周口师范学院机械与电气工程学院,河南周口 466001;周口师范学院物理与电信工程学院,河南周口 466001【正文语种】中文【中图分类】U463.6【相关文献】1.基于SAE J1939的汽车智能载重系统 [J], 覃熊艳;黄镜月;张雄飞2.基于SAE J1939协议的车用燃料电池管理系统设计 [J], 韩冬林;徐琤颖;陈愚;翟秀军3.基于STemWin图形库和SAE J1939 CAN通信协议的采棉机监控系统设计 [J], 陶森林;李晖;苗中华;李博雅4.基于SAE J1939的商用车智能车载终端系统设计 [J], 董小辉;胡锦波;黄浩;胡永明;顾豪爽5.基于SAE J1939协议的故障诊断系统开发 [J], 张帆;姚胜华;顾祖飞因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// make sure we are in configuration mode
i=0;
while( (CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->CANSTAT)), ARG_UN
{
i++;
if(i == 1000)
{
printk("Please connect the CAN PORT with MCU!! error is MCP2510_Init
struct semaphore sem; //semaphore used for mutex
unsigned int unsigned int //unsigned int
IrqNum; MinorNum;/*device minor number*/
BaudRate;
//unsigned char
CAN_SPI_CMD( SPI_CMD_RESET, ARG_UNUSED, ARG_UNUSED, ARG_UNUSED); mdelay(10); canstat=CAN_SPI_CMD(SPI_CMD_READ,TOLONG(&(MCP2510_MAP->CANSTAT)),ARG_UNUSE canctrl=CAN_SPI_CMD(SPI_CMD_READ,TOLONG(&(MCP2510_MAP->CANCTRL)),ARG_UNUSE printk("CANSTAT80=: 0x%02X!\n",canstat); printk("CANCTRLe7=: 0x%02X!\n",canctrl); if((canstat != 0x80) && (canctrl != 0xe7)) {
*SendBuf;
//unsigned int
SendNum;
//volatile unsigned long SendHead;
//volatile unsigned long SendTail;
}__attribute__((aligned(L1_CACHE_BYTES),packed));
/*****************************Variable define*******************************/ unsigned int MCP_major = MCP_MAJOR; struct MCP_device *Device[MCP_NUM]; unsigned int MCP_irq[MCP_NUM] = {IRQ_EINT5,IRQ_EINT19}; static char *MCP_name[MCP_NUM] = {"mcpcan0","mcpcan1"};
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->CNF3)),
CNF3_INI

CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->CNF2)),
CNF2_INI
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->CNF1)),
volatile unsigned long RecvBuf; volatile unsigned long RecvHead; volatile unsigned long RecvTail; volatile unsigned long RecvNum;
wait_queue_head_t inq; //or use as a global variable
*/
/*****************************MCP device initialize*************************/
static int MCP2510_Init(int MinorNum )
{
// Configure the SPI Interface in MX1
Device[i]->MinorNum = i; Device[i]->IrqNum = MCP_irq[i];
init_waitqueue_head(&(Device[i]->inq));//初初初激激激激 init_MUTEX(&(Device[i]->sem)); //函函初初初函函函设函函函。 函函函设函函函没互互。该只只将该激激只只访 } return 0; }
#define BUF_SIZE sizeof(struct MCP_device) * 100
volatile int *rGPGCON=NULL; volatile int *rGPGUP=NULL; volatile int *rGPGDAT=NULL;
volatile int *rCLKCON;
CNF1_
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->CANINTE)),
CANINTE_
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->CANINTF)),
CANINTF_
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->EFLG)),
//malloc the Send buffer //Device[i]->SendBuf = kmalloc(sizeof(struct MCP_device) * Buf_long,GFP //if(Device[i]->SendBuf == NULL) { // printk(KERN_ALERT"allocate Send memory failed.\n"); // return(-ENOMEM); //} //memset((char *)Device[i]->SendBuf,0,sizeof(struct MCP_device) * Buf_l
/* MCP device initialize */ /* Initialize the mcp2510
Configure the mcp2510 through spi interface
Return : RC_SUCCESS 0
MCP2510_Init_fail 3
By
: xiaopenghui
printk("Please check the spi PORT with MCU!! \n"); return MCP2510_Init_fail; }
CAN_SPI_CMD( SPI_CMD_BITMOD, TOLONG(&(MCP2510_MAP->CANCTRL)), 0xe0, 0x80 ) canctrl=CAN_SPI_CMD(SPI_CMD_READ,TOLONG(&(MCP2510_MAP->CANCTRL)),ARG_UNUSE printk("CANCTRL87=: 0x%02X! CONFIG MODE\n",canctrl);
驱驱驱驱:J:\workspace\mcp2510\011_mcpfor1939\mcp2510.c 2010-11-30, 14:29:39
#include <linux/fs.h> #include <asm/uaccess.h> /* for get_user and put_user */ #include <linux/module.h> #include <asm/io.h> #include <linux/delay.h> #include <linux/ioport.h> /* for verify_area */ #include <linux/errno.h> /* for -EBUSY */ #include <linux/sched.h> #include <linux/interrupt.h> /* for module_init */ #include <linux/irq.h> #include "mcp2510.h"
return MCP2510_Init_fail;
}
}
// start configuration
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->BFPCTRL)),
BFPCTRL_
CAN_SPI_CMD( SPI_CMD_WRITE, TOLONG(&(MCP2510_MAP->TXRTSCTRL)), TXRTSCTR
printk(KERN_ALERT"allocate device memory failed.\n"); return(-ENOMEM); } memset((char *)Device[i],0,sizeof(struct MCP_device));//初初初设0
//malloc the recv buffer Device[i]->RecvBuf = (unsigned long)kmalloc(sizeof(struct MCP_device) * if(Device[i]->RecvBuf == 0) {
/*****************************MCP2510 device initialize********************** //这该函函没函对struct MCP_device激程初初初 //Buf_long设将为没是是如为 static int MCP_device_init(void) {
相关文档
最新文档