CAN发送器(上)
扫描二维码
随时随地手机看文章
CAN(Controller Area Network)总线作为一种高可靠性、实时性的串行通信协议,已广泛应用于汽车电子、工业控制、智能家居等众多领域,其发送流程的严谨性和高效性是保障整个网络稳定运行的核心。要理解CAN发送流程,首先需要明确其核心设计理念——基于总线仲裁的非破坏性竞争机制,这一机制贯穿于发送过程的每一个环节,确保多个节点同时发送数据时不会造成信息丢失,同时实现优先级的有序调度。
当某个CAN节点需要发送数据时,流程的起点是数据的准备与封装。发送节点的微控制器(MCU)首先将需要传输的有效数据按照应用层协议的要求进行整理,这些数据可能是传感器采集的物理量、执行器的控制指令或是设备状态信息。随后,MCU会将这些有效数据传递给CAN控制器,CAN控制器则根据CAN协议的规范,将数据封装成标准的CAN数据帧。帧结构的构建是这一阶段的关键,包括帧起始、仲裁场、控制场、数据场、CRC场、ACK场和帧结束七个部分,每个字段都有其特定的功能的——帧起始用于同步总线节点,控制场定义数据长度,CRC场用于错误检测,而仲裁场则是决定发送优先级的核心,其包含的标识符(ID)直接影响后续的总线竞争结果。值得注意的是,CAN协议分为标准帧(CAN 2.0A)和扩展帧(CAN 2.0B),两者的仲裁场长度不同,标准帧标识符为11位,扩展帧为29位,这一差异会在后续的仲裁过程中体现,但封装逻辑的本质保持一致。
数据帧封装完成后,CAN控制器并不会立即将数据发送到总线上,而是首先进入总线状态监测阶段。CAN总线采用双线差分信号传输(CAN_H和CAN_L),正常情况下总线处于隐性电平状态(CAN_H和CAN_L电压差接近0V),只有当有节点发送数据时才会切换为显性电平(CAN_H比CAN_L高约2V)。发送节点的CAN控制器通过监测总线电平,判断当前总线是否处于空闲状态——如果总线为隐性电平,说明此时没有其他节点正在发送数据,控制器可以启动发送流程;若检测到显性电平,则表明总线正被占用,节点需要等待,直到总线恢复隐性电平后再尝试发送。这一监测机制是避免总线冲突的第一道防线,确保每个节点都能在合适的时机接入总线。
总线空闲状态确认后,发送节点正式启动数据发送,此时进入最为关键的仲裁阶段。CAN总线的核心优势之一就是其非破坏性仲裁机制,当多个节点同时检测到总线空闲并启动发送时,仲裁过程会自动进行,且不会导致任何数据丢失。仲裁的规则基于标识符(ID)的优先级:标识符数值越小,优先级越高。发送过程中,每个节点都会同时发送自己的标识符,并实时监测总线上的电平与自己发送的电平是否一致。由于显性电平具有优先级高于隐性电平的特性,当两个节点发送的标识符位不同时,发送隐性电平的节点会检测到总线上的显性电平与自身发送的信号不一致,从而判断出存在优先级更高的节点正在发送数据,此时该节点会立即停止发送,切换为接收模式,等待下一次总线空闲;而发送显性电平的节点则继续发送后续位,直到整个标识符发送完成。这一过程持续进行,直到只有一个节点保持发送状态,该节点即获得总线控制权,后续将继续发送数据帧的其余部分。例如,节点A的标识符为0x001(二进制00000000001),节点B的标识符为0x002(二进制00000000010),当两者同时发送时,在第2位(从最低位计数)节点A发送0,节点B发送1,此时总线电平为显性(节点B发送的1),节点A检测到不一致后停止发送,节点B则顺利获得仲裁权,继续发送数据。





