分享

扒一扒在CAN总线上怎么获取所需数据——是不是想到了OBD盒子

 Ycp2016 2019-02-16

随着时代的前行,汽车已经步入千家万户,看外形、选配置已经是人们挑选车辆的重要指标。车辆上丰富的电子配置,是不是都挑的花眼了。在模拟电路中,电信号都是要经过电线来传递的,功能越复杂,其所需要的电线数量就会越多。但是我们在拆解车辆后,发现了一个有趣的问题,电线的数量没有我们想象的那么多,是不是很不解。其实,车辆应用了一项总线技术——CAN总线。市面上的OBD盒子都是在这个技术上发展起来的。

汽车检测

CAN总线说的简单点就是两根电线,有的人会疑惑两根线就能把车辆想要传递的数据传递出去?那我们来打个简单的比方,大家都要用到的——手机数据线,数据线拆过的朋友会发现里面其实也只有4根电线,只能充电的就只有2根电线。用排除法来排除充电的两根电源线,剩下来的两根就是数据传输线,传图片、视频、甚至刷机都是靠这两根电线来传递数据的。现在,我们好理解了,汽车上的这两根线也是可以传递车辆需要的各种数据,他们有专用的名称——CAN_H和CAN_L。从字面上解释,就是一根电线高电平,另一根就是低电平,这种差分信号有个好处就是数据传输可靠,两根电线的信号不匹配,说明数据有问题,那就丢掉。CAN总线技术相当的复杂,想要研究透那是需要下苦功夫的,这里我只讲怎么来获取想要的数据。

1.CAN总线波特率:

车辆CAN总线通讯时,会用到一定的数据发送速度,我们所用的设备必须和它保持一致才可以读取数据。过快或过慢,都不能准确的获取每bit的数据。常用的波特率有500kbps和1000kbps,我们可以进行尝试来识别正确的波特率。波特率不正确或接线有问题时,有的车辆会报错的,各大重要部件一起来,比如发动机故障、变速箱故障、ESP故障等等。不用紧张,将我们设备上的CAN总线拔掉,关闭车辆ACC电源,心情愉快的哼首小曲后,再打开ACC电源,是不是故障全没有了。

2.获取协议相关数据:

ISO15765协议规范了一些常用的数据,比如速度、转速、发动机负荷、冷却液温度、电瓶电压等100多个常用的数据。因为这些协议,OBD盒子发展的相当好。想通过ISO15765协议获取想要的数据,比如速度,就必须先往CAN总线上发个请求,数据需要先设置一下:帧类型(标准帧)、帧格式(数据帧)、帧ID(0x7DF)、数据HEX(02 01 0D 00 00 00 00 00),然后发送出去。就会返回一个结果(假如速度102km/h):帧类型(标准帧)、帧格式(数据帧)、帧ID(0x7E8)、数据HEX(02 01 0D 66 00 00 00 00)。协议里面指明第2个字节0D表示该数据为车速,第3个字节的66就是速度。但是车速不是66km/h,这又是为什么呢?是因为数的进制原因,66应表示为0x66,为十六进制数,转换为十进制6*16+6=102,刚好就是我们设定的速度。如果要知道其他参数的数据,就需要去查相关协议。

3.数据破解:

有些数据是不在这些协议里的,甚至是厂商自己设定的标准,这个就需要我们自己去破解。有的数据破解很简单,比如开门情况、具体是哪个门打开问题,由于只涉及到开与关,我们就直接开门和关门,反复进行,看看哪些帧ID的数据在变化。找到后,在反复开关门中仔细的核对是不是我们要找的帧ID,然后再来记录开不同的门所用的数值,开门信号的破解就是这么简单。然而有的数据的破解却非常复杂,有可能研究很久后依然不得其解。

得到想要的数据结构后,后面就可以开始用学习板来获取所需要的数据。如果所有的数据在学习板上都能够从CAN总线上获取,说明数据这块没有问题了,就可以按照电路的实际需要来画电路图。

此文章为爱折腾的小程哥原创,特此声明!喜欢的朋友可以关注我哦!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多