BSP驱动教程-CAN/CANFD/CANopen知识点总结分享

学习知识点整理:

BSP视频教程第25期:CAN/CANFD/CANopen专题,CAN知识点干货分享, 收发执行过程和错误帧处理(2023-01-03) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz!

CAN 总线的前世今生:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=104480

wikibai百科CAN总线:

https://en.wikipedia.org/wiki/CAN_bus

瑞萨CAN入门教程:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=14546

Kvaser入门教程

Controller Area Network (CAN BUS) Protocol

MDK的CAN入门教程

KEIL早期制作的超详细STM32F4 CAN总线调试测试文档 - STM32F429 - 硬汉嵌入式论坛 - Powered by Discuz!

CANFD教程:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=104728

博世的CAN2.0和CANFD规格书

https://www.armbbs.cn/forum.php?mod=viewthread&tid=117358

CAN 总线结构

CAN总线结构分为闭环和开环两种模式,其中闭环的CAN总线网络,两端会链接120 欧 电阻 

开环的CAN总线网络,两根信号线独立,各自串联 2.2 kΩ 电阻,

CAN 电气特性

CAN、CANFD 是差分通信,总线电平分为显性电平和隐性电平,总线必须处于两种电平之一,总线执行逻辑 与 ,显性电平为 0 隐性电平为 1 ;

帧的类型主要有:数据帧,遥控帧,错误帧,过载帧;帧间隔

数据帧

1、起始段:1位的显性位

2、仲裁段:数据优先级的段,从第一个bit开始仲裁,连续输出显性0最多的单元继续发送,仲裁失败转化为接收状态;

3、控制段:DLC字节数

4、数据段:经典can支持0-8 字节,CANFD支持 0- 64 字节;

5、CRC段: 经典can是15bit+1bit的 CRC 界定符(用于位分隔),CANFD是17 或者 21bit + 1 个界定符。CRC的计算方法包括起始段,仲裁段,控制段,数据段,接收方以相同的方式计算CRC的值并进行比较,不一致的话进行通报错误。

6、ACK段: 发送节点在ACK 段会发送一个 1 bit 的隐形1 ,接收节点在收到正确消息后会发送显性0 表示正确接收。

7、结束段:帧结束由7个bit的隐形1 组成

遥控帧

遥控帧用于接收单元向具有相同ID的发送单元请求数据的帧,CANFD 没有遥控帧,经典 CAN 有遥控帧,遥控帧相比于数据帧没有数据段。

错误帧

接收节点或者发送阶段检测出错误时,通知错误的帧

主动错误标志:6个bit的显性位

被动错误标志:6个bit的隐形位

外加8个bit的隐形位构成的错误界定符

发送过程:

1、设置发送节点的ID,DLC 数据等

2、设置CAN控制器,启动发送帧

3、任何节点在总线空闲时,都可以启动发送帧

4、所有节点都会等待接收数据,除了启动数据发送的节点

5、多个节点同时启动数据发送时,将进行仲裁,ID数值小的优先处理,ID大的停止发送,进入接收状态

6、当仅有一个节点发送数据时,若其他节点继续发送数据会导致数据异常

7、当发送节点的数据送达接收节点时,继续发送帧数据的借宿段,之后发送节点会进入接收状态或者继续发送下一帧数据,接收节点将处理收到的数据(开启过滤器的话,会根据过滤设置接收数据)

8、任何节点都可以发送数据,如果没有节点发送数据,总线将会进入空闲状态

相关问题

1、节点如何知道何时发送数据

CAN控制器持续监控总线,当看到所需的空闲位数(ACK位后大于等于11bit时,)此节点开始传输,其他节点也可以开始传输,仲裁将决定实际传输哪个消息。

2、发送错误怎么办?

所有节点,包括发送节点,都会监视总线是否存在错误,如果出错,一个节点或者多个节点将通过总线保持在逻辑0的方式向其他节点发出错误信号至少6个总线周期,此时,所有节点都注意到此错误事件并采取措施。

3、如何添加一个节点

只需要链接CANH 和 CANL 即可,如果CAN控制器还没有初始化,就什么也不会发送,如果已经初始化,CAN波特率必须与现有网络保持一致,否则会出现总线错误。

4、节点测插拔

任何干扰都会由CAN虚无检测方案处理,主动错误消息将导致总线错误和后续重传,如果 TEC 寄存器(发送错误寄存器)值超过128 (会转换为被动错误)或干扰时间较长,则可能会导致总线关闭错误bus-off。

CAN接收过程

接收过程:

1、所有节点除了发送数据的节点和正处于总线关闭状态得节点,都处于监听状态;

2、CAN 数据将按照前面说的发送过程进行数据发送

3、处于监听状态得节点都会收到数据,如果被认为是没有错误的CAN消息,监听节点会应答;

4、如果接收节点设置了CAN过滤器,将会根据过滤设置过滤掉不需要的消息。

5、收到有效消息,将存到 FIFO 等存储空间,用户会根据 DLC 值处理数据大小

相关问题:

1、接收数据丢失:

应用层做处理;

2、总线高负载情况下,怎么减少CAN控制器压力

(1)、使用过滤器,过滤不需要的消息;

(2)、消息间隔发送

(3)、利用FIFO、消息队列,缓冲等机制;

CAN错误处理:

检测到帧错误处理:

1、所有节点将拉低(显性电平0)总线至少6bit

2、超过5个bit相同极性,将触发位填充,这是由硬件完成

3、TEC等于 0xFF时候,总线关闭(一直错不能让你一直发)

4、所有其他节点放弃读取当前帧,REC接收错误计数器寄存器的值加X

错误种类:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值