通讯协议--CAN控制器局域网

📅 2026/7/1 18:56:23 👤 编程新知 🏷️ 技术资讯
通讯协议--CAN控制器局域网 文章目录一、CAN简介1、CAN总线特征2、主流通信协议对比二、物理层1、CAN硬件电路2、CAN电平标准3、CAN收发顺TJA1050(高速CAN)1.引脚定义2.发送通路TXD → CANH/CANL3.接收通路CANH/CANL → RXD4、CAN特理层特性1.基础参数对比2.总线电平规范核心区分点三、CAN总线帧格式CAN协议规定了以下5种类型的帧1、数据帧1.数据帧构成2.数据帧的发展历史2、遥控帧3、错误帧4、过载帧5、帧间隔6、位填充7、波形实例四、速率同步1、接收方数据采样2、接收方数据采样遇到的问题3、位时序4、硬同步5、再同步6、波特率计算五、资源分配仲裁机制1、多设备同时发送遇到的问题2、资源分配规则1 - 先占先得3、资源分配规则2 - 非破坏性仲裁4、非破坏性仲裁过程5、数据帧和遥控帧的优先级6、标准格式和扩展格式的优先级六、错误类型1、错误类型2、错误状态3、错误计数器一、CAN简介CAN总线Controller Area Network Bus控制器局域网总线。CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线广泛应用于汽车、嵌入式、工业控制等领域。核心特点多主竞争、差分信号、短帧传输、错误自检、故障节点自动隔离。1、CAN总线特征两根通信线CAN_H、CAN_L线路少。差分信号通信抗干扰能力强。高速CANISO11898125k~1Mbps, 40m。低速CANISO1151910k~125kbps, 1km。异步无需时钟线通信速率由设备各自约定。半双工可挂载多设备多设备同时发送数据时通过仲裁判断先后顺序。11位/29位报文ID用于区分消息功能同时决定优先级。可配置1~8字节的有效载荷。可实现广播式和请求式两种传输方式。应答、CRC校验、位填充、位同步、错误处理等特性。2、主流通信协议对比名称引脚双工时钟电平设备应用场景UARTTX、RX全双工异步单端点对点两个设备互相通信I2CSCL、SDA半双工同步单端多设备一个主控外挂多个模块SPISCK、MOSI、MISO、SS全双工同步单端多设备一个主控外挂多个模块高速CANCAN_H、CAN_L半双工异步差分多设备多个主控互相通信二、物理层1、CAN硬件电路每个设备通过CAN收发器挂载在CAN总线网络上。CAN控制器引出的TX和RX与CAN收发器相连CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连。高速CAN使用闭环网络CAN_H和CAN_L两端添加120Ω的终端电阻。低速CAN使用开环网络CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻。2、CAN电平标准CAN总线采用差分信号即两线电压差VCAN_H-VCAN_L传输数据位。高速CAN规定电压差为0V时表示逻辑1隐性电平。电压差为2V时表示逻辑0显性电平。低速CAN规定电压差为-1.5V时表示逻辑1隐性电平。电压差为3V时表示逻辑0显性电平。3、CAN收发顺TJA1050(高速CAN)1.引脚定义引脚号名称功能说明1TXD发送数据输入连接 MCU/CAN 控制器 TX 引脚TTL 电平2GND芯片电源地3VCC5V 供电电源输入4RXD接收数据输出连接 MCU/CAN 控制器 RX 引脚TTL 电平5Vref参考电压输出值 0.5VCC可给总线共模偏置6CANLCAN 总线差分低信号线7CANHCAN 总线差分高信号线8S模式选择引脚静默 / 正常模式2.发送通路TXD → CANH/CANL信号流向TXD输入 → TXD 显性超时定时器 → 波形整形缓冲 → DRIVER 驱动级 → CANH/CANL 总线输出。TXD 显性超时保护TXD DOMINANT TIME-OUT TIMER若 TXD 持续拉低持续发送显性 0超过预设时间芯片自动关断输出驱动避免 MCU 死机导致总线永久占用、整条 CAN 瘫痪。TEMPERATURE PROTECTION 过热保护芯片内部温度超标时切断驱动级输出防止烧毁芯片。DRIVER 输出驱动电路TXD 低电平逻辑 0上管导通拉 CANH 至 3.5V下管导通拉 CANL 至 1.5V总线差分电压≈2V显性位TXD 高电平逻辑 1驱动管全部关断CANH/CANL 由内部 25kΩ 电阻拉至 0.5VCC2.5V压差≈0V隐性位总线内置 25kΩ 上下分压电阻实现总线空闲时稳定 2.5V 共模电平。S 引脚模式控制S 高电平正常工作模式发送 / 接收功能全开S 低电平静默模式DRIVER 驱动级完全关闭仅保留接收功能用于监听总线、休眠降功耗。60μA 电流源为 S 引脚提供上拉偏置悬空时默认进入正常模式。TXD 引脚内置 200μA 上拉电流源MCU 未驱动时 TXD 默认高电平总线保持隐性。3.接收通路CANH/CANL → RXD信号流向CANH/CANL差分信号 → RECEIVER 差分比较器 → RXD 输出级推挽 MOS。差分接收器阈值规则内部基准 0.5VCC 作为共模中点比较 CANH 与 CANL 压差V (CANH)-V (CANL) 0.9V → 判定显性 0 → RXD 输出低电平V (CANH)-V (CANL) 0.5V → 判定隐性 1 → RXD 输出高电平宽共模电压范围强抗汽车电机、线束电磁干扰。RXD 为推挽输出上 / 下 MOS 管驱动能力强直接对接 MCU 串口接收脚。Vref 引脚输出稳定 0.5VCC可外部连接至总线共模点提升多节点总线电平一致性。4、CAN特理层特性1.基础参数对比参数项ISO 11898高速CAN**动力**** CAN********TJA1050 **对应标准ISO 11519-2低速容错CAN**车身舒适**** CAN******最高波特率1Mbps125kbps总线最大长度40m 1Mbps速率越低距离越长1km 40kbps最大挂载节点30 个20 个总线拓扑闭环主干总线开环总线终端匹配电阻两端各 120Ω85~130Ω总线两端 2.2kΩ2.09~2.31kΩ线缆电阻率70mΩ/m90mΩ/m传输延迟5ns/m5ns/m额外电容要求无单独对地电容规范CANH/CANL 对地电容≤30pF/m2.总线电平规范核心区分点ISO11898 高速 CAN 电平隐性总线空闲逻辑 1CANH2.00~3.00V典型 2.5V。CANL2.00~3.00V典型 2.5V。压差 H-L-0.5~0.05V近似 0V。显性总线驱动逻辑 0CANH2.75~4.50V典型 3.5V。CANL0.50~2.25V典型 1.5V。压差 H-L1.5~3.0V典型 2V。ISO11519-2 低速容错 CAN 电平隐性逻辑 1CANH1.60~1.90V典型 1.75V。CANL3.10~3.40V典型 3.25V。压差 H-L-1.5~-0.3VCANL 电位高于 CANH。显性逻辑 0CANH3.85~5.00V典型 4.0V。CANL0.00~1.15V典型 1.0V。压差 H-L0.3~3.0V。关键区别高速 CAN 隐性时 CANH 与 CANL 等电位低速 CAN 隐性时CANL 电压高于 CANH差分极性相反。三、CAN总线帧格式CAN协议规定了以下5种类型的帧帧类型用途数据帧发送设备主动发送数据广播式遥控帧接收设备主动请求数据请求式错误帧某个设备检测出错误时向其他设备通知错误过载帧接收设备通知其尚未做好接收准备帧间隔用于将数据帧及遥控帧与前面的帧分离开1、数据帧1.数据帧构成SOFStart of Frame帧起始表示后面一段波形为传输的数据位。IDIdentify标识符区分功能同时决定优先级。RTRRemote Transmission Request 远程请求位区分数据帧和遥控帧。IDEIdentifier Extension扩展标志位区分标准格式和扩展格式。SRRSubstitute Remote Request替代RTR协议升级时留下的无意义位。r0/r1Reserve保留位为后续协议升级留下空间。DLCData Length Code数据长度指示数据段有几个字节。Data数据段的1~8个字节有效数据。CRCCyclic Redundancy Check循环冗余校验校验数据是否正确。。ACKAcknowledgement应答位判断数据有没有被接收方接收CRC/ACK界定符为应答位前后发送方和接收方释放总线留下时间。EOFEnd of Frame 帧结束表示数据位已经传输完毕。2.数据帧的发展历史CAN 1.2时期仅存在标准格式IDE位当时仍为保留位r1。CAN 2.0时期ID不够用出现了扩展格式增加了ID的位数为了区分标准格式与扩展格式协议将标准格式中的r1赋予了新功能—IDE。2、遥控帧遥控帧无数据段RTR为隐性电平1其他部分与数据帧相同3、错误帧总线上所有设备都会监督总线的数据一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” 这些设备便会发出错误帧来破坏数据同时终止当前的发送设备。4、过载帧当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失。5、帧间隔将数据帧和遥控帧与前面的帧分离开。6、位填充位填充规则发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据。例如即将发送100000110100000111100111111111110实际发送10000011101000001111100011111011111010实际接收10000011101000001111100011111011111010移除填充后100000110100000111100111111111110位填充作用增加波形的定时信息利于接收方执行“再同步”防止波形长时间无变化导致接收方不能精确掌握数据采样时机。将正常数据流与“错误帧”和“过载帧”区分开标志“错误帧”和“过载帧”的特异性。保持CAN总线在发送正常数据流时的活跃状态防止被误认为总线空闲。7、波形实例标准数据帧报文ID为0x555数据长度1字节数据内容为0xAA。标准数据帧报文ID为0x666数据长度2字节数据内容为0x12, 0x34。扩展数据帧报文ID为0x0789ABCD数据长度1字节数据内容为0x56。标准遥控帧报文ID为0x088数据长度1字节无数据内容。四、速率同步1、接收方数据采样CAN总线没有时钟线总线上的所有设备通过约定波特率的方式确定每一个数据位的时长。发送方以约定的位时长每隔固定时间输出一个数据位。接收方以约定的位时长每隔固定时间采样总线的电平输入一个数据位。理想状态下接收方能依次采样到发送方发出的每个数据位且采样点位于数据位中心附近。2、接收方数据采样遇到的问题接收方以约定的位时长进行采样但是采样点没有对齐数据位中心附近。接收方刚开始采样正确但是时钟有误差随着误差积累采样点逐渐偏离。3、位时序为了灵活调整每个采样点的位置使采样点对齐数据位中心附近CAN总线对每一个数据位的时长进行了更细的划分分为同步段SS、传播时间段PTS、相位缓冲段1PBS1和相位缓冲段2PBS2每个段又由若干个最小时间单位Tq构成。SS 1TqPTS 1~8TqPBS1 1~8TqPBS2 2~8Tq4、硬同步每个设备都有一个位时序计时周期当某个设备发送方率先发送报文其他所有设备接收方收到SOF的下降沿时接收方会将自己的位时序计时周期拨到SS段的位置与发送方的位时序计时周期保持同步。硬同步只在帧的第一个下降沿SOF下降沿有效。经过硬同步后若发送方和接收方的时钟没有误差则后续所有数据位的采样点必然都会对齐数据位中心附近。5、再同步若发送方或接收方的时钟有误差随着误差积累数据位边沿逐渐偏离SS段则此时接收方根据再同步补偿宽度值SJW通过加长PBS1段或缩短PBS2段以调整同步。再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。SJW1~4Tq。注SJW等同于补偿上限。6、波特率计算波特率 1 / 一个数据位的时长 1 / (TSS TPTS TPBS1 TPBS2) 例如 SS 1TqPTS 3TqPBS1 3TqPBS2 3Tq Tq 0.5us 波特率 1 / (0.5us 1.5us 1.5us 1.5us) 200kbps五、资源分配仲裁机制1、多设备同时发送遇到的问题CAN总线只有一对差分信号线同一时间只能有一个设备操作总线发送数据若多个设备同时有发送需求该如何分配总线资源解决问题的思路制定资源分配规则依次满足多个设备的发送需求确保同一时间只有一个设备操作总线。2、资源分配规则1 - 先占先得若当前已经有设备正在操作总线发送数据帧/遥控帧则其他任何设备不能再同时发送数据帧/遥控帧可以发送错误帧/过载帧破坏当前数据。任何设备检测到连续11个隐性电平即认为总线空闲只有在总线空闲时设备才能发送数据帧/遥控帧。一旦有设备正在发送数据帧/遥控帧总线就会变为活跃状态必然不会出现连续11个隐性电平其他设备自然也不会破坏当前发送。若总线活跃状态其他设备有发送需求则需要等待总线变为空闲才能执行发送需求。3、资源分配规则2 - 非破坏性仲裁若多个设备的发送需求同时到来或因等待而同时到来则CAN总线协议会根据ID号仲裁段进行非破坏性仲裁ID号小的优先级高取到总线控制权ID号大的优先级低仲裁失利后将转入接收状态等待下一次总线空闲时再尝试发送。实现非破坏性仲裁需要两个要求线与特性总线上任何一个设备发送显性电平0时总线就会呈现显性电平0状态只有当所有设备都发送隐性电平1时总线才呈现隐性电平1状态即0 X X 01 1 1 1。回读机制每个设备发出一个数据位后都会读回总线当前的电平状态以确认自己发出的电平是否被真实地发送出去了根据线与特性发出0读回必然是0发出1读回不一定是1。4、非破坏性仲裁过程数据位从前到后依次比较出现差异且数据位为1的设备仲裁失利。5、数据帧和遥控帧的优先级数据帧和遥控帧ID号一样时数据帧的优先级高于遥控帧。6、标准格式和扩展格式的优先级标准格式11位ID号和扩展格式29位ID号的高11位一样时标准格式的优先级高于扩展格式SRR必须始终为1以保证此要求。六、错误类型1、错误类型错误共有5种 位错误、填充错误、CRC错误、格式错误、应答错误2、错误状态主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧。被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧。总线关闭状态的设备不能参与通信。每个设备内部管理一个TEC和REC根据TEC和REC的值确定自己的状态。3、错误计数器每个 CAN 控制器内置2 个独立 8 位错误计数器用于故障界定、划分节点通信状态防止故障节点持续破坏整条总线遵循 ISO11898 标准TECTransmit Error Counter发送错误计数器记录本节点发送报文时产生的通信错误数值范围 0~255发送失败大幅累加发送成功递减。RECReceive Error Counter接收错误计数器记录本节点接收报文时检测到的错误数值范围 0~255接收失败小幅累加接收成功递减。