CAN学习方法(知乎)Smah

说下我的学习过程。刚到公司的时候我根本不知道什么是CAN,甚至连以太网和串口通讯都不懂。领导把USBCAN分析仪拿给我,把铜线短接上,用软件在CAN1窗口点下发送,CAN2窗口马上接收到了发送出来的数据,ok,成功了。这就是CAN通讯。所以第一点,你想学汽车CAN总线,你首先要有个USBCAN分析仪。否则你无法看到CAN总线的原始数据。示波器?需要购买有CAN总线数据分析功能的示波器。

分析仪这东西我看知乎上还是土豪居多。USBCAN分析仪属于舶来品,原产于欧洲,我们国内用的较多的有VN1630A(Vector出品,用CANoe软件),PCAN-USB(PEAK公司出品,国内用量大),Kvaser的USBCAN(瑞典知名公司),USB2CAN(IXXAT公司,德国),NI自己的USBCAN。其特点是昂贵但功能强大,Peak最便宜的无隔离版本也要2000多块,Vector的硬件价格更是极高。作为学生党买不起,何谈学习?接下来说下国产货,ZLG作为知名的嵌入式龙头企业有很多CAN设备卖,但同样的,价格上也是1200-2200人民币不等,小贵。最后是平民价位的CAN分析仪,淘宝和京东都有,200-600元不等,这个价位大家还是可以接受的。在这里不推荐大家购买250元以下的分析仪。很便宜的分析仪大多是USB转串口,再转CAN,这样的分析仪接收高负载数据时会出现丢帧的现象,之后我们也会说下如何自制一台这样的USB转串口转CAN分析仪。别图便宜,看下淘宝销量排行,不要省那100元钱,用不好还要退货,麻烦。总结下,初学CAN,如果有足量科研经费,应该优先采购欧洲设备,毕竟软件功能多,性能好;如囊中羞涩,先买平价国产分析仪接收数据完全可以满足需要。附:USBCAN的百度词条

你说我不喜欢看书,直接上资料?有的。清华PPT和大众PPT是典范,链接在下面。

你说我是搞ARM的,最近公司让我用STM32开发CAN接口设备,下面是初级入门用的材料。

这个是野火和正点原子两家的开发手册,翻到CAN总线那部分,推荐直接使用ST的库函数,先实现功能,有余力再看寄存器,免得走弯路。这手册里面的CAN总线更侧重于开发和使用,基础的东西讲得少。

第三点是实际操作,在实际测试中巩固理论知识。

CAN总线不是空中楼阁。不管你测什么东西的CAN信号都行,重要的是,你要接收到那些宝贵的CAN总线数据。举个例子,你的汽车,你们项目组租的车,你导师的车都行。反正我能想到的最方便的资源就是你身边的车,只要是09年之后的车都带CAN总线。我当时是测我自己的速腾车,但OBD接口的CAN被阉割了,没有数据。后来从汽车之家论坛中发现空调CAN线能引出来,这样才引出了两条宝贵的100K波特率舒适CAN总线,测出了很多数据。

汽车的CAN分为动力CAN和舒适CAN,具体可以看PPT。我测的速腾舒适CAN内容很丰富,车门、尾箱打开还是关闭,安全带,档位,油量,手刹,方向盘转角等等一应俱全,但都是CAN总线源码,你不知道哪个信号是车门信号。这个就叫做逆向破解了。你需要频繁的开关车门来确定车门信号所对应的帧ID和帧数据。你动,它跟着动,你不动,它也不动,那就是它了。

帧信息:四类,标准数据帧(汽油车、电机)、标准远程帧(少见)、扩展数据帧(广大柴油车、部分汽油车)、扩展远程帧(少见)

有童鞋经常会问到CAN2.0A和CAN2.0B是啥,2.0A是标准的意思,帧ID11位,也即0x000-0x7FF。2.0B是扩展的意思,帧ID最高29位,也即0x00000000-0x1FFFFFFF,要注意2.0B已经包含了2.0A,他们俩是包含与被包含的关系。

帧ID是什么?通俗讲是CAN的一种“地址”。CAN有个特点是竞争机制,帧ID越小越有占用总线资源的权利,越会优先发送。举个例子,灯光信号帧ID0x555,发动机温度传感器帧ID0x111,那么当两个信号同时发出时,发动机的信号会优先发送,灯光在后面排队。通常在一个CAN系统中,不同的设备,发出CAN信号的帧ID都是不一样的,或者说,CAN信号的每个帧ID都有一个固定的用途。如果CAN信号的帧ID的用途被确定下来,并在一个文档中得到了解释,那么我们管这个叫CAN总线的应用层协议,或者高层协议。常见的有ISO15765-4,SAEJ1939,CANopen(电机和挖沟机控制器用)。而这个文档在车辆行业中叫DBC文件,它对车辆CAN总线上的每个帧ID及每个帧数据都做了注释。

11位和29位是什么意思呢?现在说下,11位指的是标准帧的帧ID范围是0x000-0x7FF(0x是十六进制的意思),7FF翻译成二进制是11111111111,对吧,十一个“1”。同理,29位指扩展帧的帧ID范围是0x00000000-0x1FFFFFFF,1FFFFFFF翻译成二进制是29个1。大致明白了吧。29位的分配ID能力比11位的强,11位总有些地方不够之感。

帧数据很简单了,说下特色吧。与串口相比,CAN的帧数据只有8个字节,即64个位,不会再多了。当然,CANFD作为新型总线解决了仅有8字节这个问题。有兴趣大家可以了解下CANFD。

波特率忘了,CAN的波特率都是整数,要注意。常见的车辆波特率有500K,250K,125K,100K。波特率这东西和收音机频率一样,如果两个CAN设备的通信波特率不一致的话,是不能进行通讯的。

终端电阻,CAN和RS485一样,要在终端减少差分信号的反射。我记得最经典的一张图是这么画的,水流在试管(平躺)的尾部受阻,水也就涌了回来。差分信号也是如此,你不在两个终端加电阻,信号会反弹回来影响通讯。详细的看书吧,不细讲了。这东西总线上要有两个,两个120欧姆的电阻,并联,最远的两端一边一个。多了不行少了也不行。你不确定的话,用万用表量一下,CANH和CANL之间60欧姆左右最好。

第四点,你需要找一个高层协议来进行CAN数据与实际含义对号入座。比如ISO15765-4协议和SAEJ1939协议,看文档,明白CAN总线是如何在某个帧ID中传递转速等模拟量,传递灯光信号等数字量。

举个例子,J1939柴油车协议中,0x18F00402这个帧ID表示EEC1,它的第四个和第五个帧数据,假如是0x02,0x03,那么发动机转速如何表示呢,转速=2x0.125+3x32=96.25,这个就是真实的发动机转速值。它是有公式在里面的,这个事情是在协议中规定好的。用第四个帧的十进制数据乘以0.125,再加上第五个帧的十进制数据乘以32,你就得到了实际的发动机转速。对CAN总线协议的理解就说到这里。知道帧ID和帧数据的意思,你就可以对复杂的CAN总线16进制数据了如指掌。

我们再看一个例子,上图是大众某畅销车的数据解析结果,帧ID为0x390的标准数据帧,第三个帧数据如果为0x40说明左前车门关闭,如果为0x41说明左前车门打开。这个有什么意义呢?如果我们做一款中控车机,我们知道有一个功能叫车辆状态读取,如果车门未关但车辆已开始行驶,车机需要知道左前门目前的状态,通过什么呢?就是CAN总线。车机会读取CAN总线的信息,得知车体的门信息、安全带信息、手刹信息等,通过语音模块给予驾驶员必要的提醒。话说我有时真的会忘记放手刹,真的很感谢德赛西威的车机及时提醒我。

很多上了年纪的工程师,经常甩给我一个某某车厂零部件的通信协议,说:”我发什么数据给它,它才能动作啊?车厂的人只给了我这个通信协议,我也看不懂。”其实通信协议上面写明了帧ID和帧数据意思,按图索骥,你就可以发一条CAN数据,启动汽车的某个部件,很神奇。

学CAN总线还是需要用项目来背书的,如果你软件方面牛,可以用第三方的CAN分析仪当硬件,自己开发上位机软件,开发一些有特殊功能的软件,我国目前缺少诊断、数据分析、协议分析等方面的软件,尤其是汽车方面,绝大多数为英文的,需要从国外购买。我能想到的有电动车充电管理系统,车辆信息读取软件,CANBootloader软件等。我日常接触的比较常见的软件有BMS电池管理系统、消防信号管理系统、伺服电机管理系统什么的。CAN不算是新鲜货,主要的应用领域集中在汽车、BMS、电机控制等几个方向内。

想要学习汽车CAN总线,首先要了解汽车CAN总线概述、汽车误撞诊断协议的发展、基于UDS的ISO15765协议等这些关于CAN总线的前世今生。

汽车诊断协议的发展

其他的控制单元工作原理同发动机系统类似,车身上的这些控制单元并不是独立工作,而是作为汽车这样一个整体,它需要信息的共享,因此存在一个信息传递的过程。CAN总线就是把以前一线一用的专线制改成一线多用制,这样可以大大减少汽车上电线的数量,也可以简化整个汽车的布线。在形成OBD-II标准之前,各厂商的汽车诊断座均不相同。比如奔驰为38帧,美洲车12帧,欧宝为10帧,丰田为17帧,宝马为20帧,本田为3帧,澳大利亚西亚款6脚等。

由于各厂商汽车诊断座与诊断协议差别巨大,导致汽车发生故障时其类型难以判定。因此,SAE(美国机动车工程师学会)制定了OBD-II标准,实行标准检测程序,并且具有严格的排放针对性,用于实时监测汽车尾气排放情况。

在CAN总线形成标准协议前,欧洲和大部分亚洲汽车采用ISO9141协议,美国通用汽车(GM)使用SAEJ1850VPW通讯协议电路,福特(FORD)汽车则采用SAEJ1850PWM通讯协议电路。可以看出此前以KWP2000协议居多,KWP2000协议最初是基于K线的诊断协议,但由于K线的物理层和数据链路层在网络管理和通讯数据上的局限性,K线逐渐无法满足日益复杂的车载诊断网络的需求。而CAN总线由于其非破坏性的网络仲裁机制、较高的通讯数据和灵活可靠的通讯方式,在车载网络广受青睐,绝大多数车场目前都是采用CAN总线的方式。所以基于K线的KWP2000物理层和数据链路层的协议逐步被基于CAN线的KWP2000协议,也就是ISO15765协议所取代。

K线与CAN总线的比较

K线通信速率较慢,最大达10.4Kbit/s。此前有一款老款的宝马车是115200bit/s的波特率,但是这种非常罕见。CAN线通信速率可达到1Mbit/s,其中以500Kbit/s和250Kbit/s为主。在传输方面,K线采用单线传输的方式,以字节为单位进行传输,CAN线则以差分信号传输的方式,以CAN帧为单位进行传输。在出错处理中,K线必须要由开发者,如tester,ECU等来完成相应的仲裁处理。而CAN线在物理层面具有完善的通信错误处理机制和总线仲裁机制。报文长度方面,K线最大255个字节,CAN线则是4096字节(指数据域)。

物理层基于K线

KWP2000协议的数据结构由帧头、数据字节和校验和三部分组成。帧头包括起始字节、原码、目的地址和帧长。数据字节包括SourceID与有效字节,共255个字节,最后是累加校验和。这三部分就组成了一帧的数据进行通讯。

物理层基于CAN线

基于CAN线的OSI分层结构,其增强型的诊断是基于ISO14229-1协议与ISO15765-3协议。而它的排放标准与K线相同,都是基于ISO15031-5协议。

ISO15765协议

简介

CAN总线最初并不是用于功能开发,而是一种串行的通讯方式,它有着很高的安全等级。特性:

汽车CAN总线网络拓扑结构

报文传输

报文的传输中帧格式分为11位识别符的标准帧与29位识别符的扩展帧。帧类型则分为数据帧、远程帧、错误帧和过载帧,这里主要讨论数据帧。

报文滤波的作用是通过设置硬件的滤波器从而过滤不需要被接受的CAN报文。汽车上的节点非常多,但对于每个节点来讲并不是需要所有的数据。比如在ABS系统并不需要掌握发动机的参数信息,此时就可以通过设置滤波器而过滤掉这些数据,起到滤波器的作用。

数据帧由七个不同的位场组成:帧起始(StartofFrame)、仲裁场(ArbitrationFrame)、控制场(ControlFrame)、数据场(DataFrame)、CRC场(CRCFrame)、应答场(ACKFrame)、帧结尾(EndofFrame)。仲裁帧可以用来区分该帧是11位的标准帧还是29位的扩展帧,以及是数据帧还是远程帧。

基于UDS的CAN总线ISO15765协议

Networklayerprotocoldataunits

网络层的ISO15765协议最多可以发送或接收4096个字节。

从上图中可以看到PDU有四组数据类型,分别是单帧的SFN_PDU,首帧的FFN_PDU,连续帧的CFN_PDU和流体控制帧的FCN_PDU。

单帧第一个字节的高四位是0,低四位表示帧长,即这一帧有几个字节的有效数据。

首帧第一个字节的高四位是1,第一个字节低四位与第二个字节一同组成帧长,所以最大的是4095个字节。

连续帧第一个字节的高四位是2,SN表示计数器。

CAN的UDS

基于CAN的UDS,就是基于ISO14229-1协议。从下图中可以看到ISO14229-1协议有不同的ServiceId,可以支持不同的服务需求。

比如10表示可进行DiagnoisticSessionControl操作,11表示可以对ECU进行Reset操作,27表示可进行SecurityAccess操作等等。

此外还有一些sub-function,不同的sub-function支持不同的功能。比如说SecurityAccess由两帧组成,假设01表示是访问seed,获取种子,在获取到种子之后发送,获取到解析的种子协议再返还回去才能够安全访问。

22表示读取数据信息,23表示可进行MemoryByAddress操作,19是读取故障码信息,14是清除故障码信息,还可以对ECU进行上传、下传数据等各种操作。

ISO15031-5协议

基于排放标准的OBD协议,排放标准是ISO15031协议共有七个章节,每个章节定义不同的内容,主要是以第五章为主。

排放标准的ISO15031-5协议共有九个服务,不同的服务有不同的功能,在下图均都描述。

我们以Service$01:RequestCurrentPowertrainDiagnosticdata(请求动力系当前数据)来解析ISO15031-5协议。

每一个PID表示一个传感器,也可以说表示一个数据流,数据流既有状态值,也有数据值。但并不是所有的车都支持所有的PID。首先访问00,如果ECU得到的数据用bit的形式来表示,如果是1表示支持当前的PID,0则表示不支持当前的PID。

在获取支持有效PID后,就可以访问实际的PID值,每一次可以访问六个PID。

上图表示00组可以支持01—20组的PID,20可以支持21—40组的PID,以此类推。

上图表示发送0100后ECU的回复。回复41+40,01+40或41表示当前请求动力系当前数据,00表示访问PID获取有效的PID。可以看到第一个字节BF是1011111,即当前ECU支持PID的数据为01及03—08,这7个PID数据,以下类似。

在获取到有效的PID后,我们需要进一步读取当前PID的实际内容,每次最多可以读取六个PID值。15表示Bank1–Sensor2,01表示当前的故障灯状态及故障码数量;05表示冷却液温度等等,如上图所示。

回复值的顺序与初始发送的数据并不一定相同,但是会先发送PID的组号,再补充PID当前组号的实际内容。通过上图可以知道,41表示请求动力帧回复;05表示冷却液温度;61表示冷却液温度的实际值,其他类似。

上图为Mode01中PID的一部分。第一列表示PID的序号,后面有不同数据流内容的描述。比如第一个是前文提到的故障码状态与故障码数量,PID2表示冻结的故障码,第三个是Fuelsystemstatus。12表示发动机转速,对于转速的最小值、最大值、单位、公式都有具体的规定。

汽车诊断协议的获取通常有三种方式获取骑车诊断协议:

原厂诊断仪:日产Consult诊断仪、丰田GTS诊断仪、本田HDS诊断仪、大众5053/5054诊断仪等。

综合诊断仪厂家:元征、金奔腾、朗仁、道通AUTEL、BOSCH等。

汽车诊断仪破解过程:

Step1:

利用第3方工具采集实车诊断数据;

Step2:

编写汽车模拟程序,即模拟汽车ECU和汽车诊断工序进行通讯;

THE END
1.车家号作者影响力排行榜车家号发现车生活汽车甜甜圈 32.54 优惠9万以上 为什么全新奔驰GLC比X3、Q5L卖的更好? 关注 优视汽车 32.50 10月销量大涨的6款SUV,看来价格是真的到位了 关注 车闻社 32.46 腾势Z9三厢版,实车怎么样? 关注 闫闯说车 32.45 能有GL8几分功力?试驾荣威iMAX8 DMH https://chejiahao.autohome.com.cn/Authors/RankListNew?rankCategory=7
2.微博关于汽车那些事儿 关注348 粉丝262.6万 微博认证:汽车博主 汽车达人 精选 微博 视频 相册 关于汽车那些事儿 11小时前 来自 微博视频号 拥有了这台车,助你轻松驾驭各种城市路况!看#全新岚图梦想家# 的创意大片,无视极限车位挑战,亦能丝滑泊车入位;面对城区各种复杂路面情况,通通从容应对!就算是新手开这车上路,也https://m.weibo.cn/u/1773341862
3.老司机都不一定全知道的汽车知识身为汽车博主身为汽车博主,今天就来给大家分享一些超实用的汽车知识,让你从汽车小白快速进阶。 一、加油那点事儿 去加油站加油,可别只看价格。不同标号汽油,像 92 号、95 号,是根据辛烷值划分的。一般来说,车辆使用手册会推荐适合的标号,不是标号越高就越好。高压缩比发动机可能需要高标号汽油来避免爆震,但用错标号不仅浪https://www.dongchedi.com/article/7439772349752164879
4.智能网联新能源汽车相关书籍只能驾驶书籍推荐推荐语:汇聚网联自动驾驶与蜂窝通信技术领域的研究成果,不仅包含电信和汽车领域专家的行业见解,还包含工业与学术界的最新技术进展与理论知识。 05 《智能汽车网络安全权威指南(上册)》 《智能汽车网络安全权威指南(上册)》 推荐语:汽车网络安全标准读本,知名电动汽车厂商安全总监撰写,43位汽车和安全领域专https://blog.csdn.net/2401_84247760/article/details/138216555
5.0基础上岸新能源车企产品经理,艺术生都可以,有Lisa阿姨在,你怕啥不知不觉Lisa阿姨的全网粉丝已经突破25w啦~开心,可以说是垂类细分赛道涨粉最快的知识博主了。大家可以从各个渠道关注我呀,我会不定时的在各个渠道突然开播,哈哈哈。 但是,更让我开心的是,最近收到了好多学员的上岸消息。 听过我直播的宝贝们应该都知道,Lisa阿姨的这家职业教育公司(大辰教育),就是帮助各位职场人https://www.shangyexinzhi.com/article/6686729.html
6.创死是什么意思泥头车创死什么梗→MAIGOO知识摘要:创死这个词,很多网友第一次听见的时候一脸懵逼,不知道什么意思。创死,就是谐音撞死,是在动漫圈很流行的一个梗。它起源于某网络动漫主播药水哥,在直播间的一句口头禅“出门被车创死”,其实他说的是“出门被车撞死”,也算得上是一个搞笑的热梗。后面衍生出泥头车创死,泥头车创死什么梗? https://www.maigoo.com/goomai/276578.html
7.超全抖音变现方式总结,附赠一个暴力涨粉方法方式12:知识变现星计划 如果你想当一名知识博主,机会来了,2021年9月,官方亲自下场教你如何当知识主播,教你变现、教你直播,还送你流量,最重要的是完全免费,点击报名按钮,等待抖音官方电话联系; 方式13:抖音小程序 在抖音中搜索“趣玩趣测”,进入小程序主页,选择自己喜欢的测试试玩并录制视频,然后回到测试也,点https://maimai.cn/article/detail?fid=1683806867&efid=X4QQBtdxKZSCZlkItJ4nJA
8.宝藏汽车博主推荐第二弹来啦!这里有来自微博汽车【宝藏汽车博主推荐第二弹来啦! 】这里有国内外新车资讯、豪车超跑的汽车视觉盛宴、车轮上的历史文化。快来关注这些宝藏汽车博主,收集汽车最前沿动态。@陈震同学 @韩路 @PS3保罗 @-_-二师兄 @胖哥杨力 @闫闯 @袁启聪 @胡永平 @YYP颜宇鹏 @38号美系性能控 O汽车宝藏博主推荐@陈震同学 汽车领域头部大V,累计https://weibo.com/5608272697/JhxXukTaX?type=comment
9.续航持久耐时锂铁电池获知名汽车博主韩路推荐近期,充电头网发现知名汽车博主,前汽车之家媒体业务高级总监韩路发表了一篇推荐使用耐时电池的微博。 韩路在微博中描述,有一天晚上自己忘记关猛禽后盖的LED灯了,结果只过了一晚上的时间,装在里面的两节5号电池就没电了。 然后随意装了两节耐时电池。还是同样的情况,在某一天晚上,韩路又忘记关猛禽后盖的LED灯了,结https://www.chongdiantou.com/wp/archives/27716.html