ST MCU CAN模块--TTCAN模式浅析

news2025/5/31 21:32:19

ST MCU CAN模块使用总结

1 前言

​ 传统CAN 采用事件触发消息传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时发送时, 按照消息标识符的优先级顺序, 低优先级消息自动退出, 高优先级消息继续发送。这种介质访问方式提高了网络的利用率和高优先级消息的实时性, 但在重负载CAN 中, 低优先级消息经常由于总线冲突而被迫退出发送, 导致低优先级消息传输时延长, 且传输时延不可预测。

​ 因此, CAN 不适合实时性和可靠性要求特别高或有安全性要求的场合, 如汽车电子钟的X-by-w ir e( 线控技术) 。为此国外有专家自2000 年起研究时间触发机制的CAN --TT CAN。2004 年国际标准化组织将TT CAN 制定为ISO 11898-4国际标准。

2.CAN协议的主要特点

CAN总线协议有CAN1.0、CAN2.0(CAN2.0A、CAN2.0B),其中CAN2.0对比1.0,主要是增加了CAN的扩展帧定义。现在我们所说的CAN通常都是指CAN2.0标准的总线。

CAN-FD协议在原有的CAN协议基础上,增加了可变波特率、扩大数据场、提升校验算法安全性等改进。

2.1 CAN通信的电平传输

而我们现在通常使用的CAN2.0,都是使用高速CAN标准,其物理层电平如图:

在这里插入图片描述

对于高速CAN,总结一下,也就是:

  • CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。
  • CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

关于CAN通信的电平传输,一个重要概念就是:

CAN总线在电平传输上,具有仲裁判断逻辑,优先级为:显性(低电平)>隐形(高电平)!

在理解CAN总线传输的整个过程中,主要就是清楚这一规则在传输时的灵活运用,并定义的各种帧形式。

2.2 CAN网络特点

多主控制:在CAN网络中,任何节点都可以在任何时候发送信息,不需要中央控制单元的调度。
消息仲裁:当两个或多个节点同时发送信息时,通过仲裁机制确保优先级较高的消息能够优先传输。
错误检测和处理:CAN协议具备强大的错误检测能力,包括位错误检测、帧错误检测和CRC(循环冗余校验)等,以确保数据传输的可靠性。
灵活的拓扑结构:CAN网络可以采用总线型、星型或混合型拓扑结构,便于在汽车中布线。
数据传输速率:CAN支持不同的数据传输速率,从最低的10 kbps到最高的1 Mbps,以适应不同的应用需求。
支持多种通信模式:包括点对点、点对多点和广播通信模式。
网络扩展性:通过使用中继器或网桥,CAN网络可以轻松扩展,以支持更多的节点。
成本效益:CAN协议的硬件和软件实现成本相对较低,适合大规模应用。
由于其高可靠性、实时性和灵活性,CAN协议不仅在汽车行业中得到广泛应用,还被用于工业自动化、医疗设备、家庭自动化等多个领域。随着技术的发展,CAN协议也在不断地进行改进和扩展,以满足更广泛的应用需求。

2.3 CAN FD概念:

CAN FD(CAN with Flexible Data-rate)是一种为了满足现代汽车系统中日益增长的数据传输需求而设计的通信协议。它是传统CAN(Controller Area Network)协议的扩展,主要改进包括更高的数据传输速率和更大的数据包大小。

主要特点:

更高的数据传输速率:CAN FD支持的传输速率远高于传统CAN的最大1Mbps,数据段的速率可以达到8Mbps。
更大的数据包大小:CAN FD允许每个数据帧最多携带64个字节,而传统CAN限制为8个字节。
双比特率: CAN FD在帧内使用两种不同的速率,仲裁段(确保正确的消息传输优先级)使用较低的速率,数据段则可以使用更高的速率。
改进的可靠性:通过使用改进的循环冗余校验(CRC)和其他错误检测机制,提高了数据传输的可靠性。
向后兼容性:CAN FD设备可以与仅支持传统CAN的设备在同一网络上通信,尽管在这种情况下不会利用到CAN FD的全部特性。

CAN FD由于其高数据速率和大载荷能力,特别适用于需要大量数据传输的汽车应用,如高清摄像头数据传输、车载信息娱乐系统、高级驾驶辅助系统(ADAS)以及自动驾驶技术。

2.4 CAN的数据格式

CAN的数据定义了有5种帧类型:

在这里插入图片描述

其中,遥控帧也常被称为远程帧。CAN的应用开发者只能使用“数据帧”和“遥控帧”,其他的3种帧类型是由CAN的底层固件自动帮我们在特定场景下进行收发,开发者无需担心也无法直接参与控制。

所以,本文把“数据帧”和“遥控帧”与其他的3种帧类型分别进行介绍。

2.4.1数据帧与遥控帧

关于数据帧,也就是我们最常用的帧类型,用于数据的收发;也是CAN通信里最主要的内容。

而遥控帧,只是CAN网络里的某一节点发送一个遥控帧请求其他的节点反馈数据给自己,关于遥控帧其实在实际使用中,显得很鸡肋,原因有:

1、CAN通信作为一种半双工通信形式,在实际使用中的应用层通信协议往往会定义好数据的应答机制与时间间隔,节点与节点之间只要按照协议规定进行数据的收发即可。

2、遥控帧与数据帧对比,其实就是一条数据长度为0的数据帧而已,只是在帧格式里的仲裁段RTR位为隐性。那么,似乎有数据帧就足够了。

3、遥控帧的概念定义只是一个预定义,所谓的请求其他节点给自己发送数据并不是强制的,与数据帧一样完全根据应用层协议来规定其具体的使用。

综上所述,CAN里定义的遥控帧实际作用不大,而且可以用数据帧配合应用协议的定义,进行替代。所以在后来的CAN-FD中已经取消了遥控帧的定义了。

2.5 什么是TTCAN?

​ TT CA N 是CAN 的高层协议, 其[数据链路层需要帧起始时刻信息。T TCAN 在CAN 的[物理层]和[数据链路]层基础上, 通过调度表实现网路上节点的分时同步通信。网路上各节点取得同步后, 消息只能根据调度表在规定的时间隙传输, 避免了消息传输的冲突、仲裁,消息传输时延短, 且可预知。具体介绍请参考ISO11898-4。

3 STM32中的TTCAN实现

3.1 开启TTCAN模式

STM32是通过主控制寄存器(CAN_MCR)的TTCM位来控制TTCAN模式的使能开关的。CAN_MCR寄存器如下所示:

地址偏移量: 0x00
复位值: 0x0001 0002

在这里插入图片描述

​ 图1

位31:16保留,硬件强制为0。
位15RESET: bxCAN 软件复位 0: 本外设正常工作; 1: 对bxCAN进行强行复位,复位后bxCAN进入睡眠模式(FMP位和CAN_MCR寄存器被初始化为其复位值)。此后硬件自动对该位清0。
位14:8保留,硬件强制为0。
位7TTCM: 时间触发通信模式 0: 禁止时间触发通信模式; 1: 允许时间触发通信模式。
位6ABOM: 自动离线(Bus-Off)管理 该位决定CAN硬件在什么条件下可以退出离线状态。 0: 离线状态的退出是在,软件对CAN_MCR寄存器的INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,就退出离线状态; 1: 一旦硬件检测到128次11位连续的隐性位,自动退出离线状态。
位5AWUM: 自动唤醒模式 该位决定CAN处在睡眠模式时由硬件还是软件唤醒 0: 睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒; 1: 睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对CAN_MSR寄存器的SLEEP和SLAK位清0 。
位4NART: 禁止报文自动重传 0: 按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功; 1: CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)。
位3RFLM: 接收FIFO锁定模式 0: 在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有的报文; 1: 在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃。
位2TXFP: 发送FIFO优先级 当有多个报文同时在等待发送时,该位决定这些报文的发送顺序 0: 优先级由报文的标识符来决定; 1: 优先级由发送请求的顺序来决定。
位1SLEEP: 睡眠模式请求 软件对该位置1可以请求CAN进入睡眠模式,一旦当前的CAN活动(发送或接收报文)结束,CAN就进入睡眠。 软件对该位清0使CAN退出睡眠模式。 当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清0。 在复位后该位被置1-CAN在复位后处于睡眠模式。
位0INRQ: 初始化请求 软件对该位清0可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清0。 软件对该位置1可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置1。

如上,只需要将CAN_MCR寄存器的TTCM位置1则开启了TTCAN模式。此时STM32的CAN模式以TTCAN模式进行通信。

STM32F20x的固件库对应开启TTCAN模式的接口为:

/**

* @brief Enables or disables the CAN Time TriggerOperation communication mode.

* @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be

* sent over the CAN bus.

* @param CANx: where x can be 1 or 2 to to select the CAN peripheral.

* @param NewState: Mode new state. This parameter can be: ENABLE or DISABLE.

* When enabled, Time stamp (TIME[15:0]) value is sent in the last two

* data bytes of the 8-byte message: TIME[7:0] in data byte 6 and TIME[15:8]

* in data byte 7.

* @retval None

*/

void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);

或者在初始化CAN_Init时,将CAN_InitTypeDef的成员CAN_TTCM使能。

3.2 开启时间戳

在TTCAN模式下,CAN硬件的内部定时器被激活,并且被用于产生发送与接收邮箱的)时间戳,分别存储在CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时间累加。内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳。如下:

发送邮箱时间戳:
在这里插入图片描述

​ 图2

如上图:在TTCAN模式下,TIME[15:0]将保留SOF的时间戳。

若通过将TGT位置1则开启了时间戳,此时TIME[15:0]将保存了在发送该报文SOF的时刻,16位定时器的值。同时,在发送长度为8的报文中,时间戳TIME[15:0]是最后2个发送的字节:TIME[7:0]作为第7个字节,TIME[15:8]为第8个字节,它们替换了写入CAN_TDHxR[31:16]的数据(DATA6[7:0]和DATA7[7:0])。为了把时间戳的2个字节发送出去,DLC必须编程为8。

在源码中开启此功能,修改CAN_TypeDef的sTxMailBox[3]的RDTR寄存器。

接收邮箱时间戳:

在这里插入图片描述

接收邮箱时间戳:

​ 图3

在TTCAN模式下,接收邮箱数据长度和时间戳寄存器的TIME[15:0]记录接收到的报文的SOF时间戳。

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

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

相关文章

谷歌浏览器Google Chrome v137.0.7151.41 中文版本版+插件 v1.11.1

一、软件介绍 这个版本解压就可以用&#xff0c;界面是中文的。 保留了核心功能&#xff0c; 二、软件特点 便携性 &#xff1a;解压即可使用&#xff0c;不想用了直接删掉整个文件夹。 增强功能 &#xff1a;通过Chrome增强软件劫持补丁chromev1.11.1 x64 (version.dll)实现多…

国芯思辰| 同步降压转换器CN2020应用于智能电视,替换LMR33620

在智能电视不断向高画质、多功能、智能化发展的当下&#xff0c;其内部电源管理系统的性能至关重要。同步降压转换器可以为智能电视提供稳定、高效的运行。 国芯思辰CN2020是一款脉宽调制式同步降压转换器。内部集成两个功率MOS管&#xff0c;在4.5~18V宽输入电压范围内可以持…

DeepSeek 提示词大全

目录 前言一、提示词基础理论 什么是提示词提示词的类型提示词的基本结构 二、提示词设计原则 明确指令结构化表达情境化需求渐进式引导边界与限制 三、场景化提示词模板 写作创作类角色扮演类信息提取类代码编程类教育学习类商业营销类生活助手类 四、提示词优化技巧 迭代式优…

俄罗斯无人机自主任务规划!UAV-CodeAgents:基于多智能体ReAct和视觉语言推理的可扩展无人机任务规划

作者&#xff1a;Oleg Sautenkov 1 ^{1} 1, Yasheerah Yaqoot 1 ^{1} 1, Muhammad Ahsan Mustafa 1 ^{1} 1, Faryal Batool 1 ^{1} 1, Jeffrin Sam 1 ^{1} 1, Artem Lykov 1 ^{1} 1, Chih-Yung Wen 2 ^{2} 2, and Dzmitry Tsetserukou 1 ^{1} 1单位&#xff1a; 1 ^{1} 1斯科尔…

结构性设计模式之Bridge(桥接)

结构性设计模式之Bridge&#xff08;桥接&#xff09; 摘要 桥接模式是一种结构性设计模式&#xff0c;其核心思想是将抽象部分与实现部分分离&#xff0c;使二者能够独立变化。本文通过汽车产品生产案例&#xff08;产品A/B与颜色红/蓝/黄&#xff09;展示了桥接模式的应用&…

Android 16系统源码_无障碍辅助(一)认识无障碍服务

前言 Android 的无障碍辅助功能&#xff08;Accessibility&#xff09;是一套专为残障用户或特殊场景设计的核心技术框架&#xff0c;旨在让所有用户都能便捷地操作设备。其功能覆盖视觉、听觉、运动能力和认知障碍支持&#xff0c;同时为开发者提供标准化 API 以实现应用适配…

分布式数据库备份实践

在分布式备份中可以采取两种方式进行备份&#xff0c;一种是采用手动编写backup.yml文件进行备份&#xff0c;另外一种是吧备份过程交给备份工具自动执行。如果需要个性化进行备份&#xff0c;建议采用手动编写备份文件方式进行备份。 以下是针对两种备份方式的实践&#xff1a…

如何发布npm包?

如何发布npm包&#xff1f; 1. 注册账号[npm官网](https://www.npmjs.com/)2. 检查 npm 源是否在官方 npm 仓库&#xff0c;如果不在&#xff0c;进行切换3. 检查4. 打包配置5. 发布6. 使用错误&#xff1a;版本更新命令 1. 注册账号npm官网 2. 检查 npm 源是否在官方 npm 仓库…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

OpenCV计算机视觉实战(8)——图像滤波详解

OpenCV计算机视觉实战&#xff08;8&#xff09;——图像滤波详解 0. 前言1. 线性滤波1.1 均值滤波1.2 高斯滤波1.3 拉普拉斯滤波1.4 Sobel 滤波 2. 非线性滤波3. 自定义卷积核小结系列链接 0. 前言 在本文中&#xff0c;我们将深入探索线性与非线性滤波的算法原理、性能优化及…

自动化安全脚本学习

1.目录扫描器 目标&#xff1a;使用python编写一个自动化目录扫描工具&#xff0c;实现简单信息收集&#xff0c;判断目标网站是否存在常见路径。 import requests #用于发HTTP请求 from concurrent.futures import ThreadPoolExecutor #实现多线程扫描# 扫描目标 target h…

传输层协议TCP(上)

上一篇https://blog.csdn.net/Small_entreprene/article/details/148143494?fromshareblogdetail&sharetypeblogdetail&sharerId148143494&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 上文学习了传输层的协议之一UDP&#xff0c;接下来…

Windows下安装并使用kubectl查看K8S日志

【1】安装kubectl 官网文档&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ 下载后得到 kubectl.exe&#xff0c;放到一个目录下&#xff0c;然后配置环境变量。 此时CMD 进入DOS命令窗口 kubectl version【2】配置config文件 其实就是…

Android studio进阶开发(六)--如何用真机通过okhttp连接服务器

我们学过了如何通过okhttp查询网络上已经发布的网页&#xff0c;但我们还需要在做全栈时保证前后端能够交互。 前要课程 okhttp的使用 真机端口连接 安全认证 由于http的安全性较差&#xff0c;在没有安全协议的情况下&#xff0c;使用自己的后端连接会报错&#xff0c;所以…

WeakAuras Lua Script [ICC BOSS 11 - Sindragosa]

WeakAuras Lua Script [ICC BOSS 11 - Sindragosa] 冰冠堡垒Icecrown Citadel 冰龙 辛达苟萨&#xff08;寒冰信标插件&#xff09; 左 &#xff08;绿&#xff0c;黄&#xff09; 中(蓝&#xff0c;紫&#xff09; 右&#xff08;白&#xff0c;橙&#xff09; lua script&…

电脑开机后出现bootmgr is conmpressed原因及解决方法

最近有网友问我为什么我电脑开机后出现BOOTMGR is compressed&#xff0c;这个提示意思是:意思是启动管理器被压缩了&#xff0c;即使重启也无法正常进入系统。原因有很多&#xff0c;大部分是引导出现问题&#xff0c;或选错了启动硬盘所导致的&#xff0c;下面我们来详细分析…

vite配置一个css插件

vite.config.js的plugins执行函数 该例子只是替换一些css,具体内容不重要,主要看形参的运用 // vite-plugin-css.js export default function cssPlugin() {return {name: vite-plugin-css-post, // 插件的名字&#xff0c;Vite 插件必须有名字enforce: post, // 设定插件执…

React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示

话不多说 直接上图 第一步 import { getSystemInfoSync } from tarojs/taro;第二步 render() {const cardBanner getImageUrlByGlobal(member-merge-bg.png);const { safeArea, statusBarHeight } getSystemInfoSync();const NAV_BAR_HEIGHT 44;const navBarHeight NAV…

Spring框架学习day4--Spring集成Mybatis(IOC)

Spring集成Mybatis1.添加jar包&#xff08;pom.xml&#xff09;2.配置sqlSessionFactiory&#xff08;spring.xml)3.再service类中注入Dao代理接口4.测试类5文件结构 Spring集成Mybatis Spring集成Mybatis其核心是将SqlSessionFactory交由Spring管理&#xff0c;并由 Spring管理…

【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” ✍️绪论​&#xff1a; 本章主要介绍了 Qt 中 QGroupBox 与 QTabWidget 控件。QGroupBox 是带标题的分组框&#xff0c;能容纳其他控件&#xff0c;有标题、对齐方式、是否…