图文教学读懂can报文
can报文协议是汽车工程最基础的知识点。
DBC协议
can有两种定义:Intel格式与Motorola格式,主要的区别是能不能跨字节,我们用主流的摩托摩拉格式
以一个报文ID 0x121为例,他的解析如下
你需要列一个下面的表格
横坐标代表位(bit),使用2进制
纵坐标代表字节(byte),一个字节等于8位,它通常被写成两个16进制数的形式,即我们常见的报文数据
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
0 | 7 | <- | - | - | - | - | - | 0 |
1 | 15 | <- | - | - | - | - | - | 8 |
2 | 23 | 16 | ||||||
3 | … | |||||||
4 | … | |||||||
5 | … | |||||||
6 | … | |||||||
7 | … |
以电池组总电压这条来说
占16个位(bit)
即两个字节 比如电压是30v 转化成16进制就是0x0BB8 算成10进制是3000(精度0.01)二进制是0000 1011 1011 1000
填在表中就是
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
起始位是8,终值位是7
注意位的ID是从右往左读的! 所以从上图可以看到 从低位到高位即是从8->15,再从0->7 这就变成了所谓的8>7了
7 <-- 0
15 <-- 8