已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f

要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点。

那么CAN2节点首次上电的时候 需要给网络上的其他CAN节点 发送 数据帧(数据帧叫检测ID号帧)

,该数据帧 要求 (网络上与CAN2 节点的物理MAC地址 相同的CAN节点) 发送 响应帧

(该响应帧 是 刚上电的CAN2节点,发送给网络上其他节点的响应帧 ,由其他节点处理以后的应答帧)

若假设CAN2 接点的物理ID 已经与CAN1节点的物理地址一样,则CAN2 节点 一直进入程序死循环,直到改变了CAN节点2 自己的 物理 MAC 地址以后(通过软件固化设置)。 才会跳出死循环,然后进行正常的接收 发送 工作。

本版本程序 ,在这个功能 上 ,采用的是 主机 和 从机 使用的一个程序。

试验平台 两个51单片机

主机 的 ID MAC 地址 是0x1f 从机的 ID MAC 地址 也是 0x1f

单片机的接线方式 如下

1号CAN节点外部5V供电正常以后, 停一段时间,再给外部的5V电源供电 。

则可以看到2号CAN节点的数码管一直显示的是4 表示它一直在循环体里面

基于ICAN 协议

2号CAN节点发送的 请求网络上其他节点 发送的(命令帧) 格式 应该是

下图黄色 为 源节点 编号 即本机的MAC地址

下图绿色 为 目标节点 编号 即邮件要发送的目的地址

下图红色 为 ACK= 0 表示本帧需要应答 是命令帧

ACK= 1 表示本帧是应答帧 不需要应答

下图蓝色为 功能代码 其中 07 表示 功能为 MAC ID 检测

下图紫色为 为资源节点编号

位字节

7

6

5

4

3

2

1

0

字节1

帧信息

FF

1

RTR

0

X

X

0

1

1

0

字节2

帧ID1

ID28

0

ID27

0

ID26

0

ID25

1

ID24

1

ID23

1

ID22

1

ID21

1

字节3

帧ID2

ID20

0

ID19

0

ID18

0

ID17

1

ID16

1

ID15

1

ID14

1

ID13

1

字节4

帧ID3

ID12

ACK

0

ID11

0

ID10

1

ID9

1

ID8

1

ID7

1

ID6

1

ID5

1

字节5

帧ID4

ID4

0

ID3

1

ID2

1

ID1

1

ID0

0

不使用

不使用

不使用

字节6

数据1

               

字节7

数据2

               

字节8

数据3

               

字节9

数据4

               

字节10

数据5

               

字节11

数据6

               

字节12

数据7

               

字节13

数据8

               

03e3e7ee 是命令帧的ID

程序中 发送的命令处理如下

综上 该帧消息的ID号是 03e3e7ee

下面看响应帧 , 本次的主机 从机 发送程序 用的是 一个 程序

当主机1 响应从机2 的响应命令了以后 发送响应帧

主机1里面执行的程序分支如下:

是 主程序中 while(1) 循环的部分

1号机发送的响应帧 与 2号机器 先前发送的应答帧 其实仅仅是 ACK 变为了1

位字节

7

6

5

4

3

2

1

0

字节1

帧信息

FF

1

RTR

0

X

X

0

1

1

0

字节2

帧ID1

ID28

0

ID27

0

ID26

0

ID25

1

ID24

1

ID23

1

ID22

1

ID21

1

字节3

帧ID2

ID20

0

ID19

0

ID18

0

ID17

1

ID16

1

ID15

1

ID14

1

ID13

1

字节4

帧ID3

ID12

ACK

1

ID11

0

ID10

1

ID9

1

ID8

1

ID7

1

ID6

1

ID5

1

字节5

帧ID4

ID4

0

ID3

1

ID2

1

ID1

1

ID0

0

不使用

不使用

不使用

字节6

数据1

               

字节7

数据2

               

字节8

数据3

               

字节9

数据4

               

字节10

数据5

               

字节11

数据6

               

字节12

数据7

               

字节13

数据8

               

该响应帧的ID 号是 037e3f7ee

同时 由于 存在 下面的语句 发送响应帧的 1号 单板 的数码管 变为6

阶段3 刚挂在网络上的2号机器 接收到已经挂在网上的1号机器 的应答以后,

注意 此时 的2 号机器 还处于 do{} while() 循环里, 所以 在中段程序里 执行的

是 if(Check_MACID_Process_Flag==1) {} 分支

同时 他还在执行 while(1) 之前 的 do{} while () 循环里

运行结果如下图

最后 再次用简短的话语总结

CAN通讯 协议的前提 条件 是

发送命令帧 有 源地址(本机的MAC地址1) 和 目标地址

响应命令帧 有 源地址(本机的MAC地址2) 和 目标地址

一般 MAC 地址1 与MAC 地址2 肯定是不相同 。不然无法保证通讯网络里 节点的MAC地址 唯一。

但是 假设 实际情况中出现了 已经工作良好的网络上, 需要挂接上一个新的CAN设备,且该设备与该网络上的某个CAN 节点的MAC地址一致,那么我做程序的时候,这个新挂接上来的 CAN设备 发送 的目标节点的地址与 源节点的地址 肯定是一致的。

因为我要寻找的就是 该网络上 与 挂接的新    CAN设备 物理地址 一致的设备。

同时网络上已有的那个设备(该设备的ID与新挂接设备的ID 冲突)发送的目标地址与源地址也必须与新挂接 设备的ID 一致。

于是 就有了 新挂接CAN设备的发送程序, 与 网络上与新挂接设备地址 冲突的节点 可以共用一个子程序

同时 子程序里面的 源地址 与 目标地址的设定必须 要与当前本机的MAC一致都一样。

请把最终的话语 用清晰 明了的语言描述清楚 不要向下面那样

养成良好的严谨的习惯很重要。

硬件平台的视频 以及 程序 已经放在网盘。以后备用。  含有我拍摄的视频。

CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案的更多相关文章

  1. 在Android4.4上新增加keycode

    keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode.分成两部分,驱动和framework,这里主要讲解framework部分: 一.驱动部分: ...

  2. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  3. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  4. 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

    第9章        RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...

  5. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  6. 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)

    第7章        RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...

  7. 网络协议 2 - IP 地址和 MAC 地址

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  8. 让BLE设备的名称包含MAC地址

    对于研发和测试BLE来说,经常看到同名的设备,是极为不方便的,一大堆设备同时上电会让同事不知道哪一个设备才是自己真正想操作的目标.再说一下小米手环,家中有三支小米手环,打开设备搜索全是“MI”,都不知 ...

  9. Solaris10上如何识别新增加的HDLM LUN

    先在磁盘阵列上将新加LUN映射给主机组,然后在光纤交换机上增加相关zone信息.以下是Solaris10上需要执行的操作步骤. 在Solaris10上重新扫描磁盘 -bash-3.2# cfgadm ...

随机推荐

  1. java获取指定月份有几个星期x,获取指定月份跨了多少个星期

    例如获取2020年5月一共有多少个星期二,一共跨了多少个星期 public class MainTest { public static void main(String[] args) throws ...

  2. Day11 - I - 取石子游戏 HDU - 2516

    1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win".先取者胜输出&q ...

  3. Codeforces 1300E. Water Balance

    给你一个数列,有一个操作,将一段数字变成其和除以个数,求字典序最小的那一个,分析知,求字典序最小,就是求一个不下降序列,但我们此时有可以更改数字的操作,已知已经不下降的序列不会因为操作而变的更小,只有 ...

  4. Java程序员所需要掌握的核心知识

    [Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. https://javaguide.cn/ 推荐使用 https://snailclimb.gitee.io/javag ...

  5. LibreOJ #6008. 「网络流 24 题」餐巾计划

    这道题其实我在刚学 OI 的时候就在一本通上看见过,还记得上面写着"新餐巾一次性买完"之类的话.当时还很稚嫩(现在也是),想了好久,根本想不出来. 学了网络流之后发现这道题的图也是 ...

  6. PLSQL设置显示的字符集及设置

    一.关于PLSQL无法正确显示中文 刚才下载安装了PLSQL Developer 9.0.0.1601 汉化绿色版,执行SQL查询语句,发现显示的数据中只要有中文都会以?表示.经过网上查询得知这是客户 ...

  7. 学习进度-11 RDD 编程初级实践

    一. 请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含 了某大学计算机系的成绩,数据格式如下所示: Tom,DataBase,80 Tom,Algor ...

  8. 线程context

    线程切换的时候,要保存当前运行状态,以便后续切换回来 CONTEXT结构体保存的是一堆寄存器 两个函数 //You cannot get a valid context for a running t ...

  9. robotframework+appium 实现App自动化值环境搭建(一)

    第一步: Cmd命令输入pip install robotframework-appiumlibrary  下载和导入appiumlibrary 第二步: 安装JDK,附件有JDK1.8安装包 第三步 ...

  10. JS控制输入框和文本框字数

    文本框限制字数: HTML结构: JS: $('.advert-title').each(function(){ var TXTlength = $(this).text().length; // 当 ...