本帖最后由 wenshijian 于 2013-11-26 11:36 编辑
今天我们来讲CAN总线的高阶应用。在汽车电子领域,现在最多的就是CAN数据读取,最难也最火的应用就是CAN总线反控。当然用的芯片就是STM32,普通8位单片机性能不足,处理不来。
CAN总线反控就是通过CAN总线来向汽车发送一些控制命令,比如升窗命令,开锁关锁命令,响一声喇叭,闪一下灯之类的。这样就可以实现免接线,对于很多汽车电子设备来说,可以省去不少的麻烦。应用对象如:汽车防盗器、汽车一键启动、遥控启动、汽车监管软件、GPS定位、车载导航、倒车雷达等等。
CAN反控最重要的就是找到这些反控命令,或者叫做反控CAN数据。大家知道,读取汽车的CAN数据其实很简单,只要有一个CAN工具加一个OBDII插头就可以读到数据,相关工具有:KVASER、CANoE、XTM、还有周立功的一款忘记型号了,比较好用的还是KVASER。读数据很简单,多数人都会,但是数据那么多,哪些数据是你需要的呢?哪些数据是可以当作反控命令的呢?
其实这就是个技术活了。
不是楼主故意说大话,CAN总线这个东西呢很多人都会,什么编程收发数据之类的都有现成的。但是能搞透的人就寥寥无几。
---------------------------------------------------------------------2013,11,06-----------------------------------------------------------------------------------
好了隔了一个月才想起来要更新,真心不想写得太详细。
其实汽车CAN总线式越来越多,就奔驰来说,一共有12条CAN线,包括车身控制、姿态调整、发动机状态、仪表总线等等,而且数据繁多,识别起来难度极大。相信相关开发人员都会看到就头疼。可是如何识别这些数据,并找到我们想要的控制数据呢?
先来看看图,这个图片是奔驰S350的内部CAN线网络,一共6组双绞线,都是CAN传输数据线,都有数据,但是又都不一样。
也许有人会反驳我说,汽车的CAN总线不在这里,是在OBD哪里的6/14脚,那我就只能无语了。
这6组CAN 总线都有数据,我给大家列出两组来看看:
第一组:(篇幅限制,这里只是一小部分,大家看看时间标签就知道了,这只是几秒钟的数据)
0 204431424 X 1 0 45.778120 R
0 204439616 X 1 0 45.784270 R
0 204447808 X 1 0 45.791120 R
0 205078592 X 5 64 32 255 255 0 45.802110 R
0 205602880 X 4 0 1 123 5 45.810130 R
0 207814720 X 1 128 45.814940 R
0 208314432 X 1 0 45.819780 R
0 208748608 X 1 15 45.825390 R
0 270581824 X 5 0 0 0 4 1 46.179410 R
0 270598208 X 8 0 0 32 0 0 0 32 0 46.195420 R
0 270663744 X 8 16 0 0 0 0 0 0 0 46.200340 R
0 270704704 X 8 0 176 0 18 98 0 0 0 46.140260 R
0 270712896 X 6 0 0 0 0 0 0 46.147910 R
0 270721088 X 8 0 0 0 0 0 0 0 0 46.210320 R
0 270729280 X 8 48 1 0 3 48 1 0 3 46.125120 R
0 270794816 X 8 128 0 138 17 2 7 0 0 46.156470 R
0 270803008 X 1 0 45.951650 R
0 270811232 X 1 0 46.024390 R
0 270827584 X 7 0 0 93 173 162 0 0 45.959870 R
0 270860352 X 2 0 0 45.975550 R
0 270876736 X 7 0 0 0 0 0 0 0 45.867140 R
0 270925888 X 3 0 0 4 45.873840 R
0 270942272 X 8 4 7 0 0 0 0 0 0 46.188090 R
0 271089728 X 3 0 0 0 45.879760 R
0 271319104 X 5 0 0 0 0 0 45.967770 R
这组数据都是扩展帧的数据,数据比较散乱没有一定规律,识别困难,我直接无视。。。125Kbps
第二组数据
977 8 0 53 128 0 0 0 0 0 11.277990 R
1001 8 0 0 160 0 0 0 160 0 11.278230 R
1017 8 128 0 0 0 105 0 253 80 11.282070 R
1019 8 0 0 0 0 0 0 0 0 11.282320 R
1217 8 0 180 122 95 162 0 0 0 11.282560 R
1233 8 0 0 0 1 224 15 0 203 11.282800 R
1265 8 65 140 1 140 0 136 0 38 11.283040 R
1906 8 0 0 0 0 0 0 0 0 11.283290 R
201 8 0 0 0 7 0 0 8 0 11.288290 R
398 8 3 3 0 0 0 0 0 0 11.288530 R
401 8 6 128 70 128 6 116 0 0 11.288770 R
493 8 1 144 0 0 0 0 0 0 11.289020 R
495 8 0 0 0 0 0 0 0 0 11.289270 R
201 8 0 0 0 10 0 0 8 0 11.300800 R
398 8 3 3 0 0 0 0 0 0 11.301050 R
401 8 6 128 70 128 6 115 0 0 11.301280 R
417 8 0 16 64 0 112 87 0 0 11.301530 R
451 8 6 128 6 160 0 0 0 0 11.301770 R
493 8 1 144 0 0 0 0 0 0 11.302010 R
495 8 0 0 0 0 0 0 0 0 11.302260 R
241 4 40 0 0 64 11.309600 R
288 5 0 0 1 185 0 11.312120 R
201 8 0 0 0 13 0 0 8 0 11.313310 R
。。。。
这个是标准帧的数据,也是很大一堆的 500Kbps
当然经验告诉我,这两组数据都不是我要的控制信号,我还必须在其他4组CAN线里面找合适的CAN数据,不过呢,这第二组的数据里面,有一些还是很有用的,比如门得信号、遥控器的信号、车速、里程等,可惜是不能反控。(怎么找到这些信号?呵呵保密这是我的专用工具找的) |