求:can总线通信如何实现两个节点互相收发,希望是keil.c程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求:can总线通信如何实现两个节点互相收发,希望是keil.c程序相关的知识,希望对你有一定的参考价值。
can控制器:sja1000,温度传感器:ds18b20,MCU是:stc89c52
实现的功能:
1:节点1将采集到的温度向节点2发送数据,节点2可以接受,且通过RS232显示在电脑上
2:通过电脑串口RS232向节点2写数据,且通过can总线发送到节点1上。
你应该自己学着写,碰到问题了再问,这样就具体的某个细节问题,大家才好回答你。
这个要求包含如下几个方面:
1)单片机通过RS232与电脑之间发送、接收数据;
2)51单片机对SJA1000的配置、控制、读写;
3)CAN的节点通讯(协议);
4)51单片机对DS18B20的温度采集。
这些,你会哪些,不会哪些,至少自己一点一点的去啃一下,才有意义追问
一对一的已经做好了,实现了上面全部功能。现在是一对多的不懂,主要是通信协议方面。比如我有一个主节点,三个从节点,分别是1,2,3,现在我想从串口发送01 25 89,表示只发送给1号从节点,但是2,3节点不会受到影响。发送00 25 89这三个数据,三个节点都会收到数据,这些功能怎么实现?只要实现思路就行了。
追答CAN是没有所谓的“主、从”之分的。
CAN是通过前导标签来决定总线的使用权的。如果竞争失败,就转成从模式,接受总线信息。
这个…………更多的,我不想从网上复制过来,建议你好好看一下CAN的基本通信原理,这对于你掌握CAN有很大的好处。
你先看一下基本原理,我们可以再深入讨论,不然我只复制些基本理论,未免太浪费了。
CAN总线标准帧
CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
CAN总线结构
CAN总线规范采用了ISO-OSI(Open System Interconnection Reference Model,开放式通信系统互联参考模型)的三层网络结构,有三种不同的器件与之相对应。
对应物理层的是收发器;
对应数据链路层的是CAN控制器;
应用层上主要是用户特殊的应用,对应的器件是微控制器。
CAN总线标准帧
标准帧 11位标识符。
帧类型 数据帧、远程帧、错误帧和过载帧
-
数据帧:数据帧携带数据从发送器至接收器。总线上传输的大多是这个帧。
-
远程帧:由总线单元发出,请求发送具有同一识别符的数据帧。数据帧(或远程帧)通过帧间空间与其他各帧分开。
-
错误帧:任何单元一但检测到总线错误就发出错误帧。
-
过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。
帧以起始帧(SOF)位开始, SOF 为显性状态,允许所有节点的硬同步。SOF之后是仲裁字段,由12个位组成,分别为11个标识位和一个远程发送请求(Remote TransmissionRequest, RTR)位。RTR 位用于区分报文是数据帧
(RTR 位为显性状态)还是远程帧(RTR 位为隐性状态)。
仲裁字段之后是控制字段,由6 个位组成。控制字段的第一位为标识扩展(Identifier Extension,IDE)位,该位应是显性状态来指定标准帧。标识扩展位的下一位为零保留位(RB0),CAN 协议将其定义为显性位。控制
字段的其余4 位为数据长度码(Data Length Code,DLC),用来指定报文中包含的数据字节数(0 到8 字节)。
控制字段之后为数据字段,包含要发送的任何数据字节。数据字段长度由上述DLC 定义(0 到8 字节)。
数据字段之后为循环冗余校验(CRC)字段,用来检测报文传输错误。CRC 字段包含一个15 位的CRC 序列,之后是隐性的CRC 定界位。
最后一个字段是确认字段(ACK),由2 个位组成。在确认时隙(ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA极客空间 微信公众号
扫描二维码关注杭州卿萃科技FPGA极客空间
以上是关于求:can总线通信如何实现两个节点互相收发,希望是keil.c程序的主要内容,如果未能解决你的问题,请参考以下文章