基于FPGA的CAN接口开发

基于FPGA的CAN接口开发基于Xilinx的A7系列FPGA的CAN总线协议开发一、CAN总线协议介绍CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。可以用来满足“多总线通信时,线束的数量过多”、“通过多个LAN,进行大量数据的高速通信”的需要。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化

大家好,又见面了,我是你们的朋友全栈君。

基于Xilinx的A7系列FPGA的CAN总线协议开发

一、CAN总线协议介绍

CAN是 Controller Area Network 的缩写(以下称为 CAN ),是 ISO 国际标准化的串行通信协议。可以用来满足“多总线通信时,线束的数量过多”、“通过多个 LAN ,进行大量数据的高速通信”的需要。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
CAN协议具有以下特点:

  1. CAN 总线是一种多主总线,总线上任意节点可在任意时刻主动地向网络上其他节点发送信息而不分主次,因此可在各节点之间实现自由通信。
  2. CAN 总线采用非破坏性总线仲裁技术。当多个节点同时向总线发送信息时,优先级低的节点会主动退出发送,而最高优先级的节点可以不受影响地继续传输数据,从而大大节省总线冲突的仲裁时间。即使在网络负载很重的情况下也不会发生网络瘫痪情况。
  3. CAN 总线的通信介质可以是双绞线、同轴电缆或光导纤维,选择灵活。
  4. CAN 总线的通信速率可达 1Mbit/s(此时通信距离最长为 40 米),通信距离最远可达 10km(速率在 5kbit/s 以下)。
  5. CAN 总线上的节点信息分成不同的优先级,可以满足不同级别的实时要求,高优先级的数据可以在 134μs 内得到传输。
  6. CAN 总线通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送数据,无需专门的调度。
  7. CAN 总线的数据采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果。
  8. CAN 总线采用 CRC 检验并可提供相应的错误处理功能,保证了数据通信的可靠性。
  9. CAN 总线上的器件可被置于无任何内部活动的睡眠方式,相当于未连接到总线上,可以有效降低系统功耗。

CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。当处于逻辑1,CAN_H和CAN_L的电压差小于0.5V,称为隐性电平(Recessive);当处于逻辑0,CAN_H和CAN_L的电压差大于0.9V,称为显性电平(Dominant)。

在这里插入图片描述

CAN有四种帧类型:

◆ 数据帧:发送单元向接收单元传送数据的帧
◆ 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧
◆ 错误帧:由检测到错误的任何节点发送的帧
◆ 过载帧:在数据或远程帧之间注入延迟的帧

数据帧是唯一实际传输数据的帧,结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B):
➢ 标准帧格式:具有11个标识符位
➢ 扩展帧格式:具有29个标识符位
标准数据帧的构成如下图所示:

在这里插入图片描述

数据帧一般由7个段构成,即:
(1)帧起始:表示数据帧开始的段。
(2)仲裁段:表示该帧优先级的段。
(3)控制段:表示数据的字节数及保留位的段。
(4)数据段:数据的内容,一帧可发送0~8个字节的数据。
(5)CRC段:检查帧的传输错误的段。
(6)ACK段:表示确认正常接收的段。
(7)帧结束:表示数据帧结束的段。

(详细的CAN介绍可以参看 CAN介绍.pdf)

二、xilinx Artix 7系列FPGA介绍

Artix7系列是7系列中的普通青年,相对Spartan7系列则增加了串行收发器和DSP功能,其逻辑容量也更大,适合逻辑一些稍微复杂的中低端应用。
在这里插入图片描述

三、FPGA的相关设计介绍

设计思路一:在FPGA内部编写CAN通信控制器

采用这个设计方案,本质上是在FPGA内部设计了一款CAN通信控制芯片。技术门槛较高。下面这个设计实例仿照的是SJA1000 CAN通信控制器的工作流程,用Verilog语言完成了CAN控制接口的开发。

CAN 总线的通信协议由 CAN 通信控制器完成。CAN 通信控制器由实现 CAN 总线协议部分和微控制器部分的电路组成。下面将通过一个实例讲解如何用 FPGA 实现 CAN 通信控制器的功能。这个实例从功能和结构上完全参照 SJA 1000 CAN 通信控制器。

网址一:基于FPGA的CAN总线控制器的设计(上) – 知乎 (zhihu.com)

网址二:基于FPGA的CAN总线控制器的设计(中) – 知乎 (zhihu.com)

网址三:基于FPGA的CAN总线控制器的设计(下) – 知乎 (zhihu.com)

上述资料是按照SJA1000 CAN通信控制器的内部结构用FPGA进行了重新设计。

设计思路二:用FPGA通过串口或者SPI去配置外部的CAN控制器芯片实现通信。

这个设计方案一般用在单片机作主控的项目中,如果用FPGA作主控,有这么几个缺点,成本高、硬件设计繁琐、受限于控制芯片的性能和发挥不出FPGA的性能。

CAN通信控制芯片:

  • MCP2515(SPI通信)

在这里插入图片描述

  • SJA1000

在这里插入图片描述
在这里插入图片描述

CAN接口驱动芯片:

  • TJA1050芯片引脚图

在这里插入图片描述
在这里插入图片描述

常用的外设电路设计

在这里插入图片描述

如上图所示,CAN_TX和CAN_RX接CAN通信控制芯片,实现对驱动芯片转换后的信息流的处理。

设计参考:

[参考一:xilinx 7系列FPGA分类简介(转)_我看唔人生-CSDN博客](xilinx 7系列FPGA分类简介(转)_我看唔人生-CSDN博客)

[参考二:基于FPGA的CAN总线控制器的设计(上) – 知乎 (zhihu.com)](基于FPGA的CAN总线控制器的设计(上) – 知乎 (zhihu.com))

[参考三:基于FPGA的CAN总线控制器的设计(中) – 知乎 (zhihu.com)](基于FPGA的CAN总线控制器的设计(中) – 知乎 (zhihu.com))

[参考四:基于FPGA的CAN总线控制器的设计(下) – 知乎 (zhihu.com)](基于FPGA的CAN总线控制器的设计(下) – 知乎 (zhihu.com))

[参考五:【正点原子】开拓者FPGA开发板资料 资料盘(A盘)_免费高速下载|百度网盘-分享无限制 (baidu.com)](https://pan.baidu.com/s/11TVUTU89Hu-oTR4jUIn5cA#list/path=%2Fsharelink1102113311042-567528871234027%2F[正点原子]开拓者FPGA开发板资料 资料盘(A盘)%2F[正点原子]开拓者FPGA开发板 资料盘(A盘)&parentPath=%2Fsharelink1102113311042-567528871234027)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149951.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 用计算机亩换算成平方,平方米亩换算(平方米换算亩计算器)

    1平方米(㎡)=0.0015亩1亩=666.6666667平方米(㎡)平方米(㎡,英文:Squaremeter),是面积的公制单位。定义为边长为1米的正方形的面积。在生活中平方米通.使用国家规定的换算公式来进行换算。基本单位数量换算(按使用频率排序)。1亩=666.67平方米100平方米=0.15亩——就是农民朋友口语说的一分半地。1000平方米=1..1亩=60平方丈,1米=0.3…

  • 浏览器无法连接到代理服务器解决办法「建议收藏」

    今天在电脑打开浏览器时,遇到“无法连接代理服务器”提示,网页打不开,但是QQ、微信这些客户端软件可以正常使用。后来,通过设置浏览器的代理服务器,问题解决了。具体操作如下:把代理服务器下面的勾去掉。…

  • python服务器运维步骤_python运维服务器

    python服务器运维步骤_python运维服务器好久没有写东西了.一直做服务器开发需要写一些脚本来控制服务器的启动.本来Windows自带了任务计划,但不是特别方便,还是用python写了一下.需求:在固定的时间启动服务器先看源代码:defstart_process(date):cwd=os.getcwd();globallist_threads;globaliskill;iskill=False;foriinrange(n…

  • 同花顺_排名第一的炒股软件

    同花顺_排名第一的炒股软件洛谷P2652同花顺这是在2017日照夏令营的D1T2,我认为质量相当高的一道题,第一次在赛场上做的时候爆零了,当时态度不很端正,暴力不想打,想投机取巧骗分,还是不要把希望压在不确定的事情上,有多

  • mysql 多行转一列_mysql行转列(多行转一列)

    mysql 多行转一列_mysql行转列(多行转一列)场景比如说一个订单对应多条数据,当状态(status)=1的时候,数量(num)=25,当状态(status)=2的时候,数量(num)=45,现在想用一条sql记录下不同状态对应的数量为多少,如下图所示:期待结果->sql语句示例SELECTtrades_id,MAX(CASEWHENapply_status=1THENpay_changeELSE0END)’nu…

  • Spring中Responsebody注解的作用[通俗易懂]

    Spring中Responsebody注解的作用[通俗易懂]好长一段时间以来都只是写些测试代码,好久没写项目代码了,以至于sping那套东西日渐生疏了。最近在折腾一个小项目,写了一个controller用来响应ajax请求,结果断点调试发现一直返回"404…notresponse…",折腾了快2小时,一直没想到是注解的问题,万般无赖之下上了度娘,方才如梦初醒,特意记录一下,一来提醒一下自己,二来也让跟我遇到一样问题的朋友少受些折磨。这个注解表示…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号