尧图精选

CAN总线协议详解:从差分信号、总线仲裁到RTR/SRR位与终端电阻

🕒 发布时间:2026/10/1 1:27:36 📁 来源:尧图网络
先抛个观点很多工程师把 CAN 总线当串口用波特率配置好就直接往上扔数据真出了问题却无从下手。这不怪你市面上讲 CAN 的资料要么是协议规范翻译腔要么是开发板的流水账真正把为什么这么设计讲清楚的很少。这篇我打算换一个讲法从底层物理信号一路聊到汽车电路图上的实际报文把 CAN 总线协议里那些没人细讲的规则——比如 RTR 位、SRR 位、仲裁优先级、并联分支长度的口径——一次讲透。适合三类人刚接触车载网络的学生需要调试量产车网络的工程师以及想在工控项目里复用 CAN 的嵌入式开发者。1. 先建立总线直觉CAN 为什么能扛住车载的恶劣环境1.1 多主不是轮流发言而是抢着发言我们被 UART、SPI、I2C 这类主从协议训练得太久了潜意识里总认为总线上必须有个领导来分配机会。CAN 最颠覆认知的地方就是它根本没有主从关系任何节点只要总线空闲随时可以发起发送。这种设计带来的问题是如果两个节点同时发送怎么办CAN 的答案是硬件仲裁——先发的不一定赢ID 小的才赢。你可以把它类比成一间会议室里同时有几个人开口规则不是按音量大小而是按身份等级级别低的人一听到级别高的在说话立刻闭嘴等下一轮。这个机制不需要软件介入完全由收发器和控制器在物理层自动完成。这带来一个直接好处新增节点不需要改总线配置插上去就能用。机动车的 ECU 数量逐年增加从 20 个到 100 多个CAN 这种开放式多主架构是它能活到今天的主要原因。1.2 差分电平与显性/隐性抗干扰的物理本钱CAN 物理层用的是两根线CAN_H 和 CAN_L。通信时看的不是某根线对地的电压绝对值而是两根线之间的压差这就是常说的差分信号。具体电平关系是逻辑状态CAN_H 电压CAN_L 电压差分电压隐性逻辑 1约 2.5V约 2.5V约 0V显性逻辑 0约 3.5V约 1.5V约 2V注意一个反直觉的点CAN 里的显性是逻辑 0不是逻辑 1。这个约定直接影响仲裁机制以后看到协议栈里的显性优先要立刻反应成0 优先。差分信号之所以在汽车里所向披靡是因为干扰通常是共模的——点火线圈、电机刷火、大功率负载切换产生的噪声会同时耦合到两根线上两根线一起抬压或者一起降压但差值基本不变。接收端只看差值等于把干扰给滤掉了。这是单端信号比如 UART 的 TX/RX很难做到的。如果哪天你发现 CAN_H 和 CAN_L 接反了现象是节点全部进入总线关闭状态或大量报错帧。因为差分极性反了发送端发出的显性电平到达接收端变成负差分逻辑完全翻转。1.3 120 欧姆终端电阻为什么必须落在线的两端双绞线在高速信号下是有特征阻抗的典型值在 100 到 130 欧姆之间。CAN 规范要求在线缆物理两端各并联一个 120 欧姆电阻来吸收到达线端的信号能量防止反射。很多人以为这两个电阻只是加上去就能工作其实有两个细节容易被忽略。第一个细节终端电阻必须放在总线的最远两端而不是哪个节点方便就放哪个。如果网络拓扑是 A 端 ECU1、中间 ECU2、B 端 ECU3那么电阻放在 ECU1 和 ECU3 内部ECU2 不加。测量 CAN_H 和 CAN_L 之间的直流阻值正常应接近 60 欧姆两个 120 欧并联。如果量到 120 欧姆说明只有一端有终端电阻如果量到 0 或接近 0说明某个节点内部被击穿或错误并联了电阻。第二个细节终端电阻不能到处乱加。有人为了保险在每个节点板上都焊了 120 欧结果总线等效负载变成 30 欧、20 欧收发器输出电流增大差分电压被拉低隐性电平都回不去波形完全畸变。我见过好几起加电阻加到总线瘫痪的案例都是好心办坏事。2. 标准帧与扩展帧的帧结构RTR 位和 SRR 位的真实分工2.1 一帧数据从头到尾SOF 到 EOF 的每个字段CAN 2.0A 标准帧的结构可以用一张表说清楚字段位数作用SOF1帧起始显性位标志总线进入忙状态标识符 ID11帧身份同时决定仲裁优先级RTR1远程传输请求位区分数据帧与远程帧IDE1标识符扩展位标准帧固定为显性r01保留位DLC4数据长度0 到 8 个字节Data0-64用户数据CRC151校验和含 1 位隐性界定符ACK2确认槽 界定符EOF7帧结束全部隐性位CAN 2.0B 扩展帧则是另一种布局SOF 后跟 11 位基础 ID然后是一个 SRR 位、一个 IDE 位、18 位扩展 ID再是 RTR、r1、r0、DLC。所以扩展帧的标识符总共是 29 位。这里有个初学者容易搞混的地方标准帧格式里数据最多只能 8 字节扩展帧也是 8 字节。CAN 协议没有长的扩展帧数据这种说法29 位 ID 和更长的数据长度是两个维度。如果需要一次传超过 8 字节的负荷比如固件升级要在应用层自己分包或者用 ISO-TP 传输协议。2.2 RTR 位数据帧与远程帧的切换点RTR 位位于 ID 之后。它在标准帧和扩展帧里都存在但位置不同标准帧里紧跟 11 位 ID扩展帧里紧跟 29 位 ID 的最后一段。RTR 的取值意义很直接RTR 0显性这是数据帧后面带 Data 字段。RTR 1隐性这是远程帧不带数据字段用来向某个 ID 的节点请求一帧数据。远程帧在工程里最典型的应用场景是一个低功耗节点平时不主动上报中央控制器想知道它的状态时发一个远程帧把它叫醒应答。当然现在很多设计直接改用周期上报加网关转发但远程帧仍然在诊断场景里大量使用比如 UDS 的请求响应模型和它思路类似。需要注意一个坑远程帧的 DLC 必须写入你期望对方回复的数据长度而不是随便填 0。比如你想请求 4 字节的转速数据远程帧 DLC 要写 4对方收到后才能按正确长度回复。很多初学调试远程帧毫无反应查了一圈发现是 DLC 写错。2.3 SRR 位扩展帧里那个牺牲自己的隐性位扩展帧的仲裁场里有一个叫 SRR 的位全称是 Substitute Remote Request翻译过来叫替代远程请求位。它的名字很容易让人误解成远程请求的替代品。真实作用是这样的为了保证 29 位扩展帧能兼容 11 位标准帧的仲裁扩展帧在原本 RTR 的位置放了一个恒为隐性的位这个位就是 SRR。协议规定它必须是隐性逻辑 1不允许发送显性。为什么要这么设计设想一个 11 位标准帧 ID 为 0x123和一个 29 位扩展帧基础 ID 也是 0x123 同时发送。如果扩展帧在这个位置放 RTR 且是显性那么两者仲裁结果不可控现在扩展帧这个位恒隐性只要标准帧发的是数据帧RTR 显性标准帧立刻赢下仲裁。也就是说SRR 是一个主动让位的位它保证同 ID 情况下标准帧总是优先维持向后兼容性。这也是面试里很爱问的一道题扩展帧里 SRR 是隐性还是显性标准帧的 IDE 是显性还是隐性答案分别是SRR 恒隐性标准帧 IDE 恒显性。顺着这个逻辑走你就能理解为什么扩展帧仲裁时遇到 SRR 位会输给同 ID 的标准帧。2.4 CRC 校验域与 ACK 应答谁在确认谁CAN 帧的 CRC 是 15 位覆盖从 SOF 到数据字段的所有位计算多项式固定。这 15 位后面还跟着一个隐性的 CRC 界定符。接收节点算出来的 CRC 不匹配会立刻发出错误帧把整帧通信都打断。但最值得玩味的是 ACK 槽。发送节点在 ACK 槽位发送的是一个隐性位它不自己确认自己任何接收到这帧且 CRC 校验通过的节点都会在 ACK 槽把总线拉成显性。如果发送节点在 ACK 槽采样到的还是隐性说明总线上没有任何其他节点正确收到了这帧它会报一个 ACK 错误并尝试重发。我之前调试时犯过一个经典错误用单个闭环节点自发自收配置成不回显 ACK 的模式然后抱怨为什么 TX 一直报错。记住CAN 的收到确认不是发送方自己确认而是总线上他者的确认。这在示波器上看 ACK 槽波形时特别明显——如果 ACK 槽始终是平的隐性电平说明总线上只有一个节点在说话其他节点要么没接、要么配置错误、要么在报错风暴里出不来。3. 仲裁过程拆解为什么 ID 越小越优先远程帧为什么输给数据帧3.1 线与逻辑显性位在物理上压过隐性位仲裁机制能成立依赖的是物理层的线与特性多个节点同时发送时只要有一个节点输出显性CAN_H 高、CAN_L 低差压 2V总线上呈现的就是显性电平只有所有节点都输出隐性总线才表现为隐性。也就是说隐性电平是妥协的结果显性电平是强者的结果。在 CAN 总线上广播信道被多路访问但冲突不是通过丢弃数据来解决而是通过位级的霸道来完成优先级仲裁。这个特性在调试时还有一个很实用的意义你可以用万用表静态量 CAN_H 和 CAN_L 的对地电压来大致判断总线状态。总线空闲时两根线都接近 2.5V如果有持续的显性电平压着说明有节点异常占用了总线。我曾经靠这个现象排查出一个看门狗失效、死循环疯狂发帧的节点——总线平均电压被拉低到 1.8V 以下。3.2 一场完整仲裁的推演0x200 如何赢过 0x300举个例子两个标准帧数据帧同时上线一个 ID 是 0x300二进制 011 0000 0000另一个是 0x200二进制 010 0000 0000。注意 CAN 发送是从最高位开始逐位比较从 bit10 开始比两个节点第一拍都发 0第二拍都发 1第三拍 0x300 发 1隐性0x200 发 0显性。总线上这个 bit 呈现显性0x300 的发送节点发现自己发出的隐性位和总线显性不一致立刻判断仲裁失败转为接收状态停止发送后续内容。0x200 接着发完剩余所有位。所以结论很直接标识符的数值越小二进制高位的 0 出现得越早越容易在仲裁中胜出。也就是说CAN 网络中 ID0x001 的节点永远比 ID0x7FF 的节点优先。还有一类仲裁容易被忽略RTR 位参与仲裁。两个节点同时竞争总线一个发 ID 相同的远程帧RTR 隐性另一个发 ID 相同的数据帧RTR 显性数据帧会在 RTR 位胜出。这背后的工程逻辑很实际如果远程帧赢了它后面紧跟着还要再发数据帧等于总线干了两趟活而数据帧赢了直接就把数据送完总线上少一次竞争实时性更好。所以协议倾向于让带数据的帧优先。3.3 工程上怎么分配 ID 优先级理解仲裁机制之后ID 分配就成了一件有策略的事千万别随手赋 ID。我一般按这个思路排优先级ID 范围典型用途最高0x001 - 0x0FF安全相关安全气囊、制动协调、碰撞信号高0x100 - 0x1FF动力总成发动机转速、扭矩、档位中0x200 - 0x2FF底盘/车身车灯、车窗、门锁低0x300 - 0x3FF舒适/信息娱乐空调、多媒体很低0x700诊断报文 UDS、网络管理一条核心原则对实时性最敏感、影响安全的数据给最小 ID。因为仲裁延迟代价最大的是安全关键报文。你在车身舒适域里乱塞一个 ID 0x003 的诊断帧一旦和制动信号撞车制动信号可能被挤到下一轮这在汽车上不可接受。工业现场 CAN 也是同理。设备控制字、伺服状态字这类周期性实时数据一定要放在低 ID 段参数配置、固件升级这样的大块非实时流量放高 ID 段避免大流量阻塞高优先级控制帧。4. 位时序里藏着通信速度与总线长度的矛盾4.1 波特率、时间量子与采样点配置CAN 的一个位时间不是一整块而是被切成若干份每一份叫一个时间量子TQ。一个位时间通常由四段组成同步段Sync Segment固定 1 TQ用于同步总线上的各个节点。传播段Propagation Segment用于补偿物理层和线缆的传播延迟。相位缓冲段 1PS1相位缓冲段 2PS2采样点位于 PS1 和 PS2 的交界处。工程上常用两个参数来描述这个边界TSEG1Sync Prop PS1 的长度和 TSEG2PS2 的长度采样点在 TSEG1 的末尾。举个实例。假设微控制器 CAN 外设时钟是 16MHz想跑 500kbps。先确定一个位时间 2 微秒。如果分频系数 BRP 设为 3那么 TQ (31) / 16MHz 0.25 微秒一个位时间需要 8 个 TQ。接下来分配Sync1PropSeg3PS12PS22共 8 个 TQ。采样点位置 (132) / 8 75%。这个 75% 不是随便定的。CAN 规范普遍要求采样点在位时间的 75% 到 85% 之间原因有二一是给时序漂移留足余地二是给传输延迟留出缓冲。采样点太早远端节点的边缘误差容易落在采样点之后采样点太晚PS2 没剩多少缓冲时钟漂移和干扰更容易导致错误。4.2 总线长度上限是怎么来的往返延迟与采样点的博弈位时序和总线长度的关系很直接。信号沿双绞线的传输速度大约 5 纳秒每米。一个 500kbps 的位时间是 2 微秒1Mbps 的位时间是 1 微秒。如果总线太长发送端的位边沿传到最远端节点时已经晚了远端节点按自己的采样点去采样采到的可能是上一个位或者一个畸变的边沿。经典经验数据是这样的波特率理论最大总线长度大约值1 Mbps40 米500 kbps130 米250 kbps270 米125 kbps530 米很多人在设计阶段只关心波特率能不能跑不关心总线长度结果现场一拉线就是 100 米跑 500kbps 各种错误帧。解决方向有两条要么降波特率要么把采样点往后调。降到 125kbps、采样点适当调到 80% 附近很多 500 米以内的现场总线都还能稳定工作。4.3 边沿时间与线缆质量一个容易被忽略的变量位时序的配置和计算通常都以理想方波边沿为前提但实际线缆、连接器和节点收发器的上升沿/下降沿都是有限斜率的。边沿越缓采样点附近的电压不确定性越大尤其是高波特率下一个位时间只有 1 微秒信号边沿如果占了 200 纳秒留给采样的稳定窗口就非常窄了。这里有一个实测技巧用示波器看 CAN_H 与 CAN_L 的差分波形正常情况下应该是陡峭的方波。如果边沿变斜或者波形的拐角出现明显振铃先别急着调波特率去检查终端电阻是否在正确位置、有没有异常的分支线缆、连接器接触是否良好。我在调试一个长线工程时发现高速 CAN 下总线总是间歇性异常最后查到原因是一个防水接头里的端子松动接触电阻不稳定波形时好时坏。这种问题用示波器一眼就能看出来查波特率配置反而越陷越深。5. 并联分支长度该算哪一段一个被问烂却常答错的问题5.1 分支长度的口径到底量哪一段CAN 总线并联分支的长度是指哪个长度这个问题几乎被问烂了因为中文资料里分支这个词一直含混。这里把定义理顺一根总线上有主干Backbone主干上通过 T 型连接引出若干支线每个支线的末端挂一个节点。所谓并联分支的长度指的就是从主干引出点焊点、T 型接头、接线端子处到节点收发器引脚之间的那一段线缆长度。它不包括主干长度也不包括两个节点之间绕过的路径更不是一根支线到另一根支线的距离。如果画成文字示意大概是主干CAN_H ──┬───────────────┬───────────────┐ │分支1 │分支2 │ 节点A 节点B 节点C这里分支长度就是A 到主干引出点的线、B 到主干引出点的线。5.2 为什么分支越长越危险反射与阻抗不连续分支线缆的存在会导致阻抗不连续。高速信号沿 120 欧姆主干传播到一个末端悬空的分支点相当于遇到了一段阻抗变化的路口一部分信号能量会被反射回来叠加到原始信号上形成台阶、振铃甚至误触发显性/隐性判断。更麻烦的是分支上的每个节点本身就是另一个反射源。分支越长反射波到达主干的时间越晚越容易落在后续位的采样窗口里导致接收端在某些位采样错误。在一个波特率 500kbps 的系统里1 个位时间是 2 微秒而每米线缆的往返延迟就有大约 10 纳秒。分支哪怕只有 1 米带来的延迟虽然不大但反射叠加造成的波形畸变可能远超理论延迟本身。所以工程上的处理原则是分支尽可能短最好把它也当成主干的一部分直接串进去。CIACAN in Automation给出的建议是分支线长度设计上控制在 0.3 米以内高速 CAN500kbps 以上条件下0.1 米以内更稳妥。0.3 米这个数在很多线束规范里被当成默认值。5.3 布线拓扑的参考做法菊花链优先星型要谨慎最稳的拓扑是菊花链每个节点的收发器信号直接连在主干上不额外引出长支线。也就是所有节点沿着一条线串联下来终端电阻放在这条线的最两端。如果必须做星型拓扑——比如几个控制单元在物理上集中在驾驶舱中心往外辐射——建议使用有源 CAN 集线器或中继器而不是单纯把多根支线并联到一个点上。纯粹的无源星型连接在高波特率下反射非常严重不只节点多而且每一次反射都叠加在中心点波形质量极差。低速 CAN 125kbps 下勉强能忍500kbps 以上基本不可用。排障时还有个经验法则总线通信不稳定时先用排除法把最长的那根分支剪掉或把它移动到主干的另一端看错误帧是否立刻减少。往往一根超长支线引发的反射能让整条总线的错误帧统计飙升几十倍。6. 总线保护电路除了终端电阻CAN 节点还需要什么6.1 车载环境的电应力从哪来CAN 在实验室台架上怎么跑都健康真正量产装车后考验才刚开始。车上常见的威胁有几种。第一种是静电放电。连接器插拔、维修人员接触线束都可能把几千伏的静电灌进 CAN_H/CAN_L。收发器芯片内部有部分 ESD 保护但能力有限扛不住反复的强放电。第二种是抛负载。汽车发电机、感性负载切换时会在电源线上产生几十伏甚至上百伏的瞬态尖峰这个尖峰通过系统的地回流和线束耦合可能串到 CAN 差分线上。第三种是线束意外短路。CAN_H 或 CAN_L 可能与 12V/24V 电源正极短接也可能与地短接。收发器的绝对最大额定值范围通常到 -27V 到 40V 左右一旦短路到电源正极长时间异常电压会逐步损坏收发器。6.2 典型保护方案TVS 管、共模电感、滤波电容一个工程中常用的 CAN 保护电路信号流向大致是连接器 → TVS 管阵 → 共模电感 → 滤波电容 → 收发器引脚具体到每个器件器件位置作用典型选型参数TVS 管双向连接器附近CAN_H/L 对地各一只或差分对之间钳位浪涌电压、吸收 ESD 能量工作电压 12-24V钳位电压低于收发器上限功率按浪涌能量选共模电感TVS 之后、收发器之前抑制共模干扰改善 EMC阻抗 100 欧姆100MHz 左右直流电阻越小越好小容量陶瓷电容收发器引脚附近滤除高频噪声并联在带屏蔽双绞线或地之间100pF - 1nF别过大终端电阻拓扑两端节点匹配阻抗120 欧姆1% 精度选 TVS 时要特别留意两个参数钳位电压和工作电压。钳位电压必须低于收发器能承受的最高压否则没能保护住芯片工作电压又必须高于正常通信时的总线电压范围。CAN 隐性时两根线都在 2.5V 左右显性时一根线 3.5V 一根 1.5V所以工作电压选 5V 以上的器件是安全的。具体型号选择时可以找 5V 工作电压、钳位在 10V 上下的双向 TVS。共模电感很多人会忽略但在汽车电子里它对 EMC 的作用非常明显。它可以滤掉两根线上方向相同、大小相等的共模噪声而不影响方向相反的差分信号。CAN 总线中差模信号走的是差分路径共模噪声才是主要干扰源所以共模电感几乎是为 CAN 量身定制的。6.3 一个可参考的汽车 CAN 电路图注释用文字描述一个比较常见的节点保护电路连接器的 CAN_H 引脚出来先后接一个双向 TVS 到地CAN_L 引脚同样接一个双向 TVS 到地。两根线再穿过一个共模电感电感输出端接到收发器比如 TJA1042 或 TJA1050的 CANH、CANL 引脚。收发器的 TXD/RXD 接 MCU 的 CAN 控制器或内置 CAN 外设的引脚。关键点有四个TVS 必须放在连接器和共模电感之间不能让浪涌先经过共模电感再被钳位否则浪涌电流可能损坏电感或造成严重的电压过冲。终端电阻的放置原则如果这个节点是拓扑的物理端点就把它接在收发器引脚附近或者干脆在 PCB 上只预留电阻位置不是端点就不要默认贴上去。收发器电源脚和 MCU 的电源去耦电容不要省它们对总线边沿质量的影响比你想象的大。CAN 控制器的 TX 引脚到收发器 TXD 之间可以串一个几十欧姆的电阻减少振铃这在高速 CAN 中是有实际效果的。我自己做节点板时还会在 PCB 上留一组 0603 焊盘串联的 0 欧电阻方便量产阶段断开某一路做隔离调试。这个小习惯在整车上查 ID 冲突和错误帧来源时能节省大量时间。7. 通信协议实例从报文到真实功能一个升窗信号怎么走完全程7.1 报文解码0x255 号报文的每一位代表什么说了这么多底层机制最后用一个具体报文把整个流程串起来。为了讲清楚思路我设计一个模拟的车窗控制报文ID 0x255DLC8周期 20ms。收到这样一串原始字节02 13 05 00 00 00 00 00按协议表解码字节Byte值含义Byte00x02开关状态0x01 升窗0x02 降窗0x00 停止Byte10x13 19电机电流估算0.1A/bit → 1.9AByte20x05位置百分比5%Byte3-70x00保留拿到这帧后车窗控制器 MCU 会怎么做先判断 ID 0x255 是不是我感兴趣的 ID再校验 CRC然后读取 Byte0等于 0x02于是驱动电机反转实现降窗同时把 Byte1 的电流值换算成 1.9A和过流保护阈值比较把 Byte2 的 5% 位置更新到当前状态变量。整个动作从总线上出现显性 SOF 位到电机开始反转中间只有几十微秒到几毫秒的延迟。这就是一个标准的汽车 CAN 通信协议实例发送节点按周期或事件把数据打包成帧接收节点按预先约定的 DBC 或通信矩阵去解析位域。DBC 本质就是一张哪个字节哪个 bit 代表哪个物理量的翻译对照表工程上常说的标定报文就是把这张表烧进前台工具。7.2 抓包与示波器验证的关键动作现场调试 CAN 要养成的习惯有三条。第一示波器优先做差分测量。用两个探头分别夹 CAN_H 和 CAN_L用数学通道做 A-B 减法能看到干净的差分波形。直接拿单个探头对地看 CAN_H 波形往往会被共模噪声掩盖。第二关注 ACK 槽。抓帧时找到一帧的 ACK 段正常情况下 ACK 槽会有一个明显的显性下凹这是接收节点给的回应。如果它一直是平的隐性说明你面对的是一个独自写信但没人读的节点。第三查波特率时先看位宽度。示波器上量一个位的实际宽度1Mbps 时每位约 1 微秒500kbps 时约 2 微秒。别一上来就翻代码里的配置先量波形比什么都直观。7.3 排障经验总线瘫了先查哪几项如果你接手一辆CAN 时不时掉线的车按下面顺序查大部分问题半小时内能定位。先量终端电阻断开整车电源在总线任意位置量 CAN_H 与 CAN_L 之间阻值正常 60 欧姆上下。量到 120 说明终端电阻掉了一端量到接近 0 说明有节点收发器击穿短路或线束破损互碰。再量静态电压上电后总线空闲时CAN_H 和 CAN_L 应在 2.5V 附近。如果一根明显偏低比如 CAN_H 只有 1.2V常见原因是某个节点的收发器输出级损坏或者 CAN_H 该走线的位置对地短路。再看波形用示波器看边沿有没有台阶、振铃。台阶常见于反射检查分支和终端电阻振铃之后伴随错误帧则要怀疑共模电感的参数是否合适或者屏蔽层的接地处理是否到位。最后查软件层打开 CAN 控制器的错误计数器如果 TX Error Counter 一直在跳说明发送总是得不到 ACK多半是总线上只有一个节点或物理连接中断如果 RX Error Counter 跳说明本节点收到了大量错误帧优先怀疑波特率不匹配或线缆噪声过大。先物理后协议先量后猜这是我调 CAN 几年下来最实用的方法。这些年调过的项目和踩过的坑不算少给我最大的感受是CAN 的协议栈并不复杂真正决定一个系统稳不稳的往往是物理层的终端电阻、分支走线、保护电路这些看起来不起眼的细节。找一辆实车或者搭一套开发板用示波器观察一段真实通信波形把标准帧、扩展帧、仲裁过程对着报文手册验证一遍远比死记协议字段更有用。希望这篇 CAN 总线详细讲解能帮你少走几趟弯路。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →