CAN总线在汽车电子中用的最广,汽车中的(ECU (Electronic Control Unit, 电子控制单元)可以通过CAN总线进行通信,同时汽车上还存在OBD(On-Board Diagnostic, 车载诊断系统)接口,使得诊断仪器可以方便地从中获取车辆信息。

OBD-II接口

相关文档请参考https://en.wikipedia.org/wiki/On-board_diagnostics

(截图来自https://en.wikipedia.org/wiki/On-board_diagnostics)

可以看到OBD-II接口包含CAN总线信号。

ISO 15765 CAN (250 kbit/s or 500 kbit/s). The CAN protocol was developed by Bosch for automotive and industrial control. Unlike other OBD protocols, variants are widely used outside of the automotive industry. While it did not meet the OBD-II requirements for U.S. vehicles prior to 2003, as of 2008 all vehicles sold in the US are required to implement CAN as one of their signaling protocols.

pin 6: CAN High

pin 14: CAN Low

CANH signal voltage level: 3.5V (min/max 2.75 to 4.50)

CANL signal voltage level: 1.5V (min/max 0.5 to 2.25)

这里我们可以看到,CAN总线通信速率为250kbps或者是500kbps。

OBD-II协议

相关的文档请看这里:http://www.obdtester.com/obd2_protocols

An OBD2 compliant vehicle can use any of the five communication protocols: SAE J1850 PWM, SAE J1850 VPW, ISO9141-2, ISO14230-4 (KWP2000), and since 2003 also ISO 15765-4/SAE J2480.

1. ISO15765-4 (CAN-BUS)

The most modern protocol, mandatory for all 2008+ vehicles sold in the US. Uses pins 6 and 14 (referenced to signal gound), communication is differential.

Four variants of ISO15765 exist. They differ only in identifier length and bus speed:

ISO 15765-4 CAN (11 bit ID,500 Kbaud)

ISO 15765-4 CAN (29 bit ID,500 Kbaud)

ISO 15765-4 CAN (11 bit ID,250 Kbaud)

ISO 15765-4 CAN (29 bit ID,250 Kbaud)

Fiat/Alfa/Lancia used also fault-tolerant CAN-BUS at 50 kbaud, not compatible with OBD2 standard.

2. ISO14230-4(KWP2000)

Very common protocol for 2003+ vehicles using ISO9141 K-Line. Uses pin 7.

Two variants of ISO14230-4 exist. They differ only in method of communication initialization. All use 10400 bits per second.

ISO 14230-4 KWP (5 baud init,10.4 Kbaud)

ISO 14230-4 KWP (fast init,10.4 Kbaud)

3. ISO9141-2

Older protocol used mostly on European vehicles between 2000 and 2004. Uses pins 7 and optionally 15.

4. SAE J1850 VPW

Diagnostic bus used mostly on GM vehicles. Uses pin 1, communication speed is 10.4 kB/sec.

5. SAE J1850 PWM

Diagnostic bus/protocol used mostly on Ford. Uses pins 1 and 2, communication signal is differential and it’s rate is 41.6kB/sec.

通过OBD-II接口获取车辆信息

由https://en.wikipedia.org/wiki/OBD-II_PIDs#CAN_.2811-bit.29_bus_format可知,OBD-II诊断器最开始的时候,会使用7DFh的CAN ID进行查询,这个CAN ID扮演的类似广播地址。通过这个CAN ID我们就可以知道总线上有哪些ECU。

ECU的物理地址范围为7E0h ~ 7E7h, 而对应的响应地址为物理地址+08h, 所以响应地址的范围为7E8h ~ 7EFh。

当使用7DFh进行查询时,我们就可以得到响应地址,从而推算出物理地址:

1. 通过candump命令将CAN总线中的通讯数据dump出来:

pi@raspberrypi:~ $ sudo ip link set can0 type can bitrate 500000

pi@raspberrypi:~ $ sudo ip link set can0 up

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,0:0,#FFFFFFFF

(000.000000) can0 0C7 [4] 04 00 00 00 '....'

(000.000305) can0 0F9 [8] 80 00 D0 00 00 00 00 00 '........'

(000.000592) can0 199 [8] 0F FF 47 2C B8 D4 00 FF '..G,....'

(000.006405) can0 19D [8] 80 00 3F FE 10 00 00 FF '..?.....'

(000.006672) can0 1AF [3] 00 00 09 '...'

(000.006940) can0 1F5 [8] 0F 0D 00 00 00 00 03 00 '........'

(000.012463) can0 0C7 [4] 04 00 00 00 '....'

(000.012737) can0 0F9 [8] 80 00 D0 00 00 00 00 00 '........'

(000.013007) can0 199 [8] 4F FF 47 2C B8 D3 00 FF 'O.G,....'

当我们只想接收特定ID的信息时,如只接收7DFh及7E0h ~ 7EFh的数据时,我们可以通过如下命令:

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,7df:fff can0,7e0:ff0

2. 查询总线上的ECU:

在另外一个终端发送如下命令:

pi@raspberrypi:~/can-utils $ ./cansend can0 7df#020100

NOTE:

7df#020100: 地址为7dfh, 使用PID type 为SAE Standard, 02: number of additional data bytes, 01: mode – show current data, 00: PID code – 查询01模式下所支持的PID

这时candump命令窗口会显示如下命令:

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,7df:fff can0,7e0:ff0

(000.000000) can0 7DF [3] 02 01 00 '...'

(000.004397) can0 7EA [8] 06 41 00 80 00 00 01 AA '.A......'

这里我们可以看到candump将我们执行的cansend命令的数据也dump出来的,同时可以看到当前CAN总线上有一个ECU: 7EAh, 对应的物理地址为7EAh – 08h = 7E2h,这就意味着我们可以通过如下命令单独给7E2h ECU发送命令:

pi@raspberrypi:~/can-utils $ ./cansend can0 7e2#020100

此时candump窗口显示如下信息:

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,7df:fff can0,7e0:ff0

...

(793.907507) can0 7E2 [3] 02 01 00 '...'

(793.912842) can0 7EA [8] 06 41 00 80 00 00 01 AA '.A......'

NOTE:

7EA [ 8] 06 41 00 80 00 00 01 AA:

- 7EA: PID Type – SAE Standard

- [8]: 8个字节的数据

-06:有6个额外数据: 41 00 80 00 00 01

- 41:Custom mode – show current data

-00: PID code – 对应发送命令

- 80 00 00 01: 所支持的pid:

80 00 00 01

-> 1000 0000 0000 0000 0000 0000 0000 0001

`-- 01h -- Monitor status since DTCs cleared

`-- 20h -- PIDs supported [21 - 40]

执行cansend can0 7e2#020101可以得到如下信息:

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,7df:fff can0,7e0:ff0

...

(1722.647542) can0 7E2 [3] 02 01 01 '...'

(1722.649973) can0 7EA [8] 06 41 01 83 04 00 00 AA '.A......'

执行cansend can0 7e2#020120可以得到如下信息:

pi@raspberrypi:~/can-utils $ ./candump -cae -t z can0,7df:fff can0,7e0:ff0

...

(1894.447987) can0 7E2 [3] 02 01 20 '.. '

(1894.455847) can0 7EA [8] 06 41 20 80 01 80 01 AA '.A .....'

80 01 80 01

-> 1000 0000 0000 0001 1000 0000 0000 0001

`-- 21h -- Distance traveled with malfunction indicator lamp (MIL) on

`-- 30h -- Warm-ups since codes cleared

`-- 31h -- Distance traveled since codes cleared

`-- 40h -- PIDs supported [41 - 60]

相关的参考文档:

http://www.obdtester.com/obd2_protocols

https://en.wikipedia.org/wiki/OBD-II_PIDs

http://qiita.com/suzutsuki0220/items/7cfdeb334efa4ffe3070

https://en.wikipedia.org/wiki/On-board_diagnostics

树莓派can总线_RPi 2B: CAN总线通信 - 通过OBD-II接口获取车辆信息相关推荐

  1. 总线控制内部eep_CAN总线在新能源汽车中的通信网络设计及应用分析

    从事汽车相关行业的小伙伴们,都知道CAN总线,它是当今汽车各电控单元之间通信的总线标准,现在几乎所有的汽车厂家都选择使用CAN总线通信.CAN总线起初便是基于BOSCH公司为了解决汽车的电子控制单元增 ...

  2. 计算机组成原理 第四版 总线的主模块 总线的从模块,唐朔飞计算机组成原理课件3.ppt...

    唐朔飞计算机组成原理课件3.ppt (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 第三章 系统总线3.1 总线的基本概念3.2 总 ...

  3. 连接CPU和计算机的总线,什么是计算机总线 总线和接口的区别

    什么是计算机总线 这个和计算机主机的构造有关系,首先,我们都知道计算机的cpu由两个部分组成,一个是控制单元,另一个是算术逻辑单元,cpu的控制单元负责计算机各个组件的协调与沟通,什么是沟通?就是数据 ...

  4. cancase vector_基于Vector总线设备的CAN总线测试方法概述

    3.3采样点位置测试 测试设备:CANoe.CANStressDR.测试系统架构中需将CANScope旁路处理.测试设备正确接线后(CANStressDR串接在回路中),CANoe发送报文,CANSt ...

  5. 10 计算机组成原理第六章 总线 总线的概念与分类 总线性能指标 总线仲裁 总线操作和定时 总线标准

    文章目录 1 总线的概念与分类 1.1总线的定义 1.2 总线的特点 1.3 总线的特性 1.4 总线的分类 1.4.1 串行总线与并行总线 1.4.2 按总线功能分类 1.5 系统总线的结构 1.6 ...

  6. 计算机主板电路总线类型没有,电脑主板总线是什么意思

    工作原理 假如说主板(Mother Board)是一座城市,那麽总线便像是城市里面的公共汽车(bus),能依照特定行车路线,传送往返绝不停营运的比特(bit).这些线路于同一时间之内均只能专责传送一个 ...

  7. 计算机组成原理 第四版 总线的主模块 总线的从模块,总线的基本概念

    总线和总线上信息传输的特点: 总线是连接多个部件的信息传输线,是各个部件共享的传输介质,而且在某一个时刻,只允许一个部件,想总线发送消息,但是多个部件,可以同时从总线上接受相同的消息. 总线的传输周期 ...

  8. 总线概述及常见总线(转)

    一. 总线概念 所谓总线(Bus),是指计算机设备和设备之间传输信息的公共数据通道.总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享,可以将计算机系统内的多种设备 ...

  9. 六、总线(一)总线概述

    目录 6.1总线的基本概念 6.2总线的分类 6.2.1片内总线 6.2.2系统总线 6.2.3 I/O总线 6.2.4通信总线 6.3系统总线的结构 6.3.1单总线结构 6.3.2双总线结构 6. ...

最新文章

  1. MySQL导出数据反单引号_使用mysqldump导出数据时对字段中包含的单引号的处理
  2. 「译」JUnit 5 系列:基础入门
  3. TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)
  4. ae万能弹性表达式_AE脚本精品表达式合集效果库 iExpressions 3.1.006【资源分享1453】...
  5. Java黑皮书课后题第5章:**5.37(十进制转二进制)编写程序,提示用户输入一个十进制整数,然后显示对应的二进制值(不要使用Integer.toBinaryString(int)方法)
  6. mysql in or索引失效_in 索引失效的问题
  7. 大数据WEB阶段(三)CSS
  8. java a星寻路算法_用简单直白的方式讲解A星寻路算法原理
  9. 判断数正负(信息学奥赛一本通-T1039)
  10. 通过PyTorch中的可视化理解卷积神经网络
  11. Java受检异常和非受检异常
  12. 深度学习图像分类(五): ResNet
  13. 微信小程序之直播功能使用详解
  14. 采集本地HTML数据,火车采集器保存为本地word、excel、html、txt文件方法及文件模板_爬虫软件技术与爬虫软件网页数据采集器门户...
  15. 快慢缓急总相宜|ONES 人物
  16. 教你如何创建一个免费的网站
  17. fluent里常见基础问题(转)
  18. 使用Servlet和JSP开发Java应用程序 ---- 查询四六成绩
  19. 魔兽世界灵魂兽刷新和服务器维护,魔兽世界灵魂兽 刷新地点整理及外观点评...
  20. Android插件化:从入门到放弃

热门文章

  1. 软考-软件设计师 UML建模
  2. metasploit小白教程总结
  3. 101条计算机经典名言(英汉对照版)
  4. 产品岗常见名词公式及分析方法
  5. 19-windows10窗口关闭延迟解决
  6. linux关闭笔记本自带键盘
  7. 纸壳CMS 3.3.6发布升级.Net 5
  8. 怎么样在应用中实现自助报表功能
  9. 计算机地图制图的优势,计算机地图制图
  10. 使用域控批量安装软件