1. CAN 总线
1.1 简介
1.2 特征
-
汽车各个电子单元相互通信、共享数据
-
允许多个ECU公用一根导线进行通信
-
嘈杂、拥挤、慢速版的以太局域网
-
流量是UDP而不是TCP
1.3 数据报文
-
仲裁标识符
-
数据长度代码
-
数据领域
-
帧起始(Start of Frame-SOF):1bit,显性信号,表示数据帧的开始
-
仲裁段(Arbitration Field):包括两部分:标识符位(Identifier field-ID)和远程发送请求位
-
标识符位,功能性的地址,通过标识符来过滤数据。标准格式的数据帧的标识符(CAN-ID)长度为11位(11 bits),ID10ID0,ID10为最高权重位(MSB),ID0为最低权重位(LSB),按照ID10ID0的顺序进行传输。CAN协议还规定:前7位最高权重位(ID10~ID4)不能都为“隐性”信号。
-
远程发送请求位,1bit。区分数据帧还是远程帧。
-
控制段(Control Field):6bits,拓展标识位(1bit),保留位(1bit),数据长度编码位(4bit)
-
数据段(Data Field):发送数据的内容,最多8个字节
-
循环校验位(CRC Field):循环校验序列和界定符
-
循环校验序列,15bit,用于校验传输正确
-
界定符,1bit,隐形信号,表示循环校验序列结束
-
确认段(ACK Field):确认位和界定符
-
确认位:1bit,节点收到正确的CRC序列,发送端的ACK位被置位
-
界定符,1bit,隐形信号
-
帧结束(End of Fram-EOF):7bit,隐性信号,表示帧结束
2. 仪表模拟器
2.1 安装
-
依赖
$ sudo apt-get install libsdl2-dev libsdl2-image-dev can-utils
-
添加虚拟网卡
$ sudo modprobe can
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set up vcan0
2.2 运行
-
汽车仪表盘
$ ./icssim vcan0
-
控制器
$ ./controls vcan0
2.3 操作仪表盘
|
|
|
|
|
|
|
|
|
|
|
|
3. CAN总线数据获取
3.1 CAN报文分析
3.2 CAN-Utils工具
3.2.1 candump
-
输出显示
$ candump vcan0
-
CAN帧转储
$ candump -l vcan0
3.2.2 canplayer
$ canplayer -l candump*.log
3.2.3 cansniffer
$ cansniffer -c vcan0
3.2.4 cansend
$ cansend vcan0 039#000C
4. 挑战
4.1 控制左右转向灯
$ cansend vcan0 188#01000000
$ cansend vcan0 188#02000000
$ cansend vcan0 188#03000000
4.2 控制开关门
$ cansend vcan0 19B#00000E000000
$ cansend vcan0 19B#00000D000000
$ cansend vcan0 19B#00000B000000
$ cansend vcan0 19B#000007000000
$ cansend vcan0 19B#000000000000
$ cansend vcan0 19B#00000F000000
4.3 油门控制
$ cansend vcan0 244#0000003800
$ cansend vcan0 244#000000B000
5. 总结
谢谢
观看
原文始发于微信公众号(山石网科安全技术研究院):车联网安全-汽车仪表模拟器使用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论