CAN总线入门:过载帧的概念与处理

需积分: 49 26 下载量 37 浏览量 更新于2024-08-08 收藏 1.88MB PDF 举报
"CAN入门书,瑞萨科技,2006年发行,详细介绍了CAN总线的基础知识、协议和特点,适用于初学者" 在CAN(Controller Area Network)通信中,过载帧(Overload Frame)和过载标志(Overload Flag)是两个关键的概念,它们用于管理网络上的通信流量和确保数据传输的有序性。过载标志是一个6位的显性位序列,它的结构与主动错误标志相同,通常用来通知网络上的其他节点当前存在过高的通信负载。当一个节点检测到其无法在规定的时间内发送下一个帧时,它会发送过载标志。 过载界定符则是一个8位的隐性位序列,与错误界定符的结构一致。这个界定符用于区分连续的过载标志,并提供一个明确的信号边界,使得所有节点可以识别过载结束并准备接收或发送新的数据帧。过载帧是由过载标志和过载界定符组成的,如图26所示,其中"R"表示过载标志的重叠部分,"D"表示过载帧界定符。 CAN总线的一个显著特点是其错误检测和恢复机制。错误状态分为主动错误和被动错误两种,错误计数值是衡量节点错误状态的重要指标。当节点的错误计数值超过阈值时,节点将进入故障被动模式,此时其发送的数据帧会带有显性位错误标志,以警告其他节点。 CAN协议基于ISO标准化,主要遵循ISO11898和ISO11519-2。这些标准定义了CAN的数据帧结构,包括数据帧、遥控帧、错误帧和过载帧。数据帧和遥控帧用于传输信息,而错误帧和过载帧则是管理网络状态的特殊帧。帧间隔则是在不同帧之间插入的空闲时间,用于确保节点之间的同步。优先级的决定基于仲裁过程,CAN采用非破坏性仲裁策略,允许节点在数据传输过程中同时发送,而不会中断已经正确传输的数据。 位填充机制是CAN协议中的一个重要特性,它用于防止连续的相同位(连续5个显性位或隐性位)出现,从而避免位同步问题。当连续出现5个相同位时,系统会自动插入一个相反的位,以保持位流的稳定性。错误的种类包括位错误、CRC错误等,而错误帧的输出则根据节点的错误状态来决定。位时序管理着位的传输速率,通过硬件同步和再同步机制保证在不同的网络条件下数据的正确传输。 CAN总线以其高效、可靠的通信能力,广泛应用于汽车电子系统和其他领域。瑞萨科技的CAN入门书详细阐述了这些基础知识,为理解和应用CAN协议提供了全面的指导。

#include <Adafruit_I2CDevice.h> #define DRV2605_ADDR 0x5A ///< Device I2C address #define DRV2605_REG_STATUS 0x00 ///< Status register #define DRV2605_REG_MODE 0x01 ///< Mode register #define DRV2605_MODE_INTTRIG 0x00 ///< Internal trigger mode #define DRV2605_MODE_EXTTRIGEDGE 0x01 ///< External edge trigger mode #define DRV2605_MODE_EXTTRIGLVL 0x02 ///< External level trigger mode #define DRV2605_MODE_PWMANALOG 0x03 ///< PWM/Analog input mode #define DRV2605_MODE_AUDIOVIBE 0x04 ///< Audio-to-vibe mode #define DRV2605_MODE_REALTIME 0x05 ///< Real-time playback (RTP) mode #define DRV2605_MODE_DIAGNOS 0x06 ///< Diagnostics mode #define DRV2605_MODE_AUTOCAL 0x07 ///< Auto calibration mode #define DRV2605_REG_RTPIN 0x02 ///< Real-time playback input register #define DRV2605_REG_LIBRARY 0x03 ///< Waveform library selection register #define DRV2605_REG_WAVESEQ1 0x04 ///< Waveform sequence register 1 #define DRV2605_REG_WAVESEQ2 0x05 ///< Waveform sequence register 2 #define DRV2605_REG_WAVESEQ3 0x06 ///< Waveform sequence register 3 #define DRV2605_REG_WAVESEQ4 0x07 ///< Waveform sequence register 4 #define DRV2605_REG_WAVESEQ5 0x08 ///< Waveform sequence register 5 #define DRV2605_REG_WAVESEQ6 0x09 ///< Waveform sequence register 6 #define DRV2605_REG_WAVESEQ7 0x0A ///< Waveform sequence register 7 #define DRV2605_REG_WAVESEQ8 0x0B ///< Waveform sequence register 8 #define DRV2605_REG_GO 0x0C ///< Go register #define DRV2605_REG_OVERDRIVE 0x0D ///< Overdrive time offset register #define DRV2605_REG_SUSTAINPOS 0x0E ///< Sustain time offset, positive register #define DRV2605_REG_SUSTAINNEG 0x0F ///< Sustain time offset, negative register #define DRV2605_REG_BREAK 0x10 ///< Brake time offset register #define DRV2605_REG_AUDIOCTRL 0x11 ///< Audio-to-vibe control register #define DRV2605_REG_AUDIOLVL \ 0x12 ///< Audio-to-vibe minimum input level register #define DRV2605_REG_AUDIOMAX \ 0x13 ///< Audio-to-vibe maximum input level register #define DRV2605_REG_AUDIOOUTMIN \ 0x14 ///< Audio-to-vibe minimum output drive register #define DRV2605_REG_AUDIOOUTMAX \ 0x15 ///< Audio-to-vibe maximum output drive register #define DRV2605_REG_RATEDV 0x16 ///< Rated voltage register #define DRV2605_REG_CLAMPV 0x17 ///< Overdrive clamp voltage register #define DRV2605_REG_AUTOCALCOMP \ 0x18 ///< Auto-calibration compensation result register #define DRV2605_REG_AUTOCALEMP \ 0x19 ///< Auto-calibration back-EMF result register #define DRV2605_REG_FEEDBACK 0x1A ///< Feedback control register #define DRV2605_REG_CONTROL1 0x1B ///< Control1 Register #define DRV2605_REG_CONTROL2 0x1C ///< Control2 Register #define DRV2605_REG_CONTROL3 0x1D ///< Control3 Register #define DRV2605_REG_CONTROL4 0x1E ///< Control4 Register #define DRV2605_REG_VBAT 0x21 ///< Vbat voltage-monitor register #define DRV2605_REG_LRARESON 0x22 ///< LRA resonance-period register

2023-07-16 上传