3分钟看懂Microchip 32位MCU CAN模块的配置

文章目录

    • CAN模块系统框图
    • Microchip MCC Harmony下CAN模块配置选项
      • CAN模块工作模式
      • CAN模块中断模式
      • CAN工作速率Bit Timing Calculation配置
      • CAN 接收的配置
      • CAN 发送的配置
      • CAN 过滤器工作流程说明
      • CAN 过滤器的配置

CAN模块系统框图

CAN的英文全称:Control Area Network

Microchip下32位ARM MCU的CAN模块框图如下:
SAM ARM MCU CAN模块

  • 遵循ISO 11898-1:2015标准
    • 兼容Bosch CAN 2.0A, B标准和ISO CAN FD标准
  • CAN消息的存储都放在MCU内部的SRAM,通过高速总线进行访问
    • 需要单个或者2个外部消息RAM

Microchip MCC Harmony下CAN模块配置选项

CAN模块工作模式

在MCC配置模式下,添加CAN模块后进行配置
在这里插入图片描述

  • NORMAL (CAN 2.0B模式):
  • CAN FD模式:
  • Restricted Operation Mode (限制性操作模式):
    • 节点能够接收数据帧和远程帧
    • 能够对接收到的有效帧进行应答
    • 不能发送数据帧、远程帧、主动错误帧和过载帧
    • 当CAN 发送时无法及时从外部RAM中读到数据,会自动进入该模式,需手动进入配置模式,清除ASM标志位
    • 该模式可以用来实现CAN波特率自适应 (工作在不同波特率,当收到有效帧后手动退出该模式)
  • Bus Monitoring Mode: (总线监听模式):
    • 节点能够接收数据帧和远程帧
    • 节点不能传输数据
    • 用来分析CAN总线上的数据
    • 需要单个或者2个外部消息RAM
  • External Loop Back Mode (外部回环模式):
    • 数据帧在内部回环并会发送到总线上
    • 可以用来做硬件测试
  • Internal Loop Back Mode: (内部回环模式):
    • CAN数据帧在内部回环,不发送到总线上
    • 可以用来做自我诊断
      回环模式

CAN模块中断模式

MCAN中断模式配置

  • 开启Interrupt Mode (建议勾选):
    • 提供Tx FIFO/Event, Rx FIFO和中断回调注册接口
    • CAN初始化时开启CAN中断
    • 有CAN中断处理函数,在中断处理中调用注册的回调接口
  • 不选中Interrupt Mode:
    • 提供CAN中断状态查询和清除接口
    • 提供Tx Event和Rx FIFO状态查询接口

CAN工作速率Bit Timing Calculation配置

CAN的工作速率和采样点计算公式如下:
CAN波特率计算公式 =
CAN Clock Freq/Rate Prescaler/(1+TSEG1+TSEG2)
采用点计算公式 =
(1+TSEG1)/(1+TSEG1+TSEG2)
在这里插入图片描述
MCC支持自动计算比特率,只需要输入所需要的工作速率:
在这里插入图片描述

CAN 接收的配置

在这里插入图片描述

  • RX FIFOx配置:
    • 包括RX FIFOx深度、RX FIFOx中断触发门槛
    • 覆盖模式(Overwrite)还是阻塞模式(Blocking)
  • RX Buffer配置:
    • RX Buffer的深度(可以存多少个CAN数据帧)

CAN RX工作在阻塞模式:
阻塞模式

  • 在阻塞模式下RX FIFO工作流程:
    • 开始工作时Get Index和Put Index索引值都为0
    • 新收的数据帧存储在Put Index所指向的FIFO存储区
    • Put Index值自动+1 (0 ~ 63)
    • 当FIFO所有单元存满(Get Index == Put Index)
    • 新接收的数据帧会被丢弃

CAN RX工作在覆盖模式:
CAN覆盖模式

  • 在覆盖模式下RX FIFO工作流程:
    • 开始工作时Get Index和Put Index索引值都为0
    • 新收的数据帧存储在Put Index所指向的FIFO存储区
    • Put Index值自动+1 (0 ~ 63)
    • 当FIFO所有单元存满(Get Index == Put Index)
    • 新接收的数据帧会覆盖最旧的数据
    • Put Index值自动+1

CAN RX工作在FIFO模式和Buffer模式的对比:

  • RX FIFO模式:

    • CAN模块提供2个RX FIFO,FIFO0和FIFO1
    • 每个FIFO最大的存储深度是64(64个完整CAN数据帧)
    • 通过过滤器的设置可指定接收数据帧存储到指定FIFO
    • FIFO存储的数据帧读取遵循先入先出的原则
    • 可以配置为高优先级帧的缓存区
    • 可通过配置将普通帧和高优先级帧存放在不同FIFO
  • RX Buffer模式:

    • CAN模块提供1个专属RX Buffer
    • Buffer最大的存储深度是64(64个完整CAN数据帧)
    • 通过过滤器的设置可指定接收数据帧存储到Buffer
    • 可以指定位置读取存储在Buffer里的数据帧
    • Buffer里存储进新数据后该buffer区域会被锁定直到数据被取走并手动清除标志位信息
    • 可以用来存储CAN的debug message

CAN 发送的配置

在这里插入图片描述

  • TX FIFO 配置:
    • 包括TX FIFO深度(最大32个存储深度)
    • 发送的数据遵循先入先出原则
    • 通过Watermark来设置TX FIFO空闲中断门槛
  • TX Pause配置:
    • 满足AUTOSAR关于transmit cancellation要求
    • 满足ECU某些场合需要优先级控制的要求
  • TX Buffer配置:
    • TX Buffer的深度(最大32个存储深度)
    • 可以往指定的TX Buffer存储单元写入数据
    • 在发送的帧的ID都是相同的情况下,编号越小的TX Buffer具备更高的发送优先级
    • TX Buffer里面帧的ID越小,发送优先级越高
    • TX Buffer和TX FIFO混用的情况下,TX Buffer里面某个帧的ID值如果小于FIFO里面下一个发送帧的ID,则Buffer里的具有更小ID的帧会优先发送

CAN 过滤器工作流程说明

在这里插入图片描述

  • CAN 帧过滤器处理流程:
    • 根据帧ID判定是标准帧还是扩展帧
    • 判断是否为远程帧
      • 未使能远程帧接收则直接丢弃接收到的远程帧
    • 判断是否开启了帧过滤器
      • 未开启任何过滤器则认为接收的帧不匹配
      • 有开启过滤器则执行过滤规则
    • 判断接收的帧是否满足匹配规则
      • 如拒绝接收不满足匹配规则的帧则直接丢弃
      • 满足匹配规则的帧将会被放入接收缓存区
    • 判断接收缓存区是否空闲
      • 缓存区未空则存储接收的数据帧
      • 缓存区满(阻塞模式)则丢弃接收的数据帧

CAN 过滤器的配置

在这里插入图片描述

  • Store in RX FIFOx:
    • 满足过滤规则的帧将存储在指定的FIFO中
  • Set Priority:
    • 接收的帧标记优先级并不存储
    • 会触发HPM(High Priority Message)中断
  • Set Priority and store in RX FIFO x:
    • 满足过滤规则的帧将存储在指定的FIFO中
    • 接收的帧标记为高优先级
    • 会触发HPM(High Priority Message)中断
    • 标记为高优先级的帧需要遵循先入先出原则
  • Store into RX Buffer:
    • 满足过滤规则的帧将存储在对应的Buffer中
    • Buffer中的数据必须及时处理
    • 否则新收的数据会被拒收

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连续时间折线图的前后端实现

技术栈 vue3VChartegg.jsMySQL 需求 根据已有任务数据,获取连续天的任务完成的数量,并且通过接口返回后做成图表。预期数据如下: [{"x": "2024-01-01","y": 0},{"x": "2024-01-02",&q…

Python实现KDJ工具判断信号:股票技术分析的工具系列(8)

Python实现KDJ工具判断信号:股票技术分析的工具系列(8) 介绍算法公式 代码rolling函数介绍完整代码data代码KDJ.py 介绍 KDJ是一种技术指标,用于衡量价格动量,帮助交易者识别趋势的强度和转折点。 先看看官方介绍&am…

Vue入门篇:概念,快速入门,插值表达式,核心特性,基本Vue指令

目录 1.Vue是什么2.快速入门3.插值表达式{{}}1.作用:2.语法:3.插值表达式的注意点: 4.Vue响应式核心特性5.Vue指令 1.Vue是什么 Vue是一个流行的JavaScript框架,用于构建用户界面。它是一种用于构建单页面应用程序(SPA)的渐进式框架&#xff…

机器学习系统的设计

1.混淆矩阵 混淆矩阵作用就是看一看在测试集样本集中: 真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做真正例(TP,True Positive),预测为真,实际为真真实值…

NtripShare2024年第一季度主要技术进展

迷迷糊糊又是一个月没有写点什么,近期想清楚NtripShare在2024的要做什么事情,暂且将NtripShare要做的主要事情为搭建由软件与硬件之间的技术桥梁。 在过去的几年时间里NtripShare对硬件方面一直是规避的态度,今年开始要做一点软硬件搭界的技…

mmcv bug记录

图像分类任务要用到mmcv框架,记录遇到的问题 1. Can‘t import build_from_cfg from mmcv. 解决命令:pip install openmim && mim install mmcv-full 2. python分布式训练 解决方案: 租用多张A40卡,执行下述命令&…

跨站攻击CSRF实验

1.low等级 先利用Burp抓包 将get响应的url地址复制,发到网页上(Low等级到这完成) Medium: 再将抓到的包发到Repeater上,对请求中的Referer进行修改,修改成和url一样的地址,修改成功。 在这里修改后发送 然…

团队协作:如何利用 Gitee 实现多人合作项目的版本控制

文章目录 前言一、名词解释1、Git是什么?2、Gitee、GitHub和GitLab 二、操作步骤1.安装Git2.创建Gitee仓库3.用vscode连接仓库4. 克隆远程仓库 总结 前言 在软件开发中,有效地管理代码是至关重要的。Gitee 是一个功能强大的代码托管平台,提供…

使用clickhouse-backup迁移数据

作者:俊达 1 说明 上一篇文章中,我们介绍了clickhouse-backup工具。除了备份恢复,我们也可以使用该工具来迁移数据。 这篇文章中,我们提供一个使用clickhouse-backup做集群迁移的方案。 2 前置条件 1、源端和目标端网络联通&a…

LeetCode刷题实战5:最长回文子串

题目内容 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba"…

k8s 控制器StatefulSet原理解析

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s概述 2、有状态服务和无状态服务…

von Mises-Fisher Distribution (代码解析)

torch.distribution 中包含了很多概率分布的实现,本文首先通过均匀分布来说明 Distribution 的具体用法, 然后再解释 von Mises-Fisher 分布的实现, 其公式推导见 von Mises-Fisher Distribution. 1. torch.distribution.Distribution 以下是 Uniform 的源码: cl…

C++语言·类和对象(下)

1. 初始化列表 我们回忆上节写的MyQueue类,其中有两个栈类和一个int类型,栈类因为其特殊性,要开空间,所以我们必须手搓Stack类的构造函数。但是正常来说MyQueue自动生成的构造函数会调用自定义类型的默认构造函数,也就…

基于SpringBoot+Vue的体检管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:12张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue html 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&…

浏览器渲染流程中的 9 个面试点

记得 08 年以前,打开网页的时候一个页面卡死整个浏览器凉凉。 这是因为当时浏览器是单进程架构,一个页面或者插件卡死,整个浏览器都会崩溃,非常影响用户体验。 经过了一代代工程师的设计,现代浏览器改成了多进程架构&…

异常检测 | SVDD支持向量数据描述异常数据检测(Matlab)

异常检测 | SVDD支持向量数据描述异常数据检测(Matlab) 目录 异常检测 | SVDD支持向量数据描述异常数据检测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 用于一类或二元分类的 SVDD 模型 多种核函数(…

医学临床预测模型发展新趋势-并联式

医学临床预测模型发展新姿势-并联式 现有的预测模型是对单个结局指标进行分类或者回归,得出最终的结论,而辅助医生进行临床决策。众所周知,临床决策过程中,医生通常会考虑多个结局指标来做出最终的决策;临床研究中也通…

网络编程初步

协议: 一组规则 分层模型结构: OSI七层模型:物、数、网、传、会、表、应 TCP/IP 4层模型:网(链路层/网络接口层)、网、传、应 应用层:http、 ftp、 nfs、 ssh、 telneto o .传输层:TCP、UDP 网络层&…

【干货精品分享】Elasticsearch 6.7 Should 子语句的失效

在ES 使用多条件 查询,并且是多个条件只需要满足部分条件的时候,我们通常会使用到ES的should查询 GET /trademark_query_index/_search {"query":{"bool" : {"must":[{"match" : {"origin": {"…

229 基于matlab的网络入侵检测问题

基于matlab的网络入侵检测问题,主要使用有监督的Kohonen神经网络。有监督Kohonen神经网络的网络结构为38-36-5,网络训练结果受权值影响相当大。在算法初期,本文引入杂草算法对Kohonen网络进行权值寻优。文件包括:入侵数据(data.ma…