CAN 通信协议(希望大家多多指点)

一、CAN(Controller Area Network)协议的拥有稳定性、准确性,应用在汽车控制系统和其他重要的如医疗、船舶等工业方面

二、CAN协议两种标准化:
ISO11898 通信速率125Kbps-1Mbps高速通信协议
ISO11519 通信速率在125Kbps以下的低速通信协议

三、CAN协议的特点:
1)多主控制:总线空闲时,所有单元都可以可以发送消息,而两个以上的单元同时开始发送消息,根据标识符(identifer 简称 ID)决定优先级,ID表示访问总线消息的优先级(ID在这并不是表示发送的目的地址),进行逐位仲裁比较,仲裁获胜(表示优先级最高)可连续发送消息,仲裁失利的停止发送消息转为接收工作
2)系统的若软性:与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
3)通信速度较快,通信距离较远
4)具有错误检测、错误通知和错误恢复功能:所以单元都可以检测错误,检测出错误会立即通知其他单元。正在发送消息的单元一旦检测出错误,会强制结束发送,强制结束发送的单元会不断反复重新发送次消息直至发送成功为止(错误恢复功能)。
5)故障封闭功能:CAN总线可以判断错误类型在总线上是暂时的数据错误(如外部噪声),还是持续的数据错误(如单元内部故障,驱动故障等),当总线上发生持续数据错误时,可将此故障的单元从总线上隔离出去
6)连接节点多:理论上可以连接多个单元;单元连接太多造成通信速率下降,反之连接单元少通信速率增加。

四、CAN协议是串行异步通信,由CAN_High和CAN_Low两条信号线,以差分信号的形式进行通讯,下面是总线的两种连接方式:
1)闭环总线(高速通信大约在1Mbps左右,传输距离大约在40m)
2) 开环总线(低速通信在125kbps左右,传输距离远大约是1km)【两根线各串联2.2千欧的电阻】
3)显性电平对应的是逻辑0,为2.5V左右
隐性电平对应的是逻辑1,为0V
在这里插入图片描述
4)通信方式: CAN总线可以挂很多个节点(也可以叫单元)(节点中有CAN的控制器【就是stm32芯片内部的一部分】和CAN收发器组成),连在同一个网络总线上像设置好的波特率等进行通讯

五、CAN协议每个数据的时序分解为 SS(同步段 1Tq)、PTS段(传播时间段1-8Tq)、PBS1段(相位缓冲段1 1-8Tq)、PBS2段(相位缓冲段2 2-8Tq)、SJW(再同步补偿宽度 1-4Tq)
Tq(time quantum):最小时间单位构成

在这里插入图片描述

在这里插入图片描述

在接收过程中检测到总线电平发生了改变时执行重新同步操作。 每当检测到一个边沿(总线电平的改变),收发单元根据SJW值通过增加PBS1段或减少PBS2段,来调整同步。如果发生了超出SJW值的误差时,最大调整量不能超过SJW值。
在这里插入图片描述

调整同步的规则 ?

  1. 在1个位时间里(或者说在2个采样点之间),只允许一个同步(或者说只进行一次同步调整)。
  2. 只有当采样点之前的总线电平和边沿后的总线电平不同时,该边沿才能用于调整同步。
  3. 如果出现隐性电平到显性电平变化的边沿,且条件(1)和(2)满足,将进行同步。
  4. 如果在帧间间隙期间发生隐性电平到显性电平的信号边沿(除了间隙里的第一位),则总会执行硬件同步。
  5. 如果发生从所有其它隐性电平到显性电平的信号边沿,则执行再同步。
  6. 如果发送单元自身输出的显性电平被检测到有延迟,则不执行再同步。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、报文:CAN协议通讯,对数据、操作命令以及同步信号打包

七、CAN协议中五种类型的帧:
数据帧
遥控帧
错误帧
过载帧
间隔帧

在这里插入图片描述

数据帧和遥控帧有标准模式和扩展格式两种
标准模式:有11个位的标识符(ID)
扩展模式:有29个位的ID

注:以数据帧为例
帧起始
仲裁段:组成一个数据包,最小单位是数据位(如SS段)
ID决定了数据帧发送的优先级,也决定了其他节点是否接收这个数据帧
对于优先级最高级ID,先发送
控制段:ide0 标准帧、ide1 扩展帧
数据段:数据的内容,一帧可以发送0-8个字节的数据
CRC段:检查帧的传输错误的段
ACK段:表示正常接收的段
帧结束

数据帧的构成
在这里插入图片描述

数据帧仲裁段的构成
在这里插入图片描述

八、报文测试模式

1)正常模式
在这里插入图片描述
2)静默模式
在这里插入图片描述
在这里插入图片描述
3)回环模式
在这里插入图片描述
在这里插入图片描述
4)静默回环模式
在这里插入图片描述
在这里插入图片描述

九、通过寄存器控制邮箱发送和接收FIFO

在这里插入图片描述

CAN 发送流程为:程序选择 1 个空置的邮箱(TME=1)——>设置标识符(ID),数据长度和
发送数据——>设置 CAN_TIxR 的 TXRQ 位为 1,请求发送——>邮箱挂号(等待成为最高优先级)
预定发送(等待总线空闲) ——>发送——>邮箱空置

在这里插入图片描述

CAN 接收到的有效报文,被存储在 3 级邮箱深度的 FIFO 中。 FIFO 完全由硬件来管理,从而节省了 CPU 的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取 FIFO输出邮箱,来读取 FIFO 中最先收到的报文。 这里的有效报文是指那些正确被接收的(直到 EOF都没有错误)且通过了标识符过滤的报文。前面我们知道 CAN 的接收有 2 个 FIFO,我们每个滤波器组都可以设置其关联的 FIFO,通过 CAN_FFA1R 的设置,可以将滤波器组关联到FIFO0/FIFO1。
CAN 接收流程为: FIFO 空——>收到有效报文——>挂号_1(存入 FIFO 的一个邮箱,这个由硬件控制,我们不需要理会) ——>收到有效报文——>挂号_2——>收到有效报文——>挂号_3——>收到有效报文——>溢出。
这个流程里面,我们没有考虑从 FIFO 读出报文的情况,实际情况是:我们必须在 FIFO 溢出之前,读出至少 1 个报文,否则下个报文到来,将导致 FIFO 溢出,从而出现报文丢失。每读出 1 个报文,相应的挂号就减 1,直到 FIFO 空。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FPGA(Field Programmable Gate Array)是一种可编程逻辑设备,可以在硬件级别上定义和重新配置数字逻辑电路。CAN(Controller Area Network)是一种常用的网络通信协议,广泛应用于汽车和工业领域。 FPGA实现CAN通信协议的过程主要分为两个步骤:硬件设计和软件开发。 在硬件设计方面,首先需要将CAN协议的控制器部分实现在FPGA中。控制器负责管理发送和接收CAN消息的过程。它包括了CAN协议的帧解析、错误检测和错误处理等功能。这些功能需要通过FPGA的逻辑电路来实现。根据CAN协议的规范,可以使用状态机设计来描述控制器的不同工作状态,并通过逻辑电路来实现状态转换和相关功能逻辑。 在软件开发方面,需要编写控制器的驱动程序。驱动程序可以通过FPGA的配置界面进行编程,与硬件部分进行通信,控制CAN消息的发送和接收。驱动程序还需提供CAN消息的解析和打包的功能,以及与其他设备(如处理器或外部存储器)进行数据传输的接口。 在实现CAN通信协议时,还需要考虑到数据的实时性和可靠性。数据的实时性是指在CAN总线上传输的数据时序要符合CAN协议要求,以确保数据的及时性和准确性。数据的可靠性则是指要进行错误检测和纠正,以防止数据传输过程中的错误。 总之,FPGA实现CAN通信协议涉及硬件和软件两个方面的设计和开发工作。通过将CAN协议的控制器部分实现在FPGA中,以及编写相关的驱动程序,可以实现高性能、可靠的CAN通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值