基于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 封装的详解

    Java 封装的详解我们日常使用的电脑主机 把 cpu 内存 主板等等都封装到机箱里面去 假如没有机箱的话的出现什么问题 主机 主板全部都散落在一处 然后开机没有开机按钮 那么需要我们直接操作接跳线才能把电脑开启 这样子的话假如操作不慎的话 会让机器损坏危险 那么假如用机箱封装起来的话 那么就不需要这样子做了 体现了封装的 安全特性 你拿电脑去加内存 可以直接给电脑给维修的人 等他加好内存了之后 你拿到的还是那

    2025年7月1日
    1
  • 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    2022年1月5日
    44
  • Python 36计

    Python 36计

    2021年6月15日
    101
  • Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-Play

    Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-PlayAndroid原生系统真的那么好用吗?这种问题当然是否定的。原生Android(指的是直接基于AOSP构建的而非手机厂商出厂固件修改的第三方ROM,但包括Nexus/Pixel或其它被Google直接支持的手机的可能是闭源的出厂固件)对于适合的人而言是无可替代的,当前几乎无任何定制ROM就与之相比。但是对于更多的中国用户而言,他们从一开始就使用的是定制系统,已经习惯了那一套逻辑和对系统的认知,所以定制系统是更好的选择(但您们最好祈祷一下手机厂商的ROM不要越来越不要脸)。当然.

    2022年6月19日
    82
  • spring boot 系列之六:深入理解spring boot的自动配置[通俗易懂]

    我们知道,springboot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子:Spring的JdbcTemplate是不是在Classpath里面?如果是,并

    2022年2月16日
    36
  • STM32之HAL库的串口接收丢字节_stm32标准库还有更新吗

    STM32之HAL库的串口接收丢字节_stm32标准库还有更新吗1STM32的三种开发方式通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别,所以笔者想以一种非常直白的方式,用自己的理解…

    2025年8月26日
    5

发表回复

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

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