STM32CAN总线CRC校验
STM32CAN总线CRC校验
好的,关于STM32中CAN总线的CRC校验,请看以下用中文做的详细解释:
核心概念:CRC(循环冗余校验)是CAN总线物理层和数据链路层的核心机制之一,用于检测传输过程中数据帧或远程帧的数据部分是否出现错误。
1. CRC校验的目的:
- 错误检测: 在高速、可能存在电气干扰的环境下(如汽车电子),确保传输数据的完整性。当接收节点计算的CRC值与发送节点嵌入在帧中的CRC值不一致时,即可判定该帧在传输过程中发生了比特错误。
- 保证通信可靠性: CAN协议依赖可靠的错误检测机制来实现其著名的故障限制特性。CRC是错误检测链条中的关键一环,有助于识别并摒弃损坏的帧。
- 避免错误传播: 防止因线路干扰导致的错误数据被接收节点误认为是有效的命令或信息。
2. CRC的计算(硬件自动完成):
- 谁来计算: STM32内部集成的CAN控制器硬件在发送数据时自动计算数据部分的CRC值,并在接收数据时自动校验收到的CRC值。
- 计算对象: 仅针对数据帧的“数据”部分(0-8字节) 或 远程帧的“数据长度码”部分(实际上没有数据,但长度码参与计算)。 起始位、仲裁场、控制场等不参与本帧的CRC计算(它们有其他检查机制)。
- 多项式: CAN协议规定使用一个特定的15位CRC多项式:
CRC = X¹⁵ + X¹⁴ + X¹⁰ + X⁸ + X⁷ + X⁴ + X³ + 1这个多项式被固化在硬件逻辑中。 - 过程:
- 发送方(TX): CAN控制器将要发送的数据位(SOF之后到数据结束)作为一个长二进制数,使用上述多项式进行除法运算。得到的15位余数就是该帧的CRC校验和(CRC Sequence)。
- 嵌入CRC场: 发送控制器将这15位CRC校验和与一个隐藏的“位填充分隔符”(1位隐性位,用于分隔)一起,追加到数据之后(紧跟在数据段的最后一个位之后),形成CAN帧的“CRC场”。
- 接收方(RX): CAN控制器在接收过程中,对收到的数据部分(从SOF之后到CRC分隔符之前的数据位)使用相同的多项式进行相同的CRC计算。
- 校验和比较:
- 接收方计算出一个新的15位CRC值。
- 接收方将计算出的CRC值与从总线收到的发送方发出的CRC值(即CRC场的内容)进行比较。
- 匹配: 计算值 == 接收值 ➔ 当前帧的数据部分通过了CRC校验。
- 不匹配: 计算值 != 接收值 ➔ 检测到CRC错误。
3. STM32中的相关点和开发注意事项:
- 完全硬件化: 整个CRC计算和比较过程完全由STM32的CAN外设硬件自动完成。开发者不需要在软件(固件)层面去实现CRC算法或进行位操作。这是CAN控制器的基本功能。
- 错误检测与处理:
- 当接收CAN控制器检测到CRC错误时,它会:
- 在该位之后的下一个位(通常就是ACK间隙的第一位)发送一个主动错误标志(6个连续显性位),向总线报告错误。
- 丢弃当前接收的帧。
- 内部错误计数器会相应增加。
- 发送节点如果检测到自己发出的帧没有被正确应答(也是通过ACK机制),或者检测到错误(如被他人报告的CRC错误),它也会尝试自动重发该帧(直到成功或达到错误限制)。
- 当接收CAN控制器检测到CRC错误时,它会:
- 寄存器状态:
- 接收错误计数器(
CAN->RXERR,或等效寄存器,具体名称依赖系列/型号)会因CRC错误而增加。 - CAN的错误状态可以通过状态寄存器(如
CAN->ESR/CAN_ESR)读取,其中包含错误标志位(如BOFF, EPVF, EWGF等)。虽然这些状态位不直接区分是CRC错误还是其他错误(如位填充错误),但总线的错误确认机制就是由CRC错误这类检测点触发的。
- 接收错误计数器(
- 开发者关注点:
- 理解原理: 了解CRC在CAN协议中的作用和工作机制是调试CAN通信问题的基础。如果通信不稳定或出现丢帧,CRC错误是重要的排查方向。
- 调试工具:
- 使用带有CAN协议分析功能的示波器/逻辑分析仪:直接观察波形,看CRC场前后或ACK间隙是否有错误标志出现。这是诊断CRC错误最直接的方式。
- 使用专用的CAN总线分析仪: 可以捕获和解码CAN帧,通常会标识出检测到的错误帧。
- STM32自身诊断: 监控CAN接口的错误状态寄存器(
CAN->ESR,CAN->MSR等)和错误计数器(CAN->REC,CAN->TEC)的变化。连续增加的接收错误计数器可能暗示线路或兼容性问题(如终端电阻、共模电压、波特率),这些都可能导致CRC错误。可以通过相应库函数读取这些值。
- 硬件设计: 确保物理层设计正确(120Ω终端电阻必不可少、阻抗匹配、布线、电源、接地、信号屏蔽)是避免CRC错误等通信问题的关键。电气干扰是CRC错误的主要根源。
- 软件配置: 确保发送方和接收方配置了相同的波特率。波特率不匹配会直接导致CRC等校验失败。配置正确的工作模式(正常模式而不是环回或静默测试模式)。
总结:
STM32的CAN控制器严格遵守CAN协议规范,使用硬件的CRC校验机制(基于多项式 X¹⁵ + X¹⁴ + X¹⁰ + X⁸ + X⁷ + X⁴ + X³ + 1)来自动检测数据帧/远程帧数据部分在传输过程中发生的比特错误。开发者无需软件计算CRC,但需要理解其原理,并利用硬件寄存器和调试工具来诊断因物理层问题(干扰、终端电阻缺失、波特率不一致等)导致的CRC错误,这些问题最终表现为接收错误计数增加或直接检测到错误帧。硬件层的稳定性是避免CRC校验失败的根本保障。
详解TSMaster CAN 与 CANFD 的 CRC E2E 校验方法
面对切换工具链的用户来说,在TSMaster上完成总线通讯中的CRC/E2E校验处理不是特别熟悉,该文章可以协助客户快速使用TSMaster完成
2024-05-25 08:21:21
【STM32Cube_16】使用硬件CRC校验数据(以SHT30为例)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件CRC外设
资料下载
佚名
2021-12-09 12:36:06
关于STM32F4xx的硬件CRC32校验
关于STM32F4xx的硬件CRC32校验一、概述前段时间由于项目所需,要对MCU上某些数据进行
资料下载
敷衍作笑谈
2021-12-03 15:51:08
CRC校验码并行计算的FPGA实现
用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它各种并行计算方法。以经典的LFSR 电路为基础 ,研究
资料下载
姚小熊27
2021-03-28 09:34:24
如何使用51单片机实现CRC校验算法
介绍了CRC(循环冗余码校验)原理及集成混合信号片上系统单片机C8051F的新特性,推导获得以字节为单位的数据序列CRC码递推算法,利用C805
资料下载
佚名
2019-12-17 16:09:41
stm32can通信代码
stm32can通信代码,关于 CAN23.1.1 CAN 电气特性与协议控制器局域网(Controller Area Network,
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览