can总线通信,在嵌入式设计中使用非常广泛,下面是本人在开发过程中对于can总线通信的一些理解,不到之处还望批评指正。
CAN总线原理图如下:
下面是在调试过程中示波器波形:
上面的是clk,下面的rxd,下面的数据解析为:
1 10111100111 11011110000110100101010101100000000
can总线数据分为
显性电平:0
隐性电平:1
从上面可以看出采样的是标准帧
注:can总线在传输过程中如果有连续5个隐性电平,其后会自动插入一个显性电平,所以去掉插入的电平后如下:
1 10111100111 1 11 1110 00011010 010101010110000 0 00 00000000
转换成数据时将电平取反,得到数据帧,因为显性电平是0,而隐性电平是1
1:sof位
10111100111:11位ID,转换成数据为 01000011 000,其中前8位为ID:0x43
1 :RTP
11:r1,r0
1110 :DLC,转换成数据为0001
00011010:数据位,转换成数据位11100101,数据位:0XE5,
010101010110000 :不关心
0 :crc界定
00:ACK
00000000:EOF
而测试代码发送的ID正好是0X43,数据为0XE5,所以总线传输数据正确。