CAN总线通信:实现MIC-3680与F28335 CAN总线通信的设置
2016-11-26 00:49
363 查看
博主原创;
实现MIC-3680与F28335 CAN总线通信的设置(MIC-3680CAN模块滤波使用单滤波模式):
CAN2.0A协议: (使用11位标识符)
<1>F28335发送,MIC-3680接收时:
F28335设置:1、设置MSGID寄存器中IDE位为0(即第31位)时,发送标准帧;
2、F28335发送的ID(即MSGID的28-18位)的设置要与MIC-3680的ACR0、ACR1的高三位一致,即ACPCODE的前11位相同,ACR的其它为补填为0,而且ACPCODE必须补充完整为32位二进制;(但是当MIC-3680的ACPMASK全设为FFFFFFFF时,ACPCODE不用必须为32位);
MIC-3680设置: 1、MIC-3680的ACPMASK设为0000FFFF(即通过设置屏蔽位来选择要比较的位数);
注:此时F28335和MIC-2380虽然可以比较32位数(即和发送过来的11位标识符、RTR位、数据场前两个字节(即MDL.all的前16位)比较),但是标识符ID的比较只用了11位,所以双方使用的都是CAN2.0A协议;
<2>F28335接收,MIC-3680发送时:MIC-3680的发送ID设置成与F28335接收的ID(即MSGID的28-18位)相同即可,同时,F28335可以设置屏蔽寄存器LAM使用屏蔽位来选择需要比较的位;
注:MIC-3680接收CAN标准帧时,单滤波配置时,F28335发送的标准帧的11位标识符、RTR位、数据场前两个字节(即MDL.all的前16位)参入滤波,对于参与的滤波位数据,所有ACPMASK为0的位所对应的ACPCODE位必须与参与滤波数据的对应位进行比较,所有比较位都相等则接收消息;
CAN2.0B协议: (使用29位标识符)
<1>F28335发送,MIC-3680接收时:
F28335设置:1、MSGID寄存器中IDE位为1(即第31位),发送扩展帧;
2、F28335发送的ID(即MSGID的28-0位)的设置要与MIC-3680的ACR0、ACR1、ACR2、ACR3的高五位一致
MIC-3680设置: 1、MIC-3680的ACPMASK设为00000007,设置完成即可接收;
<2>F28335接收,MIC-3680发送时:MIC-3680的发送ID(29位)设置成与F28335接收的ID(即MSGID的28-0位)相同即可,同时,F28335可以设置屏蔽寄存器LAM使用屏蔽位;
注:无论双方谁发送或者接收,双方比较的标识符ID位数为29位,所以双方使用的都是CAN2.0B协议;
终极总结:双方正在通信时的协议一定是一致的,只有协议一致才可能互通,毕竟这就是协议的作用;所说的CAN2.0B兼容CAN2.0A协议,应该是说硬件模块上通过自动或者手动设置,可以接收或者发送遵循CAN2.0B和CAN2.0A协议的消息;其实只要发送消息一方发送的帧格式确定了(即选定了使用哪个协议)之后,或者接收方接收的消息帧格式确定了之后,接收双方之间使用的协议就确定了,即比较的标识符ID位数就确定了,如果比较的标识符ID位不一样,则不会接受;在协议确定后,屏蔽寄存器的作用就是用来决定哪些位需要比较,哪些位不需要比较;
实现MIC-3680与F28335 CAN总线通信的设置(MIC-3680CAN模块滤波使用单滤波模式):
CAN2.0A协议: (使用11位标识符)
<1>F28335发送,MIC-3680接收时:
F28335设置:1、设置MSGID寄存器中IDE位为0(即第31位)时,发送标准帧;
2、F28335发送的ID(即MSGID的28-18位)的设置要与MIC-3680的ACR0、ACR1的高三位一致,即ACPCODE的前11位相同,ACR的其它为补填为0,而且ACPCODE必须补充完整为32位二进制;(但是当MIC-3680的ACPMASK全设为FFFFFFFF时,ACPCODE不用必须为32位);
MIC-3680设置: 1、MIC-3680的ACPMASK设为0000FFFF(即通过设置屏蔽位来选择要比较的位数);
注:此时F28335和MIC-2380虽然可以比较32位数(即和发送过来的11位标识符、RTR位、数据场前两个字节(即MDL.all的前16位)比较),但是标识符ID的比较只用了11位,所以双方使用的都是CAN2.0A协议;
<2>F28335接收,MIC-3680发送时:MIC-3680的发送ID设置成与F28335接收的ID(即MSGID的28-18位)相同即可,同时,F28335可以设置屏蔽寄存器LAM使用屏蔽位来选择需要比较的位;
注:MIC-3680接收CAN标准帧时,单滤波配置时,F28335发送的标准帧的11位标识符、RTR位、数据场前两个字节(即MDL.all的前16位)参入滤波,对于参与的滤波位数据,所有ACPMASK为0的位所对应的ACPCODE位必须与参与滤波数据的对应位进行比较,所有比较位都相等则接收消息;
CAN2.0B协议: (使用29位标识符)
<1>F28335发送,MIC-3680接收时:
F28335设置:1、MSGID寄存器中IDE位为1(即第31位),发送扩展帧;
2、F28335发送的ID(即MSGID的28-0位)的设置要与MIC-3680的ACR0、ACR1、ACR2、ACR3的高五位一致
MIC-3680设置: 1、MIC-3680的ACPMASK设为00000007,设置完成即可接收;
<2>F28335接收,MIC-3680发送时:MIC-3680的发送ID(29位)设置成与F28335接收的ID(即MSGID的28-0位)相同即可,同时,F28335可以设置屏蔽寄存器LAM使用屏蔽位;
注:无论双方谁发送或者接收,双方比较的标识符ID位数为29位,所以双方使用的都是CAN2.0B协议;
终极总结:双方正在通信时的协议一定是一致的,只有协议一致才可能互通,毕竟这就是协议的作用;所说的CAN2.0B兼容CAN2.0A协议,应该是说硬件模块上通过自动或者手动设置,可以接收或者发送遵循CAN2.0B和CAN2.0A协议的消息;其实只要发送消息一方发送的帧格式确定了(即选定了使用哪个协议)之后,或者接收方接收的消息帧格式确定了之后,接收双方之间使用的协议就确定了,即比较的标识符ID位数就确定了,如果比较的标识符ID位不一样,则不会接受;在协议确定后,屏蔽寄存器的作用就是用来决定哪些位需要比较,哪些位不需要比较;
相关文章推荐
- TX2平台下can总线收发功能的实现(二)——Linux下can总线编程模型和源码解读
- 软件实现I2S总线数据通信
- can总线(三)--如何通过波形解析can总线数据
- 利用汽车车内CAN总线错误处理机制实现DoS攻击
- CAN总线基础(二)——CAN总线物理层介绍(物理介质及接口介绍)
- CAN通信中地址设置的问题
- MC9S12XS128硬件底层驱动_set_bus_clk.c(总线时钟设置实现)
- 基于STM32的CAN总线通信学习笔记
- ROS CAN总线设备接入(二)can总线数据提取和以ros topic形式发布
- CAN总线基础(一)——CAN总线概述
- can总线(二)--如何测量can总线的波特率
- CAN通信模块的滤波器设置
- 关于Qt移植后环境变量的设置 qt移植到arm中文显示问题解决 实现pc与tiny210 arm开发板 udp通信
- STM32 CAN 通信 滤波设置问题
- 总线接口与计算机通信(五)CAN总线
- can总线(三)--如何通过波形解析can总线数据
- 关于Qt移植后环境变量的设置 qt移植到arm中文显示问题解决 实现pc与tiny210 arm开发板 udp通信(续上)
- can总线(二)--如何测量can总线的波特率
- CAN总线通信硬件原理图(采用TJA1050T CAN总线驱
- PLC实现远程通信的设置