CAN 技术系列 03 · CAN 位定时与同步

发布时间:2026/11/6 8:49:48

CAN 技术系列 03 · CAN 位定时与同步 CAN总线技术系列 · 持续更新中本系列从差分电气层一路打到 Linux SocketCAN,把两根线背后的电气/协议/控制器/驱动/实战全拧成一根线。 想系统追更戳这里查看完整专栏【CAN 技术系列】 其他技术系列专栏欢迎关注、交流、共同成长【SPI 技术系列】 【I2C 技术系列】 【串口技术系列】【RISC-V 架构系列】【Linux内核系列】 【操作系统设计思想系列】 【 Android 系统全景专栏】03 · CAN 位定时与同步本篇定位:CAN 物理层和拓扑讲完,本篇讲位定时——CAN 的灵魂。CAN 是同步总线(位填充维持跳变),但没有共享时钟线(不像 SPI/I2C),靠硬同步 重同步对齐。采样点、SJW、时钟容差配错,全网通信失败。本篇讲位时间组成、采样点、同步机制、BTR 寄存器配置。读完你能配任何 CAN 控制器的位定时。位定时是 CAN 配错必死项UART 异步,波特率配对就行。SPI/I2C 有共享时钟,主控速度。CAN 没有共享时钟,所有节点靠位定时参数各自同步,采样点/SJW/时钟容差必须全网一致 满足约束。配错一个节点,全网通信失败。这是 CAN 调试第二大坑(终端电阻第一)。做 CAN 网络,位定时必须算清。目录03 · CAN 位定时与同步一、位时间组成1.1 位时间分段1.2 总位时间1.3 Tq 计算二、采样点2.1 采样点定义2.2 采样点推荐2.3 采样点为何要靠后2.4 多采样(可选)三、同步机制3.1 为什么需要同步3.2 硬同步(Hard Sync)3.3 重同步(Resync)3.4 同步规则3.5 同步的物理意义四、SJW(同步跳转宽度)4.1 SJW 定义4.2 SJW 工作原理4.3 SJW 选择4.4 SJW 与时钟容差五、时钟容差5.1 时钟容差来源5.2 时钟容差约束5.3 典型容差5.4 选晶振六、BTR 寄存器配置6.1 STM32 bxCAN BTR6.2 配置示例:1Mbit/s, SP 87.5%, f_CAN42MHz6.3 配置口诀6.4 DesignWare/M_CAN 位定时七、CAN FD 位定时7.1 两套位定时7.2 NBTP(标称位定时)7.3 DBTP(数据位定时)7.4 FD 位定时约束7.5 FD 配置示例八、关键问题 QAQ1:采样点 87.5% 怎么算?Q2:CAN 没有共享时钟,怎么同步?Q3:SJW 配多大?Q4:时钟容差怎么满足?Q5:位定时配错会怎样?Q6:CAN FD 数据段位定时怎么配?九、实战案例案例 1:采样点不一致,通信失败案例 2:时钟偏差大,偶发错案例 3:SJW 太小,长帧错案例 4:采样点太前,长总线错案例 5:CAN FD 数据段 CRC 错案例 6:晶振温漂,低温通信失败案例 7:BRP 算错,波特率不对案例 8:多节点位定时不一致十、本篇小结与速查核心要点位定时速查(f_CAN48MHz)BTR 配置步骤CAN FD 双位定时检查清单延伸阅读参考资料一、位时间组成1.1 位时间分段CAN 一个位时间(Time Quantum, Tq)分四段:┌──────────┬─────────────────┬──────────────┐ │ SYNC_SEG │ TSEG1(PTS │ TSEG2 │ │ (同步段) │ PBS1) │ (PBS2) │ │ 1 Tq │ 1~16 Tq │ 1~8 Tq │ └──────────┴─────────────────┴──────────────┘ ↑采样点(SP)段含义Tq 数SYNC_SEG同步段(跳变应在此时)1TSEG1时间段1(传播 相位缓冲1)1~16TSEG2时间段2(相位缓冲2)1~8SYNC_SEG:期望信号跳变发生在这(1 Tq)TSEG1:采样前的时间(含传播延迟 相位调整)TSEG2:采样后的时间(相位调整)采样点在 TSEG1/TSEG2 交界1.2 总位时间位时间 SYNC_SEG TSEG1 TSEG2 (1 TSEG1 TSEG2) Tq典型位时间:16~25 Tq(采样点 75~87.5%)Tq CAN 时钟 / 分频1.3 Tq 计算波特率 f_CAN / (BRP_effective × (1 TSEG1 TSEG2)) 采样点 (1 TSEG1) / (1 TSEG1 TSEG2)f_CAN:CAN 控制器输入时钟(如 40MHz)BRP_effective 就是“硬件实际用来分频的那个整数分频系数”它不等于寄存器里直接写的 BRP 原始值具体要看芯片手册怎么定义。1 TSEG1 TSEG2一个位时间包含的 Tq 总数。芯片/控制器寄存器 BRP 值实际分频 BRP_effective备注STM32 bxCANCAN_BTR.BRP0~1023BRP_reg 1最常见tq (BRP_reg 1) / f_APB1source_group_web_1TI MCANnomRatePrescalar NN 1公式为bit rate f_CAN / (N1) / (1TSEG1TSEG2)source_group_web_2MCP2515CNF1[5:0]0~63BRP_reg 1且Tq 2 × (BRP_reg 1) / f_OSC有固定 ×2 因子source_group_web_3某些老控制器如 SJA1000BRP 寄存器直接写分频值BRP_reg寄存器值即分频系数无 1 偏移source_group_web_4二、采样点2.1 采样点定义采样点(Sample Point, SP) 在位时间内的位置(百分比):SP (1 TSEG1) / (1 TSEG1 TSEG2) × 100%采样点在 TSEG1 末尾(TSEG2 开始)采样点越后,留给传播延迟的时间越多2.2 采样点推荐标准/协议推荐采样点CAN 2.075~87.5%CANopen87.5%DeviceNet87.5%J193987.5%(高速)/ 85%(低速)ARINC 82575~80%87.5% 是主流(CANopen/J1939/DeviceNet)例:16 Tq 位时间,SP 87.5% → TSEG113, TSEG222.3 采样点为何要靠后传播延迟(信号从一节点到另一节点往返)占位时间一部分采样点靠后,留够传播延迟时间高速 长总线,采样点更要靠后(87.5%)2.4 多采样(可选)部分控制器支持 3 采样(采 TSEG1 末 前两 Tq,多数表决)抗扰更好,但减少传播延迟裕量一般不用(单采样够)三、同步机制3.1 为什么需要同步CAN 没有共享时钟(不像 SPI/I2C)各节点时钟独立(晶振),有偏差靠信号跳变(位填充保证跳变密度)同步3.2 硬同步(Hard Sync)**帧起始(SOF)**时,所有节点收到跳变,重置位定时到 SYNC_SEG每帧开始同步一次SOF 是显性位(从隐性跳显性),所有节点看到隐性 ──↓ SOF(显性)── 所有节点硬同步,位定时归 SYNC_SEG3.3 重同步(Resync)帧中间,信号跳变(位填充保证)用来微调相位跳变比期望早或晚 → 调整 TSEG1 或 TSEG2 长度期望跳变在 SYNC_SEG: 跳变早(TSEG1 还没到)→ TSEG1 延长(最多 SJW) 跳变晚(TSEG1 过了)→ TSEG2 缩短(最多 SJW)3.4 同步规则只有隐性→显性跳变触发重同步(显性→隐性不触发)位填充保证最多 5 位有跳变(足够同步)SOF 硬同步 帧中重同步 全程同步3.5 同步的物理意义抵消节点间时钟偏差(晶振不完全一致)抵消传播延迟(信号到达各节点时刻不同)保证采样点对齐(各节点同时采样)四、SJW(同步跳转宽度)4.1 SJW 定义重同步时,TSEG1/TSEG2 可调整的最大量SJW 1~4 Tq太小:无法补偿时钟偏差太大:过度调整,振荡4.2 SJW 工作原理跳变比期望早 3 Tq,SJW2: → TSEG1 只能延长 2 Tq(SJW 限制),剩余 1 Tq 误差累积 跳变比期望晚 1 Tq,SJW2: → TSEG2 缩短 1 Tq(在 SJW 内),完全补偿4.3 SJW 选择SJW min(TSEG1, TSEG2, 4) 通常经验:SJW TSEG2 / 2 或固定 1~2 Tq时钟偏差大,SJW 适当大;但不超过 TSEG24.4 SJW 与时钟容差SJW 决定能补偿的最大时钟偏差时钟偏差 SJW 能补偿 → 同步失败,通信错五、时钟容差5.1 时钟容差来源晶振初始偏差(±50ppm)温度漂移(±50ppm)老化(±50ppm)总计:可达 ±100~200ppm(差晶振),好晶振 ±20~50ppm5.2 时钟容差约束CAN 协议规定时钟容差上限:df min( SJW / (20 × NBT), // 重同步能力 (1 - SP) / (2 × (13 SP)), // 13 位累积偏差(填充前) SP / (2 × (14 - SP)) // 14 位累积偏差(填充后) )NBT:位时间 Tq 数(1TSEG1TSEG2)SP:采样点(小数,如 0.875)三者取最小,就是允许的时钟容差5.3 典型容差配置容差1M, 16Tq, SP87.5%, SJW20.5%(5000ppm)500k, 16Tq, SP87.5%, SJW20.5%125k, 16Tq, SP87.5%, SJW20.5%一般配置容差 0.10.5%(10005000ppm)普通晶振(±50ppm)远满足容差太严(SJW 小/位时间短)要选好晶振5.4 选晶振普通 CAN:±50ppm 晶振够高速短位时间(1M, 8Tq):选 ±20ppm 晶振严禁 RC 振荡器(偏差 1%)六、BTR 寄存器配置6.1 STM32 bxCAN BTRCAN_BTR: bit 25-24 SJW[1:0]: 同步跳转宽度(0~3,值1) bit 22-16 TS2[6:0]: TSEG2(0~7,值1) bit 15-0 TS1[3:0]: TSEG1(0~15,值1) (注意位段,实际 TS1 4bit) bit 9-0 BRP[9:0]: 波特率预分频(0~1023,值1)6.2 配置示例:1Mbit/s, SP 87.5%, f_CAN42MHz位时间 42MHz / 1Mbit/s 42 Tq 但要 TSEG1TSEG21 ≤ 25(STM32 限制),要分频: BRP 3, Tq 3/42MHz 71.4ns 位时间 Tq 数 1Mbit/s 周期 / Tq 1000ns / 71.4ns ≈ 14 Tq NBT 14: SP 87.5% → TSEG1 12, TSEG2 1, SYNC1 → 112114 ✓ SP 13/14 92.8%(过高) 重算 NBT16(更标准): BRP2.625(非整数,不行) 换 f_CAN48MHz: BRP3, Tq62.5ns, NBT16 SP 87.5% → TSEG113, TSEG22, 113216 SP 14/16 87.5% ✓ BTR SJW1(00) | TS21(2-11) | TS112(13-112) | BRP2(3-12)6.3 配置口诀算 Tq 数:NBT f_CAN / (BRP × bit_rate)选 BRP 让 NBT 在 16~25(采样点好调)按 SP 算 TSEG1/TSEG2:TSEG1 NBT × SP - 1(取整)SJW 选 1~2写 BTR6.4 DesignWare/M_CAN 位定时Bosch M_CAN 用 NBTP(标称位定时)/ DBTP(数据位定时 FD)字段:TSEG1/TSEG2/SJW/BRP,逻辑同 STM32七、CAN FD 位定时7.1 两套位定时CAN FD 仲裁段和数据段速率不同,两套位定时:段速率位定时仲裁段1M(兼容)NBTP(标称)数据段5M/8MDBTP(数据)7.2 NBTP(标称位定时)和经典 CAN 一样仲裁段 CRC 之前 ACK 之后SP 87.5%,1M7.3 DBTP(数据位定时)数据段(BRS 后到 CRC 前)用5M/8M,位时间短采样点可以不同(通常也 75~87.5%)TSEG1/TSEG2 数值小(短位时间)7.4 FD 位定时约束数据段速率高,传播延迟约束严5M 位时间 200ns,传播延迟要 50ns(约 10m 总线)8M 位时间 125ns,总线更短SJW 数据段通常 1~2 Tq7.5 FD 配置示例仲裁段(NBTP):1M, SP87.5%, f_CAN80MHz BRP5, NBT16, TSEG113, TSEG22, SJW2 数据段(DBTP):5M, SP80%, f_CAN80MHz BRP2, NBT8, TSEG15, TSEG22, SJW1 (5M 位时间 200ns,8 Tq × 25ns)嵌入式视角:FD 位定时是升级难点升 CAN FD,位定时要配两套(NBTP DBTP)。数据段 5M 位时间 200ns,容差极小,总线要短( 10m),收发器要 FD,采样点要算准。配错数据段 CRC 错。M_CAN,DBTP 寄存器配数据段位定时。八、关键问题 QAQ1:采样点 87.5% 怎么算?A:SP (1 TSEG1) / (1 TSEG1 TSEG2)。NBT16,SP 87.5%:TSEG113, TSEG22 → (113)/16 14/16 87.5%。采样点靠后(87.5%)留传播延迟裕量,主流推荐(CANopen/J1939)。Q2:CAN 没有共享时钟,怎么同步?A:硬同步 重同步。① 硬同步:每帧 SOF(隐性→显性跳变),所有节点位定时归 SYNC_SEG。② 重同步:帧中位填充保证跳变,跳变早晚调整 TSEG1/TSEG2(最多 SJW)。两者抵消时钟偏差 传播延迟。Q3:SJW 配多大?A:1~2 Tq 通常,不超过 TSEG2。SJW min(TSEG1, TSEG2, 4)。时钟偏差大 SJW 适当大,但太大过度调整振荡。经验:SJW TSEG2 / 2 或固定 2 Tq。Q4:时钟容差怎么满足?A:选好晶振。CAN 协议容差通常 0.10.5%(10005000ppm),普通晶振 ±50ppm 远满足。严禁 RC 振荡器(偏差 1%)。高速短位时间(1M,8Tq)容差严,选 ±20ppm 晶振。Q5:位定时配错会怎样?A:全网通信失败(采样错位,误码)。配错的节点发的帧别人采错(可能 ACK 错),收的帧自己采错。位定时必须全网一致 满足传播延迟/时钟容差约束。这是 CAN 调试第二大坑(终端电阻第一)。Q6:CAN FD 数据段位定时怎么配?A:两套位定时(NBTP 仲裁段 DBTP 数据段)。数据段 5M,位时间 200ns,NBT 小(8 Tq),SP 75~80%,SJW 1~2。数据段传播延迟约束严(总线 10m 5M)。配错数据段 CRC 错,仲裁段正常。九、实战案例案例 1:采样点不一致,通信失败现象:两节点 CAN 通信失败,各自单测正常。分析:节点 A 采样点 75%,节点 B 87.5%,互相采样错位。解决:统一采样点 87.5%(重配 BTR),通信正常。案例 2:时钟偏差大,偶发错现象:某节点用 RC 振荡器(偏差 1%),CAN 偶发错。分析:RC 偏差 10000ppm,超 CAN 容差(5000ppm),重同步跟不上。解决:换晶振(±50ppm),通信稳定。案例 3:SJW 太小,长帧错现象:8 字节帧正常,长帧(连续多帧)偶发错。分析:SJW1 Tq,补偿能力弱,长帧累积偏差超 SJW。解决:SJW 加到 2 Tq,长帧稳定。案例 4:采样点太前,长总线错现象:100m 总线 500k,采样点 75%,偶发错。分析:采样点 75%,传播延迟裕量小,100m 往返延迟超裕量。解决:采样点改 87.5%,传播延迟裕量大,稳定。案例 5:CAN FD 数据段 CRC 错现象:CAN FD 仲裁段正常,数据段 5M 偶发 CRC 错。分析:DBTP 配错(采样点 70%),数据段位时间 200ns,采样窗口窄。解决:DBTP 重配,采样点 80%,TSEG1/TSEG2 重新算,5M 稳定。案例 6:晶振温漂,低温通信失败现象:CAN 通信常温正常,-40°C 低温通信失败。分析:晶振低温漂移到 100ppm,超容差(配的 SJW 小)。解决:换宽温晶振(±30ppm 全温),或加大 SJW。案例 7:BRP 算错,波特率不对现象:配 500kbit/s,实测 250kbit/s。分析:BRP 寄存器值 实际分频 - 1(STM32),代码写 BRP4 当成 4 分频,实际 5 分频。解决:BRP 寄存器写 3(4-1),实际 4 分频,波特率正确。案例 8:多节点位定时不一致现象:5 节点 CAN,某节点加入后全网通信失败。分析:该节点 BTR 配错(TSEG1 差 1),采样点不一致。解决:所有节点统一 BTR 配置(相同 f_CAN 相同 BRP/TSEG1/TSEG2/SJW),全网一致。十、本篇小结与速查核心要点位时间 SYNC_SEG(1 Tq) TSEG1(1~16) TSEG2(1~8)采样点 SP (1TSEG1)/(1TSEG1TSEG2),主流 87.5%同步:硬同步(SOF 重置) 重同步(帧中跳变调整 TSEG1/TSEG2)SJW(同步跳转宽度):1~4 Tq,重同步调整量上限,通常 1~2时钟容差:协议限 0.1~0.5%,选 ±50ppm 晶振(严禁 RC)BTR 配置:算 NBT → 选 BRP → 按 SP 算 TSEG1/TSEG2 → 选 SJWCAN FD 两套位定时:NBTP(仲裁段1M) DBTP(数据段5M/8M)位定时必须全网一致 满足传播延迟/时钟容差约束位定时速查(f_CAN48MHz)速率BRPNBTTSEG1TSEG2SJWSP1M316132287.5%500k616132287.5%250k1216132287.5%125k2416132287.5%50k6016132287.5%BTR 配置步骤算 NBT f_CAN / (BRP × bit_rate),选 BRP 让 NBT16TSEG1 NBT × SP - 1 16 × 0.875 - 1 13TSEG2 NBT - 1 - TSEG1 16 - 1 - 13 2SJW 2(通常)BTR (SJW-1)24 | (TSEG2-1)16 | (TSEG1-1)0 | (BRP-1)CAN FD 双位定时NBTP(仲裁段):同经典,1M, SP87.5%DBTP(数据段):5M/8M, NBT小(8), SP75~80%, SJW1检查清单全网位定时一致(BRP/TSEG1/TSEG2/SJW)采样点 87.5%(主流)SJW 1~2 Tq晶振 ±50ppm 以内(禁 RC)传播延迟满足(总线长度)FD 两套位定时(NBTP DBTP)延伸阅读[[01-CAN物理层与差分电气]] —— 位填充维持同步[[02-CAN信号完整性与拓扑]] —— 传播延迟与总线长[[04-CAN帧格式]] —— SOF 同步[[08-CAN控制器寄存器与IP架构]] —— BTR 寄存器[[13-CAN调试与排查]] —— 位定时问题排查[[03-SPI速度与电气约束]] —— 对比 SPI 采样窗口参考资料Bosch CAN Specification 2.0(位定时章节)CiA 301(CANopen 位定时推荐)STM32 RM0090(CAN BTR 章节)Bosch M_CAN User Manual(NBTP/DBTP)CAN 技术系列 00 · 总目录 · 上一篇:[[02-CAN信号完整性与拓扑]] ·下一篇:[[04-CAN帧格式]]✨ 感谢你的阅读 ✨技术之路漫漫分享是为了更好地交流。如果本文的内容对你有启发希望能得到你的支持 点赞|⭐ 收藏| 关注如果你在调试过程中遇到了其他问题欢迎在评论区 留言我们一起探讨。关注我一起交流底层开发的那些事儿
延伸阅读

更多相关文章

2026/11/6 11:50:48

Redis主从同步机制解析与优化实践

1. Redis主从同步的本质与挑战Redis主从同步远非简单的数据拷贝过程,而是一个精心设计的分布式系统状态同步机制。在实际生产环境中,我们常常会遇到这样的场景:一个承载着每秒数万次读写请求的Redis主节点,如何在保持服务不中断的…

2026/11/6 11:50:48

IoT设备测试:从硬件到云端的全栈验证实践

1. IoT设备测试的行业现状与核心挑战 在智能家居和工业物联网快速发展的今天,设备测试已经不再是简单的功能验证。我经历过一个典型项目:某品牌智能温控器在北方冬季频繁出现温度控制偏差,最终排查发现是低温环境下传感器信号漂移导致。这个案…

2026/11/6 11:50:48

云端开发环境现状与Sealos DevBox架构解析

1. 云端开发环境的市场现状与挑战 2023年的云端开发环境市场,像极了2015年的容器编排大战前夜。表面上看起来百花齐放,实际上暗流涌动。作为一个经历过多次技术周期更替的老兵,我认为这个赛道正在经历典型的"创新扩散曲线"中的泡沫…

2026/11/6 11:50:48

通信信号接收技术:从匹配滤波器到分集接收

1. 通信信号接收的本质挑战 在通信系统设计中,信号接收质量直接决定了信息传输的可靠性。根据信号特性的不同,我们可以将待接收信号分为三类:确定信号、随相信号和起伏信号。这三种信号类型代表了从理想环境到复杂现实场景的过渡,…

2026/11/6 11:50:48

微信小程序+物联网打造无人羽毛球馆系统

1. 项目概述 作为一名长期从事体育场馆数字化改造的技术人员,最近完成了一个基于微信小程序的无人羽毛球馆系统开发项目。这个系统彻底改变了传统羽毛球馆的运营模式,实现了从场地预约到入场使用的全流程自助化服务。 传统羽毛球馆普遍存在几个痛点&…

2026/11/6 11:45:47

自助KTV智能影音系统核心技术解析与应用

1. 项目背景与行业现状自助KTV行业近年来呈现爆发式增长态势,根据第三方机构数据显示,2022年全国市场规模已突破300亿元,年复合增长率保持在25%以上。这种新型娱乐业态通过"无人值守碎片化消费"模式,成功突破了传统KTV在…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑