正常模式:CAN 总线的 “核心通信状态”
扫描二维码
随时随地手机看文章
正常模式是 CAN 节点最主要的工作模式,也是 CAN 总线实现 “多节点实时通信” 的基础。在该模式下,CAN 控制器具备完整的 “发送 - 接收 - 仲裁 - 错误处理” 能力:既能主动发送数据帧、远程帧,也能接收总线上的所有帧;在多节点同时发送时,通过 “非破坏性位仲裁” 机制(显性位优先于隐性位)决定发送优先级,避免总线冲突;同时通过 “位错误”“填充错误”“CRC 错误” 等检测机制,实时监控通信质量,若发现错误则发送错误帧,并更新错误计数器。正常模式的核心目标是 “高效、可靠地完成数据交互”,是汽车 ECU、工业传感器、智能设备等节点的默认工作模式。
(一)正常模式的技术细节:仲裁与错误处理的闭环
正常模式下,CAN 控制器的工作流程可分为 “发送流程” 与 “接收流程”,两者均依赖总线的 “显性位(Dominant Bit,逻辑 0)” 与 “隐性位(Recessive Bit,逻辑 1)” 交互规则。
在发送流程中,节点首先检查总线状态:若总线为隐性位(空闲),则开始发送帧起始位(显性位);若总线为显性位(其他节点正在发送),则监听总线,参与仲裁。仲裁阶段,发送节点将自己的标识符(ID)位与总线位逐位比较:若发送的是显性位,而总线位为隐性位,说明存在更高优先级节点(ID 更小的节点,因 CAN ID 越小优先级越高),则立即停止发送,转为接收状态;若所有位比较一致,则继续发送后续字段(控制场、数据场、CRC 场等)。这种仲裁机制的 “非破坏性” 体现在:优先级最高的节点能持续发送,无需重新发送,确保通信的实时性 —— 例如,汽车的 “刹车信号帧”(ID=0x001)优先级高于 “车窗控制帧”(ID=0x100),紧急刹车时,刹车信号能优先占用总线,避免延迟导致安全风险。
在接收流程中,节点始终监听总线,当检测到帧起始位时,开始同步总线时钟,逐位接收帧字段。接收过程中,控制器会实时进行错误检测:若接收位与总线位不一致(位错误)、连续 5 个相同位未插入填充位(填充错误)、CRC 校验不匹配(CRC 错误),则立即发送 “错误帧”(6 个显性位的错误标志 + 8 个隐性位的错误界定符),并根据错误类型更新错误计数器(如位错误会使 TEC 或 REC 加 8)。若接收帧的 ID 与自身 “验收滤波器” 配置匹配(如掩码滤波后的 ID 一致),则将数据存入接收缓冲区,同时置位 “接收完成标志”,通知 MCU 读取数据;若不匹配,则忽略该帧,不占用 MCU 资源。这种 “过滤 - 接收 - 错误处理” 的流程,确保节点仅接收所需数据,同时对总线错误做出快速响应。
(二)正常模式的应用场景:从汽车到工业的实时通信
正常模式是 CAN 系统的 “默认工作状态”,所有需要主动参与总线通信的节点均运行在此模式下。在汽车电子中,发动机 ECU、ABS 控制器、车身控制模块(BCM)等核心节点均工作在正常模式:发动机 ECU 每 10ms 发送一次 “转速 - 水温 - 油压” 数据帧,ABS 控制器在检测到车轮抱死时发送 “刹车控制帧”,BCM 接收 “车门开关帧” 并发送 “车灯控制帧”,各节点通过正常模式下的仲裁机制,确保紧急信号(如 ABS 帧)优先传输,非紧急信号(如车窗控制帧)有序排队。
在工业控制中,PLC、伺服驱动器、传感器节点也以正常模式为主:温度传感器每 50ms 发送一次 “温度数据帧”,PLC 接收后发送 “电机调速帧” 至伺服驱动器,伺服驱动器根据指令调整转速。正常模式下的错误处理机制在此场景中尤为重要 —— 若传感器与 PLC 之间的总线出现短路(导致连续位错误),传感器的 TEC 会快速增长,当 TEC 超过 96 时,控制器会进入 “错误主动模式”(Error Active Mode),发送主动错误帧提醒其他节点;若错误持续,TEC 超过 255,则切换至总线离线模式,避免故障传感器持续发送错误帧,干扰工业生产线的正常通信。