CAN总线通信:实现MIC-3680与F28335 CAN总线通信的设置

博主原创;

实现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位不一样,则不会接受;在协议确定后,屏蔽寄存器的作用就是用来决定哪些位需要比较,哪些位不需要比较;

时间: 2024-10-05 23:27:45

CAN总线通信:实现MIC-3680与F28335 CAN总线通信的设置的相关文章

总线接口与计算机通信(五)CAN总线

? ? CAN网络图示 ? ? CAN的特点? ? ? CAN协议具有以下特点. ?? ? (1)?多主控制? 在总线空闲时,所有的单元都可开始发送消息(多主控制).?最先访问总线的单元可获得发送权(CSMA/CA方式*1).? 多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权. ? ? ?(2)?消息的发送? 在CAN协议中,所有的消息都以固定的格式发送.总线空闲时,所有与总线相连的单元都可以开始发送新消息.两个以上的单元同时开始发送消息时,根据标识符(Identifier?以下

Android BLE与终端通信(三)——client与服务端通信过程以及实现数据通信

Android BLE与终端通信(三)--client与服务端通信过程以及实现数据通信 前面的终究仅仅是小知识点.上不了台面,也仅仅能算是起到一个科普的作用.而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主从关系的client和服务端了.本文相关链接须要去google的API上查看,须要FQ的 Bluetooth Low Energy:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html 可是我们依旧

总线接口与计算机通信(二)SPI总线

[SPI基础知识简介] SPI总线是Motorola公司推出的三线同步接口,用于 CPU与各种外围器件进行全双工.同步串行通讯. 同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO; SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等. SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式. ? ? 源文档 <htt

基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札

这段时间挺忙的,微信企业号等微信系列的教程全部停滞了,原因是我手头上抓着几个项目,加班就不说了,今天刚刚把新接手的项目整到大概%80的样 子吧,准备明天整整,星期一过来直接对接测试,很多朋友跑过来问问题,我是真没时间,请见谅! 今天就分享下这个项目的总结,源码就不粘贴了,因为是商业项目,只是传达下编码思想,希望其他朋友在遇到类似项目的时候有个参考,不至于找不到 一点点思路 使用UDP进行通讯,每条指令不超过1024字节,所有多字节整形数据采用网络字节顺序传输.终端每上报一条指令,平台都将回复一条

Vue.js组件的通信之子组件向父组件的通信

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>componentChildToParentCommunication</title> <script src="js/vue.js"></script> </head> <template id

串口问题——两个设备和电脑串口助手可以正常通信,但这两个设备不能通信

最近遇到了这个比较奇葩的问题. 有两个设备,分别和电脑的串口助手进行串口通信,都没问题,都可以正常通信. 但是,把这两个设备连接起来,却不能通信!! 检查了一下,电平转换没问题,都是符合RS232标准的,否则也不可能跟电脑串口进行通信. 检查是否直通和交叉线的问题,也不是,连线是正常的. 用示波器查看波形,查看了好长一段时间,怀疑是电平的问题,更换了MAX3232周围电路的四个电容为1uF,然后就可以了. 后来又出现了问题,更换一块一模一样的电路板,什么问题也没了!!!!! 所以最后我也不知道是

进程的通信:共享存储、消息传递和管道通信

进程通信是指进程之间的信息交换.PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式.高级通信方法主要有以下三个类. 共享存储 在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换.在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作.V操作),对共享空间的写/读进行控制.共享存储又分为两种:低级方式的共享是基于数据结构的共享:高级方式则是基于存储区的共享.操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具

经典笔试题:线程通信(使用wait,notify实现线程间通信)

经典笔试题: 1.自定义容器,提供新增元素(add)和获取元素数量(size)方法.2.启动两个线程.线程1向容器中新增10个数据.线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止. package com.gaopeng.programming.test2; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * 练习:使用wait,notif

通信对象System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

midifan.com/moduleuser-index-411953.htmmidifan.com/moduleuser-index-411684.htmmidifan.com/moduleuser-index-411920.htmmidifan.com/moduleuser-index-411864.htmmidifan.com/moduleuser-index-411908.htmmidifan.com/moduleuser-index-412000.htmmidifan.com/modu