基于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)

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ETH挖矿显卡算力大全

    ETH挖矿显卡算力大全大家买显卡挖ETH,肯定最关心算力了,这里我整理一版,供大家参考,目前只有主流的整理上了,后期会完善更多的供大家参考!欢迎大家加入大力矿工群:621159725  软件下载:百度云盘链接:https://pan.baidu.com/s/1o9tw41k密码:vkyi…

    2022年6月13日
    31
  • 使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证

    使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证这是深度学习课程的第一个实验,主要目的就是熟悉Pytorch框架。MLP是多层感知器,我这次实现的是四层感知器,代码和思路参考了网上的很多文章。个人认为,感知器的代码大同小异,尤其是用Pytorch实现,除了层数和参数外,代码都很相似。Pytorch写神经网络的主要步骤主要有以下几步:1.构建网络结构2.加载数据集3.训练神经网络(包括优化器的选择和Loss的计算)4.测试神经网络

    2022年6月22日
    51
  • qt 当前窗口句柄_QT获取窗口句柄

    qt 当前窗口句柄_QT获取窗口句柄mac安装paramiko$brewinstallopenssl$/usr/local/opt/openssl/bin/c_rehash$exportARCHFLAGS=”-archx86_64&q…用Canvas制作剪纸效果在做剪纸效果之前,先介绍剪纸效果运用到的一些知识:1.阴影:在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影…

    2022年7月14日
    17
  • redis 密码_商用密码知识

    redis 密码_商用密码知识Redis可以设置密码,设置密码后如果不用密码登录,执行命令时会提示错误:下面列举一下Redis密码相关知识。1,在配置文件中设置密码在Redis的配置文件中,可以用requirepass参数配置密码,比如这样:requirepassthisispassword那么密码就是thisispassword。配置文件中设置的密码在启动Redis时就会生效。…

    2022年9月5日
    2
  • ubuntu16.04 安装 dstat,使用 报错「建议收藏」

    ubuntu16.04 安装 dstat,使用 报错「建议收藏」报错hairui@hadoop:~$dstatFile"/usr/bin/dstat",line119exceptgetopt.error,exc:^SyntaxError:invalidsyntaxhairui@hadoop:~$dstat程序“dstat”尚未安装。您可以使用以下命令安装:sudo…

    2022年6月18日
    34
  • html静态网页生成器_网页后端制作

    html静态网页生成器_网页后端制作一、文章编辑页制作当首页制作完毕后,需要显示内容就需要有文章数据,此时我们创建一个文章编辑页增加对应的数据。那么我们创建一个页面,命名为文章发布页:接着我们查看标题部分:此部分为左右两边,左侧为标题提示输入和一个标题的文本输入框,右侧是一个发布按钮,此时我们创建左右两行:由于左右两行需要在同一行显示,那么此时我们就需要设置左右两行的宽度为50%,使其不占满超过100%的宽度居于一行,并且需要设置高度为包裹:接着在左侧添加一个文本以及一个输入框:那么右侧就是一个发布按钮,发布按钮更改

    2022年10月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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