发布网友
共1个回答
热心网友
Controller Area Network(CAN)作为ISO国际标准化的串行通信协议,专为汽车领域设计,旨在减少线束数量和通过多条线路高速传输大量数据。CAN支持两种类型:低速CAN(ISO11519)和高速CAN(ISO118),其中高速CAN通信速率可达1Mbps,低速CAN则在10kbps至125kbps之间。CAN FD的通信速率更是提升至5Mbps,同时支持经典CAN通信,遵循ISO118-1规范。CAN总线由两根线组成(CANL和CANH),允许连接多个节点,低速环境可支持20个节点,高速环境则在30个以内。
CAN总线的物理层使用差分信号进行数据传输,通过检测CAN_H和CAN_L的电位差来判断总线电平。总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),其中显性电平具有优先权。CAN收发器芯片(如TJA1050、TJA1042、SIT1050T)用于实现这一功能,SIT1050T支持高速CAN通信,速率可达1Mbps。
CAN协议层通过“帧”的形式进行通信,包含数据帧、遥控帧、错误帧、过载帧和间隔帧,其中数据帧最为常用。数据帧由7段组成,包括仲裁段、控制段、数据段、CRC段和ACK段,其中仲裁段包含11位ID,遥控帧不包含数据段,CRC段用于数据校验,ACK段包含ACK位,表示正确的应答。
CAN位时序采用“位同步”机制,实现电平的正确采样,数据传输由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段由多个位时序Tq组成。数据同步分为硬件同步和再同步,硬件同步在帧起始信号发送时进行,而再同步则利用普通数据位的边沿信号进行。再同步过程中,PBS1和PBS2中增加或减少的时间称为“再同步补偿宽度(SJW)”,范围为1至4Tq。SJW较大时,吸收误差能力更强,但通信速度会降低。
CAN总线仲裁遵循“先发制人”的原则,当多个单元同时发送时,仲裁段的ID第一位开始仲裁,连续输出显性电平最多的单元可继续发送,首先出现隐性电平的单元将失去对总线的占有权,转为接收状态。
STM32 CAN控制器(bxCAN)支持CAN2.0A和CAN2.0B Active版本协议,波特率最高可达1Mbps,具有时间触发信号、3级发送邮箱、3级深度的2个接收FIFO和可变过滤器组(最多28个)等功能。工作模式包括初始化模式、正常模式和睡眠模式,测试模式包含静默模式、环回模式和环回静默模式。发送处理根据邮箱报文的标识符优先级决定,接收处理则需要数据帧直到EOF段最后一位无错误,并通过过滤器组对标识符进行过滤。
CAN控制器配置主要通过CAN_MCR、CAN_BTR、CAN_(T/R)IxR、CAN_(T/R)DTxR、CAN_(T/R)DLxR、CAN_(T/R)DHxR、CAN_FM1R、CAN_FS1R、CAN_FFA1R、CAN_FA1R和CAN_FxR(1/2)等寄存器完成。HAL驱动关键结构体用于波特率配置和接收FIFO锁定处理。在配置时,根据传输数据位宽(标准或扩展)调整ID的高16位和低16位获取,并确保IDE和RTR位的正确配准。CAN基本驱动步骤包括初始化、配置波特率、配置过滤器等。实际编程中,需要根据项目需求和环境选择合适的CAN配置策略和操作方法。