云计算百科
云计算领域专业知识百科平台

CAN 技术系列 14 · CAN 排查手册与速查表

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}


tags: [学习, 嵌入式, CAN, 排查手册, 速查表, 决策树, 位定时, 帧格式, 错误计数器, 高层协议, 功能安全, 全系列回顾, 总对照表] created: 2026-10-08 updated: 2026-10-08 status: 专题进行中 所属专题: “[[00-CAN技术系列总目录]]” 对应模块: 14 排查手册与速查表

14 · CAN 排查手册与速查表(CAN 收官)

本篇定位:CAN 系列收官篇。故障决策树 + 全系列速查表 + 功能安全审查清单 + 全系列要点回顾 + 总对照表。遇到 CAN 问题,翻这一篇。读完你有一本 CAN 工程师速查手册。

[!important] 这是 CAN 工程师的"急救手册" SPI 14 是 SPI 收官速查。CAN 14 是 CAN 收官速查——故障决策树(从现象到根因)+ 19 故障速查 + 位定时/帧格式/错误计数器/高层协议/AEGIX 功能安全清单 + 全系列 01-14 回顾 + CAN vs UART vs I2C vs SPI 总对照表。打印贴墙,排查不慌。对照 [[14-SPI排查手册与速查表]] 看,四总线速查手册齐了。


目录

  • 故障决策树
  • 常见故障速查表
  • 位定时速查
  • 帧格式速查
  • 错误计数器与状态速查
  • 高层协议速查
  • AEGIX 功能安全审查清单
  • 全系列要点回顾
  • 学习路径
  • CAN vs UART vs I2C vs SPI 总对照表

  • 一、故障决策树

    1.1 A 类:完全不通

    CAN 完全不通
    ├─ A1 物理层
    │ ├─ A1.1 终端电阻? → 万用表测 CAN_H-CAN_L = 60Ω?
    │ │ ├─ 否 → 加/修终端(双端120Ω)
    │ │ └─ 是 → 继续
    │ ├─ A1.2 收发器? → 示波器看 CAN_H/CAN_L 波形?
    │ │ ├─ 无波形 → 收发器供电/坏 → 换
    │ │ └─ 有波形 → 继续
    │ └─ A1.3 接线? → CAN_H/CAN_L 接反? 交叉?
    │ └─ 修正接线
    ├─ A2 配置层
    │ ├─ A2.1 时钟? → CAN 时钟开? 引脚复用?
    │ │ └─ 开时钟 + 配引脚
    │ ├─ A2.2 位定时? → 波特率全网一致? 采样点87.5%?
    │ │ └─ 统一位定时
    │ └─ A2.3 过滤器? → 过滤器配错(全屏蔽)?
    │ └─ 修正过滤器
    └─ A3 软件层
    ├─ A3.1 驱动初始化? → dmesg 看错误?
    │ └─ 查初始化代码
    └─ A3.2 can0 up? → ip link show can0?
    └─ ip link set can0 up

    1.2 B 类:偶发错

    CAN 偶发错
    ├─ B1 信号完整性层
    │ ├─ B1.1 终端? → 示波器看振铃?
    │ │ └─ 双端终端 + 分裂终端
    │ ├─ B1.2 EMI? → 附近干扰源(电机/开关电源)?
    │ │ └─ 共模扼流圈 + TVS + 远离
    │ └─ B1.3 stub? → stub 太长?
    │ └─ 缩短 stub(1M<0.3m)
    ├─ B2 软件层
    │ ├─ B2.1 FIFO 溢出? → 接收丢帧?
    │ │ └─ 提高优先级/DMA/加深FIFO
    │ └─ B2.2 负载高? → canbusload > 80%?
    │ └─ 优化ID/限频/CAN FD
    └─ B3 时钟层
    ├─ B3.1 采样点? → 全网87.5%?
    │ └─ 统一
    ├─ B3.2 SJW? → 长帧错?
    │ └─ SJW=2
    └─ B3.3 晶振? → RC振荡器? 温漂?
    └─ 换±50ppm晶振

    1.3 C 类:错误状态

    CAN 错误状态
    ├─ C1 总线关闭(BUS-OFF)
    │ ├─ C1.1 波特率错? → 和全网不一致?
    │ │ └─ 统一波特率
    │ ├─ C1.2 收发器坏? → 换
    │ ├─ C1.3 EMI 严重? → 抗扰
    │ └─ C1.4 恢复? → ABOM + 次数限制 + 安全状态
    ├─ C2 错误被动(ERROR-PASSIVE)
    │ ├─ C2.1 位定时? → 采样点?
    │ ├─ C2.2 EMI? → 抗扰
    │ └─ C2.3 目标节点? → ACK 错?
    └─ C3 ACK 错误
    ├─ C3.1 单节点? → Loopback 测试
    ├─ C3.2 目标故障? → 查目标节点
    └─ C3.3 波特率? → 统一

    1.4 D 类:数据错

    CAN 数据错
    ├─ D1 ID 解析错
    │ ├─ D1.1 标准/扩展? → IDE 位识别
    │ └─ D1.2 字节序? → MSB 先
    ├─ D2 长度错
    │ ├─ D2.1 DLC>8? → 经典CAN视为8
    │ └─ D2.2 FD DLC? → 9-15映射12/16/…/64
    └─ D3 高层协议错
    ├─ D3.1 J1939? → PGN解析+SPN换算
    ├─ D3.2 UDS? → NRC分析
    └─ D3.3 ISO-TP? → 分包重组

    1.5 E 类:Linux 框架

    Linux CAN 问题
    ├─ E1 can0 不 up
    │ ├─ E1.1 设备树? → CAN节点配置?
    │ ├─ E1.2 驱动? → dmesg 看加载?
    │ └─ E1.3 时钟/引脚? → 设备树时钟
    ├─ E2 candump 无输出
    │ ├─ E2.1 can0 down? → ip link set up
    │ ├─ E2.2 物理层? → 终端/收发器
    │ └─ E2.3 过滤器? → setsockopt
    └─ E3 错误帧
    ├─ E3.1 ERR_FILTER? → 使能错误帧接收
    └─ E3.2 状态? → ip -s 看统计


    二、常见故障速查表

    #故障现象原因解决
    1 完全不通 candump 无帧 终端缺/收发器/位定时 万用表+示波器
    2 终端缺 振铃,偶发错 单端/无终端 双端120Ω
    3 多终端 驱动不足 每节点都加 只两端加
    4 波特率错 总线关闭 和全网不一致 统一波特率
    5 采样点错 CRC 错 不一致 统一87.5%
    6 时钟偏差大 长帧错 RC/温漂 换晶振±50ppm
    7 SJW 小 长帧偶发错 补偿不足 SJW=2
    8 ACK 错 单节点/目标故障 无应答 Loopback/查目标
    9 CRC 错 错误帧 采样点/EMI 统一+抗扰
    10 位填充错 EMI 位翻转 抗扰
    11 格式错 EOF干扰 EMI 抗扰
    12 总线关闭 TEC≥128 持续错 查根因+ABOM
    13 错误被动 TEC/REC≥96 偶发错 排查
    14 FIFO 溢出 丢帧 CPU慢 DMA/高优先级
    15 负载高 偶发错 帧太多 优化/限频/FD
    16 stub 长 高速错 反射 缩短(1M<0.3m)
    17 FD 收发器慢 数据段CRC错 tr长 换FD收发器
    18 过滤器错 收不到/收到多余 配置错 核对ID/MASK
    19 节点数多 边沿缓 电容大 降速/分段

    三、位定时速查

    3.1 位定时常用配置(f_CAN=48MHz)

    速率BRPNBTTSEG1TSEG2SJWSP
    1M 3 16 13 2 2 87.5%
    500k 6 16 13 2 2 87.5%
    250k 12 16 13 2 2 87.5%
    125k 24 16 13 2 2 87.5%
    50k 60 16 13 2 2 87.5%

    3.2 CAN FD 双位定时(f_CAN=80MHz)

    段速率BRPNBTTSEG1TSEG2SJWSP
    仲裁段(NBTP) 1M 5 16 13 2 2 87.5%
    数据段(DBTP) 5M 2 8 5 2 1 75%
    数据段(DBTP) 8M 1 10 7 2 1 80%

    3.3 BTR 配置公式

    1. NBT = f_CAN / (BRP × bit_rate), 选 BRP 让 NBT=16
    2. TSEG1 = NBT × SP – 1 = 16 × 0.875 – 1 = 13
    3. TSEG2 = NBT – 1 – TSEG1 = 16 – 1 – 13 = 2
    4. SJW = 2(通常,1~4)
    5. BTR = (SJW-1)<<24 | (TSEG2-1)<<16 | (TSEG1-1)<<8 | (BRP-1)

    3.4 速率-距离-约束速查

    速率总线长stub节点电容
    1M 40m 0.3m 30 100pF
    500k 100m 0.6m 30 100pF
    250k 250m 1.2m 30 200pF
    125k 500m 2.4m 30 500pF
    50k 1km 6m 30 1nF
    FD 5M <10m 0.15m <10 100pF

    四、帧格式速查

    4.1 数据帧(标准帧 8 字节)

    段位数内容
    SOF 1 显性(帧起始)
    ID 11 标识符(优先级)
    RTR 1 0=数据,1=远程
    IDE 1 0=标准,1=扩展
    r0 1 保留
    DLC 4 数据长度(0~8经典)
    数据 0~64 数据
    CRC 15/17/21 校验
    CRC DEL 1 隐性
    ACK 1 显性(接收方)
    ACK DEL 1 隐性
    EOF 7 隐性
    IFS 3 隐性

    4.2 帧类型速查

    帧RTRIDE数据用途
    标准数据 0 0 0~8B 主用
    标准远程 1 0 无 请求
    扩展数据 0 1 0~8B J1939
    扩展远程 1 1 无 请求
    FD 数据 0 EDL=1 0~64B 高速大块
    错误帧 – – 6显性/隐性+8隐性 报错
    过载帧 – – 6显性+7隐性 流控

    4.3 CAN FD 新增位

    位含义
    EDL FD帧标识(替代经典r0)
    BRS 切速(1=数据段高速)
    ESI 错误状态(1=被动错误)

    4.4 DLC 映射(CAN FD)

    DLC经典FD
    0-8 0-8B 0-8B
    9 – 12B
    10 – 16B
    11 – 20B
    12 – 24B
    13 – 32B
    14 – 48B
    15 – 64B

    五、错误计数器与状态速查

    5.1 错误计数规则

    事件TEC/REC 变化
    发送错 TEC +8
    发送成功 TEC -1
    接收错 REC +8
    接收成功 REC -1
    主动错误标志期间检测显性 +1

    5.2 状态转移

    状态TEC/REC错误标志
    主动错误 <96 6显性(破坏)
    错误警告 ≥96 –
    被动错误 96~127 6隐性(不破坏)
    总线关闭 TEC≥128 不通信

    5.3 恢复

    恢复机制
    主动→被动回主动 TEC/REC<96
    总线关闭→主动 128×11=1408隐性(自动)/ 软件

    5.4 错误码(LEC)

    LEC错误
    0 无错
    1 位填充错
    2 格式错
    3 ACK 错
    4 位1错(隐性位发显性读)
    5 位0错(显性位发隐性读)
    6 CRC 错

    六、高层协议速查

    6.1 CANopen ID 速查

    对象ID用途
    NMT 0x000 网络管理
    紧急 0x080 紧急报文
    PDO 0x181~0x57F 过程数据(实时)
    SDO 0x581~0x67F 服务数据(配置)
    心跳 0x700+ 节点心跳

    6.2 J1939 29bit ID 编码

    优先级(3) | 保留(1) | 数据页(1) | PF(8) | PS(8) | 源地址(8)

    PGN参数
    61444 EEC1 发动机(转速0.125rpm/bit)
    65262 发动机温度(水温)
    65263 发动机仪表(油压)
    59904 请求
    60416 应答

    6.3 UDS 服务速查

    SID服务请求正响应
    0x10 会话控制 10 03 50 03
    0x11 ECU 复位 11 01 51 01
    0x22 读数据 22 F1 90 62 F1 90 data
    0x27 安全访问 27 01/02 key 67 01 seed/67 02
    0x2E 写数据 2E F1 90 data 6E F1 90
    0x31 例程控制 31 01 FF 00 71 01 FF 00
    0x34 请求下载 34 74
    0x36 传输数据 36 76
    0x37 退出传输 37 77
    0x3E 保活 3E 00 7E 00

    6.4 UDS NRC(否定响应码)

    NRC含义
    0x13 格式错
    0x22 条件不满足
    0x24 请求序列错
    0x31 超范围
    0x33 安全拒绝(未解锁)
    0x78 响应待定(忙)
    0x7E 子功能不支持
    0x7F 服务不支持

    6.5 ISO-TP 帧速查

    类型PCI用途
    SF 0x0N ≤7B 单帧
    FF 0x1x 多帧首帧(总长+6B)
    CF 0x2x 续帧(序号+7B)
    FC 0x3x 流控(FS/BS/STmin)

    6.6 诊断 ID 速查

    ID用途
    0x7DF 广播诊断请求
    0x7E0~0x7E7 ECU 请求
    0x7E8~0x7EF ECU 响应

    七、AEGIX 功能安全审查清单

    7.1 物理层

    • 双端 120Ω 终端(万用表测 60Ω)
    • 双绞线(CAN_H/CAN_L)
    • 共模扼流圈(汽车级)
    • TVS 保护(ESD/EFT)
    • 分裂终端(60Ω+60Ω+4.7nF,可选)
    • 收发器汽车级(AEC-Q100)
    • stub 长度合规(1M<0.3m)
    • 节点数合规(<30)
    • 完整地平面

    7.2 协议层

    • 位定时全网一致(BRP/TSEG1/TSEG2/SJW)
    • 采样点 87.5%(主流)
    • 晶振 ±50ppm(禁 RC)
    • CAN FD 双位定时(NBTP+DBTP)
    • 帧格式正确(SOF/ID/CRC/ACK/EOF)
    • ID 分配合理(优先级)

    7.3 传输层

    • 错误中断处理(BOFF/EPVF/EWGF/LEC)
    • 错误计数器监控(TEC/REC)
    • 总线关闭恢复(ABOM + 次数限制)
    • 恢复超限进安全状态
    • 恢复后应用层重新同步
    • 自动重发策略(NART 或软件超时)
    • FIFO 溢出处理(覆盖/锁定)

    7.4 数据层

    • E2E 保护(CRC + 序列号 + 存活计数)
    • 关键消息超时监控
    • 关键控制回读校验
    • 数据校验(端到端 CRC)

    7.5 系统层

    • 双通道冗余(ASIL D,关键消息双发)
    • 安全状态(故障不执行危险动作)
    • 看门狗(任务存活监控)
    • 错误日志(可追溯)
    • 故障注入测试

    7.6 软件层

    • ISR 最小化(只读推队列)
    • RTOS 集成(消息队列/信号量/互斥锁)
    • 互斥锁保护(多任务共享)
    • 缓冲对齐(DMA/Cache)
    • 驱动分层(应用→驱动→硬件)

    八、全系列要点回顾

    8.1 L1 硬件基础层(01-03)

    • 01 物理层:差分信号(CAN_H/CAN_L),显性2V/隐性0V,线与,ISO 11898-2高速/-3低速/FD,收发器,120Ω双端终端,NRZ+位填充,CAN FD(5M/64B)
    • 02 信号完整性:直线总线拓扑,stub长度(1M<0.3m),节点数30,总线电容<100pF,双端终端抑制反射,分裂终端抗EMI,共模扼流圈,FD 5M SI严,汽车EMI/EMS AEC-Q100
    • 03 位定时同步:位时间四段(SYNC_SEG+TSEG1+TSEG2),采样点87.5%,硬同步(SOF)+重同步(帧中跳变),SJW 1~2Tq,时钟容差0.1-0.5%选±50ppm晶振,BTR配置,CAN FD双位定时(NBTP+DBTP)

    8.2 L2 协议时序层(04-07)

    • 04 帧格式:四种帧(数据/远程/错误/过载),数据帧七段(SOF+仲裁+控制+数据+CRC+ACK+EOF+IFS),仲裁段(ID+RTR+IDE),DLC,CRC15/17/21,ACK机制,标准11bit/扩展29bit,CAN FD(BRS/ESI/EDL)
    • 05 仲裁优先级:CSMA/CD+AMP,线与(显性覆盖隐性),逐位仲裁(ID高位比较,发隐性读显性=输),ID越小优先级越高,仲裁无冲突(输的转接收),同ID数据帧>远程帧/标准帧>扩展帧,优先级设计,饿死问题,CAN FD仲裁段1M数据段不仲裁
    • 06 错误处理:五种错误检测(位监控/位填充/CRC/格式/ACK),错误帧(主动6显性/被动6隐性+8隐性),错误计数器(TEC/REC,错+8成功-1),节点状态(主动<96/被动96-127/总线关闭≥128),自动重发,总线关闭恢复(1408隐性/软件)
    • 07 高层协议:CANopen(对象字典+PDO+SDO+心跳),J1939(29bit ID编码PGN),UDS(诊断服务0x10/0x22/0x2E/0x27刷写),ISO-TP(SF/FF/CF/FC大报文分包),CAN FD适配(64B单帧)

    8.3 L3 驱动实现层(08-11)

    • 08 控制器寄存器:Bosch C_CAN/M_CAN IP,STM32 bxCAN/FDCAN寄存器(MCR/MSR/BTR/ESR/邮箱/FIFO/过滤器),发送邮箱3个,接收FIFO 2×3级,验收过滤器(列表/屏蔽),RISC-V N300 M_CAN(同FDCAN改基址)
    • 09 传输模式:轮询(调试)/中断(主流)/DMA(FD大块),发送邮箱队列(3邮箱+软件队列),接收FIFO处理(覆盖/锁定),RTOS集成(消息队列+信号量+互斥锁),ISR最小化
    • 10 错误恢复:错误计数器监控,状态转移处理,总线关闭恢复(ABOM/软件/混合),功能安全端到端保护(协议层CRC/ACK+应用层E2E+序列号+超时+回读+冗余+安全状态+看门狗),AEGIX CAN容错(双通道冗余+恢复次数限制)
    • 11 Linux框架:SocketCAN(CAN当网络接口),PF_CAN协议族(RAW/BCM/ISO-TP/J1939),can-dev框架(c_can/m_can),设备树(bit-timing+can-fd),用户态socket API,can-utils(candump/cansend),ISO-TP/J1939内置

    8.4 L4 应用实战层(12-14)

    • 12 设备实战:裸机收发驱动,验收过滤器配置,环回测试,CANopen节点(对象字典/PDO/SDO/心跳),J1939解析(PGN/SPN),UDS诊断(0x10/0x22/0x27/0x2E),ISO-TP多帧(SF/FF/CF/FC),多CAN通道+RTOS,双通道冗余
    • 13 调试排查:工具链分层(candump/逻辑分析仪/示波器/万用表/dmesg),candump抓包,逻辑分析仪差分解码,示波器看差分波形,万用表测终端60Ω,错误帧分析,位定时/终端问题排查,典型故障定位,降速调试法
    • 14 排查手册:故障决策树(5大类),19故障速查,位定时/帧格式/错误计数器/高层协议速查,AEGIX功能安全审查清单(6层),全系列回顾,学习路径,四总线总对照表

    九、学习路径

    9.1 五阶段路径

    阶段目标文章
    入门 理解 CAN 是什么 01 → 04 → 05
    硬件 会设计 CAN 硬件 02 → 03 → 06
    驱动 会写裸机驱动 08 → 09 → 10
    系统 会 Linux CAN 11 → 12
    专家 会调试 + 功能安全 07 → 13 → 14

    9.2 对照学习法

    • CAN vs SPI:差分 vs 单端,多主 vs 单主,有ACK vs 无ACK
    • CAN vs I2C:差分 vs 开漏,优先级仲裁 vs 都退,汽车级 vs 板级
    • CAN vs UART:总线 vs 点对点,同步 vs 异步,多主 vs 单主单从

    9.3 实战建议

    • 先用 candump/cansend 在 Linux 上玩(直观)
    • 用逻辑分析仪看波形(理解物理层)
    • 写裸机驱动(理解寄存器)
    • 实现 UDS/ISO-TP(汽车实战)
    • 做功能安全设计(AEGIX 级)

    十、CAN vs UART vs I2C vs SPI 总对照表

    10.1 物理层

    维度UARTI2CSPICAN
    线数 2(TX/RX) 2(SDA/SCL) 3+(SCK/MOSI/MISO/CS) 2(CAN_H/L)
    电气 单端 开漏+上拉 单端/推挽 差分
    电平 TTL/RS232 上拉到VCC TTL 差分2V/0V
    同步 异步 同步(SCL) 同步(SCK) 同步(位填充)
    拓扑 点对点 总线 主从星型/总线 直线总线
    终端 无 上拉 无 120Ω双端
    速度 ≤3M ≤3.4M(高速) ≤50M+ ≤1M(经典)/8M(FD)
    距离 RS232 15m 板级 板级 1M=40m,125k=500m
    抗扰 弱(单端) 弱(开漏) 弱(单端) 强(差分)

    10.2 协议层

    维度UARTI2CSPICAN
    帧 START+数据+STOP START+地址+ACK+数据+STOP CS+时钟+数据 SOF+ID+控制+数据+CRC+ACK+EOF
    寻址 无(点对点) 7/10bit地址 CS硬件选 ID(11/29bit)
    双工 全双工 半双工 全双工 半双工
    应答 无 ACK/NACK 无 ACK(多节点)
    多主 否 是(仲裁都退) 否 是(优先级仲裁)
    仲裁 无 线与都退 无(单主) CSMA/CD+AMP优先级
    错误检测 奇偶(可选) ACK/NACK 无 5种(位监控/填充/CRC/格式/ACK)
    错误恢复 无 重试 无 错误帧+自动重发+总线关闭
    流控 硬件/软件 无 无 过载帧(少用)
    数据长度 帧8/9bit 任意(每帧8bit) 任意 0-8经典/0-64 FD

    10.3 应用场景

    场景总线原因
    调试串口 UART 简单点对点
    GPS/蓝牙模块 UART 点对点
    传感器(温湿度) I2C 低速板级多设备
    EEPROM I2C 板级存储
    OLED/Flash SPI 高速
    ADC/DAC SPI 高速
    汽车ECU通信 CAN 汽车级可靠+多主
    工业自动化 CAN/CANopen 可靠+实时
    商用车 J1939(CAN) 标准化
    汽车诊断 UDS(CAN) 诊断标准

    10.4 调试

    维度UARTI2CSPICAN
    工具 串口工具 逻辑分析仪 逻辑分析仪+示波器 candump+逻辑分析仪+示波器+万用表
    难度 低 中 中高 高
    错误分析 简单 ACK/NACK 无(软件) 错误状态机(复杂)

    10.5 选型决策树

    要传什么?
    ├─ 点对点调试/模块 → UART
    ├─ 板级多设备低速 → I2C
    ├─ 板级高速(Flash/OLED/ADC) → SPI
    ├─ 汽车/工业多主可靠 → CAN
    │ ├─ 商用车 → J1939
    │ ├─ 工业自动化 → CANopen
    │ └─ 汽车诊断 → UDS
    └─ 大数据高速 → CAN FD(64B/帧)


    延伸阅读

    CAN 全系列

    • [[01-CAN物理层与差分电气]] / [[02-CAN信号完整性与拓扑]] / [[03-CAN位定时与同步]]
    • [[04-CAN帧格式]] / [[05-CAN仲裁与优先级]] / [[06-CAN错误处理与错误帧]] / [[07-CAN高层协议]]
    • [[08-CAN控制器寄存器与IP架构]] / [[09-CAN传输模式-轮询-中断-DMA]] / [[10-CAN错误恢复与总线关闭]] / [[11-CAN Linux驱动框架]]
    • [[12-CAN设备驱动实战]] / [[13-CAN调试与排查]]

    对照学习

    • [[14-SPI排查手册与速查表]] —— SPI 收官 + 四总线对照
    • [[14-I2C排查手册与速查表]] —— I2C 收官
    • [[00-CAN技术系列总目录]] —— CAN 总目录

    参考资料

    • Bosch CAN Specification 2.0 / CAN FD
    • ISO 11898-1(数据链路层)/ -2(物理层)
    • CiA 301(CANopen)/ SAE J1939 / ISO 14229(UDS)/ ISO 15765(ISO-TP)
    • ISO 26262 功能安全
    • STM32 RM0090/RM0433
    • Linux Documentation/networking/can.rst

    [[00-CAN技术系列总目录]] · 上一篇:[[13-CAN调试与排查]] · CAN 系列完结


    创建日期:2026-10-08

    本篇定位:CAN 系列收官篇。故障决策树 + 全系列速查表 + 功能安全审查清单 + 全系列要点回顾 + 总对照表。遇到 CAN 问题,翻这一篇。读完你有一本 CAN 工程师速查手册。

    这是 CAN 工程师的"急救手册" SPI 14 是 SPI 收官速查。CAN 14 是 CAN 收官速查——故障决策树(从现象到根因)+ 19 故障速查 + 位定时/帧格式/错误计数器/高层协议/AEGIX 功能安全清单 + 全系列 01-14 回顾 + CAN vs UART vs I2C vs SPI 总对照表。打印贴墙,排查不慌。对照 [[14-SPI排查手册与速查表]] 看,四总线速查手册齐了。


    目录

      • tags: [学习, 嵌入式, CAN, 排查手册, 速查表, 决策树, 位定时, 帧格式, 错误计数器, 高层协议, 功能安全, 全系列回顾, 总对照表] created: 2026-10-08 updated: 2026-10-08 status: 专题进行中 所属专题: "[[00-CAN技术系列总目录]]" 对应模块: 14 排查手册与速查表
    • 14 · CAN 排查手册与速查表(CAN 收官)
      • 目录
      • 一、故障决策树
        • 1.1 A 类:完全不通
        • 1.2 B 类:偶发错
        • 1.3 C 类:错误状态
        • 1.4 D 类:数据错
        • 1.5 E 类:Linux 框架
      • 二、常见故障速查表
      • 三、位定时速查
        • 3.1 位定时常用配置(f_CAN=48MHz)
        • 3.2 CAN FD 双位定时(f_CAN=80MHz)
        • 3.3 BTR 配置公式
        • 3.4 速率-距离-约束速查
      • 四、帧格式速查
        • 4.1 数据帧(标准帧 8 字节)
        • 4.2 帧类型速查
        • 4.3 CAN FD 新增位
        • 4.4 DLC 映射(CAN FD)
      • 五、错误计数器与状态速查
        • 5.1 错误计数规则
        • 5.2 状态转移
        • 5.3 恢复
        • 5.4 错误码(LEC)
      • 六、高层协议速查
        • 6.1 CANopen ID 速查
        • 6.2 J1939 29bit ID 编码
        • 6.3 UDS 服务速查
        • 6.4 UDS NRC(否定响应码)
        • 6.5 ISO-TP 帧速查
        • 6.6 诊断 ID 速查
      • 七、AEGIX 功能安全审查清单
        • 7.1 物理层
        • 7.2 协议层
        • 7.3 传输层
        • 7.4 数据层
        • 7.5 系统层
        • 7.6 软件层
      • 八、全系列要点回顾
        • 8.1 L1 硬件基础层(01-03)
        • 8.2 L2 协议时序层(04-07)
        • 8.3 L3 驱动实现层(08-11)
        • 8.4 L4 应用实战层(12-14)
      • 九、学习路径
        • 9.1 五阶段路径
        • 9.2 对照学习法
        • 9.3 实战建议
      • 十、CAN vs UART vs I2C vs SPI 总对照表
        • 10.1 物理层
        • 10.2 协议层
        • 10.3 应用场景
        • 10.4 调试
        • 10.5 选型决策树
      • 延伸阅读
        • CAN 全系列
        • 对照学习
      • 参考资料
    • 一、故障决策树
      • 1.1 A 类:完全不通
      • 1.2 B 类:偶发错
      • 1.3 C 类:错误状态
      • 1.4 D 类:数据错
      • 1.5 E 类:Linux 框架
    • 二、常见故障速查表
    • 三、位定时速查
      • 3.1 位定时常用配置(f_CAN=48MHz)
      • 3.2 CAN FD 双位定时(f_CAN=80MHz)
      • 3.3 BTR 配置公式
      • 3.4 速率-距离-约束速查
    • 四、帧格式速查
      • 4.1 数据帧(标准帧 8 字节)
      • 4.2 帧类型速查
      • 4.3 CAN FD 新增位
      • 4.4 DLC 映射(CAN FD)
    • 五、错误计数器与状态速查
      • 5.1 错误计数规则
      • 5.2 状态转移
      • 5.3 恢复
      • 5.4 错误码(LEC)
    • 六、高层协议速查
      • 6.1 CANopen ID 速查
      • 6.2 J1939 29bit ID 编码
      • 6.3 UDS 服务速查
      • 6.4 UDS NRC(否定响应码)
      • 6.5 ISO-TP 帧速查
      • 6.6 诊断 ID 速查
    • 七、功能安全审查清单
      • 7.1 物理层
      • 7.2 协议层
      • 7.3 传输层
      • 7.4 数据层
      • 7.5 系统层
      • 7.6 软件层
    • 八、全系列要点回顾
      • 8.1 L1 硬件基础层(01-03)
      • 8.2 L2 协议时序层(04-07)
      • 8.3 L3 驱动实现层(08-11)
      • 8.4 L4 应用实战层(12-14)
    • 九、CAN vs UART vs I2C vs SPI 总对照表
      • 9.1 物理层
      • 9.2 协议层
      • 9.3 应用场景
      • 9.4 调试
      • 9.5 选型决策树
    • 延伸阅读
      • CAN 全系列
      • 对照学习
    • 参考资料

    一、故障决策树

    1.1 A 类:完全不通

    CAN 完全不通
    ├─ A1 物理层
    │ ├─ A1.1 终端电阻? → 万用表测 CAN_H-CAN_L = 60Ω?
    │ │ ├─ 否 → 加/修终端(双端120Ω)
    │ │ └─ 是 → 继续
    │ ├─ A1.2 收发器? → 示波器看 CAN_H/CAN_L 波形?
    │ │ ├─ 无波形 → 收发器供电/坏 → 换
    │ │ └─ 有波形 → 继续
    │ └─ A1.3 接线? → CAN_H/CAN_L 接反? 交叉?
    │ └─ 修正接线
    ├─ A2 配置层
    │ ├─ A2.1 时钟? → CAN 时钟开? 引脚复用?
    │ │ └─ 开时钟 + 配引脚
    │ ├─ A2.2 位定时? → 波特率全网一致? 采样点87.5%?
    │ │ └─ 统一位定时
    │ └─ A2.3 过滤器? → 过滤器配错(全屏蔽)?
    │ └─ 修正过滤器
    └─ A3 软件层
    ├─ A3.1 驱动初始化? → dmesg 看错误?
    │ └─ 查初始化代码
    └─ A3.2 can0 up? → ip link show can0?
    └─ ip link set can0 up

    1.2 B 类:偶发错

    CAN 偶发错
    ├─ B1 信号完整性层
    │ ├─ B1.1 终端? → 示波器看振铃?
    │ │ └─ 双端终端 + 分裂终端
    │ ├─ B1.2 EMI? → 附近干扰源(电机/开关电源)?
    │ │ └─ 共模扼流圈 + TVS + 远离
    │ └─ B1.3 stub? → stub 太长?
    │ └─ 缩短 stub(1M<0.3m)
    ├─ B2 软件层
    │ ├─ B2.1 FIFO 溢出? → 接收丢帧?
    │ │ └─ 提高优先级/DMA/加深FIFO
    │ └─ B2.2 负载高? → canbusload > 80%?
    │ └─ 优化ID/限频/CAN FD
    └─ B3 时钟层
    ├─ B3.1 采样点? → 全网87.5%?
    │ └─ 统一
    ├─ B3.2 SJW? → 长帧错?
    │ └─ SJW=2
    └─ B3.3 晶振? → RC振荡器? 温漂?
    └─ 换±50ppm晶振

    1.3 C 类:错误状态

    CAN 错误状态
    ├─ C1 总线关闭(BUS-OFF)
    │ ├─ C1.1 波特率错? → 和全网不一致?
    │ │ └─ 统一波特率
    │ ├─ C1.2 收发器坏? → 换
    │ ├─ C1.3 EMI 严重? → 抗扰
    │ └─ C1.4 恢复? → ABOM + 次数限制 + 安全状态
    ├─ C2 错误被动(ERROR-PASSIVE)
    │ ├─ C2.1 位定时? → 采样点?
    │ ├─ C2.2 EMI? → 抗扰
    │ └─ C2.3 目标节点? → ACK 错?
    └─ C3 ACK 错误
    ├─ C3.1 单节点? → Loopback 测试
    ├─ C3.2 目标故障? → 查目标节点
    └─ C3.3 波特率? → 统一

    1.4 D 类:数据错

    CAN 数据错
    ├─ D1 ID 解析错
    │ ├─ D1.1 标准/扩展? → IDE 位识别
    │ └─ D1.2 字节序? → MSB 先
    ├─ D2 长度错
    │ ├─ D2.1 DLC>8? → 经典CAN视为8
    │ └─ D2.2 FD DLC? → 9-15映射12/16/…/64
    └─ D3 高层协议错
    ├─ D3.1 J1939? → PGN解析+SPN换算
    ├─ D3.2 UDS? → NRC分析
    └─ D3.3 ISO-TP? → 分包重组

    1.5 E 类:Linux 框架

    Linux CAN 问题
    ├─ E1 can0 不 up
    │ ├─ E1.1 设备树? → CAN节点配置?
    │ ├─ E1.2 驱动? → dmesg 看加载?
    │ └─ E1.3 时钟/引脚? → 设备树时钟
    ├─ E2 candump 无输出
    │ ├─ E2.1 can0 down? → ip link set up
    │ ├─ E2.2 物理层? → 终端/收发器
    │ └─ E2.3 过滤器? → setsockopt
    └─ E3 错误帧
    ├─ E3.1 ERR_FILTER? → 使能错误帧接收
    └─ E3.2 状态? → ip -s 看统计


    二、常见故障速查表

    #故障现象原因解决
    1 完全不通 candump 无帧 终端缺/收发器/位定时 万用表+示波器
    2 终端缺 振铃,偶发错 单端/无终端 双端120Ω
    3 多终端 驱动不足 每节点都加 只两端加
    4 波特率错 总线关闭 和全网不一致 统一波特率
    5 采样点错 CRC 错 不一致 统一87.5%
    6 时钟偏差大 长帧错 RC/温漂 换晶振±50ppm
    7 SJW 小 长帧偶发错 补偿不足 SJW=2
    8 ACK 错 单节点/目标故障 无应答 Loopback/查目标
    9 CRC 错 错误帧 采样点/EMI 统一+抗扰
    10 位填充错 EMI 位翻转 抗扰
    11 格式错 EOF干扰 EMI 抗扰
    12 总线关闭 TEC≥128 持续错 查根因+ABOM
    13 错误被动 TEC/REC≥96 偶发错 排查
    14 FIFO 溢出 丢帧 CPU慢 DMA/高优先级
    15 负载高 偶发错 帧太多 优化/限频/FD
    16 stub 长 高速错 反射 缩短(1M<0.3m)
    17 FD 收发器慢 数据段CRC错 tr长 换FD收发器
    18 过滤器错 收不到/收到多余 配置错 核对ID/MASK
    19 节点数多 边沿缓 电容大 降速/分段

    三、位定时速查

    3.1 位定时常用配置(f_CAN=48MHz)

    速率BRPNBTTSEG1TSEG2SJWSP
    1M 3 16 13 2 2 87.5%
    500k 6 16 13 2 2 87.5%
    250k 12 16 13 2 2 87.5%
    125k 24 16 13 2 2 87.5%
    50k 60 16 13 2 2 87.5%

    3.2 CAN FD 双位定时(f_CAN=80MHz)

    段速率BRPNBTTSEG1TSEG2SJWSP
    仲裁段(NBTP) 1M 5 16 13 2 2 87.5%
    数据段(DBTP) 5M 2 8 5 2 1 75%
    数据段(DBTP) 8M 1 10 7 2 1 80%

    3.3 BTR 配置公式

    1. NBT = f_CAN / (BRP × bit_rate), 选 BRP 让 NBT=16
    2. TSEG1 = NBT × SP – 1 = 16 × 0.875 – 1 = 13
    3. TSEG2 = NBT – 1 – TSEG1 = 16 – 1 – 13 = 2
    4. SJW = 2(通常,1~4)
    5. BTR = (SJW-1)<<24 | (TSEG2-1)<<16 | (TSEG1-1)<<8 | (BRP-1)

    3.4 速率-距离-约束速查

    速率总线长stub节点电容
    1M 40m 0.3m 30 100pF
    500k 100m 0.6m 30 100pF
    250k 250m 1.2m 30 200pF
    125k 500m 2.4m 30 500pF
    50k 1km 6m 30 1nF
    FD 5M <10m 0.15m <10 100pF

    四、帧格式速查

    4.1 数据帧(标准帧 8 字节)

    段位数内容
    SOF 1 显性(帧起始)
    ID 11 标识符(优先级)
    RTR 1 0=数据,1=远程
    IDE 1 0=标准,1=扩展
    r0 1 保留
    DLC 4 数据长度(0~8经典)
    数据 0~64 数据
    CRC 15/17/21 校验
    CRC DEL 1 隐性
    ACK 1 显性(接收方)
    ACK DEL 1 隐性
    EOF 7 隐性
    IFS 3 隐性

    4.2 帧类型速查

    帧RTRIDE数据用途
    标准数据 0 0 0~8B 主用
    标准远程 1 0 无 请求
    扩展数据 0 1 0~8B J1939
    扩展远程 1 1 无 请求
    FD 数据 0 EDL=1 0~64B 高速大块
    错误帧 – – 6显性/隐性+8隐性 报错
    过载帧 – – 6显性+7隐性 流控

    4.3 CAN FD 新增位

    位含义
    EDL FD帧标识(替代经典r0)
    BRS 切速(1=数据段高速)
    ESI 错误状态(1=被动错误)

    4.4 DLC 映射(CAN FD)

    DLC经典FD
    0-8 0-8B 0-8B
    9 – 12B
    10 – 16B
    11 – 20B
    12 – 24B
    13 – 32B
    14 – 48B
    15 – 64B

    五、错误计数器与状态速查

    5.1 错误计数规则

    事件TEC/REC 变化
    发送错 TEC +8
    发送成功 TEC -1
    接收错 REC +8
    接收成功 REC -1
    主动错误标志期间检测显性 +1

    5.2 状态转移

    状态TEC/REC错误标志
    主动错误 <96 6显性(破坏)
    错误警告 ≥96 –
    被动错误 96~127 6隐性(不破坏)
    总线关闭 TEC≥128 不通信

    5.3 恢复

    恢复机制
    主动→被动回主动 TEC/REC<96
    总线关闭→主动 128×11=1408隐性(自动)/ 软件

    5.4 错误码(LEC)

    LEC错误
    0 无错
    1 位填充错
    2 格式错
    3 ACK 错
    4 位1错(隐性位发显性读)
    5 位0错(显性位发隐性读)
    6 CRC 错

    六、高层协议速查

    6.1 CANopen ID 速查

    对象ID用途
    NMT 0x000 网络管理
    紧急 0x080 紧急报文
    PDO 0x181~0x57F 过程数据(实时)
    SDO 0x581~0x67F 服务数据(配置)
    心跳 0x700+ 节点心跳

    6.2 J1939 29bit ID 编码

    优先级(3) | 保留(1) | 数据页(1) | PF(8) | PS(8) | 源地址(8)

    PGN参数
    61444 EEC1 发动机(转速0.125rpm/bit)
    65262 发动机温度(水温)
    65263 发动机仪表(油压)
    59904 请求
    60416 应答

    6.3 UDS 服务速查

    SID服务请求正响应
    0x10 会话控制 10 03 50 03
    0x11 ECU 复位 11 01 51 01
    0x22 读数据 22 F1 90 62 F1 90 data
    0x27 安全访问 27 01/02 key 67 01 seed/67 02
    0x2E 写数据 2E F1 90 data 6E F1 90
    0x31 例程控制 31 01 FF 00 71 01 FF 00
    0x34 请求下载 34 74
    0x36 传输数据 36 76
    0x37 退出传输 37 77
    0x3E 保活 3E 00 7E 00

    6.4 UDS NRC(否定响应码)

    NRC含义
    0x13 格式错
    0x22 条件不满足
    0x24 请求序列错
    0x31 超范围
    0x33 安全拒绝(未解锁)
    0x78 响应待定(忙)
    0x7E 子功能不支持
    0x7F 服务不支持

    6.5 ISO-TP 帧速查

    类型PCI用途
    SF 0x0N ≤7B 单帧
    FF 0x1x 多帧首帧(总长+6B)
    CF 0x2x 续帧(序号+7B)
    FC 0x3x 流控(FS/BS/STmin)

    6.6 诊断 ID 速查

    ID用途
    0x7DF 广播诊断请求
    0x7E0~0x7E7 ECU 请求
    0x7E8~0x7EF ECU 响应

    七、功能安全审查清单

    7.1 物理层

    • 双端 120Ω 终端(万用表测 60Ω)
    • 双绞线(CAN_H/CAN_L)
    • 共模扼流圈(汽车级)
    • TVS 保护(ESD/EFT)
    • 分裂终端(60Ω+60Ω+4.7nF,可选)
    • 收发器汽车级(AEC-Q100)
    • stub 长度合规(1M<0.3m)
    • 节点数合规(<30)
    • 完整地平面

    7.2 协议层

    • 位定时全网一致(BRP/TSEG1/TSEG2/SJW)
    • 采样点 87.5%(主流)
    • 晶振 ±50ppm(禁 RC)
    • CAN FD 双位定时(NBTP+DBTP)
    • 帧格式正确(SOF/ID/CRC/ACK/EOF)
    • ID 分配合理(优先级)

    7.3 传输层

    • 错误中断处理(BOFF/EPVF/EWGF/LEC)
    • 错误计数器监控(TEC/REC)
    • 总线关闭恢复(ABOM + 次数限制)
    • 恢复超限进安全状态
    • 恢复后应用层重新同步
    • 自动重发策略(NART 或软件超时)
    • FIFO 溢出处理(覆盖/锁定)

    7.4 数据层

    • E2E 保护(CRC + 序列号 + 存活计数)
    • 关键消息超时监控
    • 关键控制回读校验
    • 数据校验(端到端 CRC)

    7.5 系统层

    • 双通道冗余(ASIL D,关键消息双发)
    • 安全状态(故障不执行危险动作)
    • 看门狗(任务存活监控)
    • 错误日志(可追溯)
    • 故障注入测试

    7.6 软件层

    • ISR 最小化(只读推队列)
    • RTOS 集成(消息队列/信号量/互斥锁)
    • 互斥锁保护(多任务共享)
    • 缓冲对齐(DMA/Cache)
    • 驱动分层(应用→驱动→硬件)

    八、全系列要点回顾

    8.1 L1 硬件基础层(01-03)

    • 01 物理层:差分信号(CAN_H/CAN_L),显性2V/隐性0V,线与,ISO 11898-2高速/-3低速/FD,收发器,120Ω双端终端,NRZ+位填充,CAN FD(5M/64B)
    • 02 信号完整性:直线总线拓扑,stub长度(1M<0.3m),节点数30,总线电容<100pF,双端终端抑制反射,分裂终端抗EMI,共模扼流圈,FD 5M SI严,汽车EMI/EMS AEC-Q100
    • 03 位定时同步:位时间四段(SYNC_SEG+TSEG1+TSEG2),采样点87.5%,硬同步(SOF)+重同步(帧中跳变),SJW 1~2Tq,时钟容差0.1-0.5%选±50ppm晶振,BTR配置,CAN FD双位定时(NBTP+DBTP)

    8.2 L2 协议时序层(04-07)

    • 04 帧格式:四种帧(数据/远程/错误/过载),数据帧七段(SOF+仲裁+控制+数据+CRC+ACK+EOF+IFS),仲裁段(ID+RTR+IDE),DLC,CRC15/17/21,ACK机制,标准11bit/扩展29bit,CAN FD(BRS/ESI/EDL)
    • 05 仲裁优先级:CSMA/CD+AMP,线与(显性覆盖隐性),逐位仲裁(ID高位比较,发隐性读显性=输),ID越小优先级越高,仲裁无冲突(输的转接收),同ID数据帧>远程帧/标准帧>扩展帧,优先级设计,饿死问题,CAN FD仲裁段1M数据段不仲裁
    • 06 错误处理:五种错误检测(位监控/位填充/CRC/格式/ACK),错误帧(主动6显性/被动6隐性+8隐性),错误计数器(TEC/REC,错+8成功-1),节点状态(主动<96/被动96-127/总线关闭≥128),自动重发,总线关闭恢复(1408隐性/软件)
    • 07 高层协议:CANopen(对象字典+PDO+SDO+心跳),J1939(29bit ID编码PGN),UDS(诊断服务0x10/0x22/0x2E/0x27刷写),ISO-TP(SF/FF/CF/FC大报文分包),CAN FD适配(64B单帧)

    8.3 L3 驱动实现层(08-11)

    • 08 控制器寄存器:Bosch C_CAN/M_CAN IP,STM32 bxCAN/FDCAN寄存器(MCR/MSR/BTR/ESR/邮箱/FIFO/过滤器),发送邮箱3个,接收FIFO 2×3级,验收过滤器(列表/屏蔽),RISC-V N300 M_CAN(同FDCAN改基址)
    • 09 传输模式:轮询(调试)/中断(主流)/DMA(FD大块),发送邮箱队列(3邮箱+软件队列),接收FIFO处理(覆盖/锁定),RTOS集成(消息队列+信号量+互斥锁),ISR最小化
    • 10 错误恢复:错误计数器监控,状态转移处理,总线关闭恢复(ABOM/软件/混合),功能安全端到端保护(协议层CRC/ACK+应用层E2E+序列号+超时+回读+冗余+安全状态+看门狗),AEGIX CAN容错(双通道冗余+恢复次数限制)
    • 11 Linux框架:SocketCAN(CAN当网络接口),PF_CAN协议族(RAW/BCM/ISO-TP/J1939),can-dev框架(c_can/m_can),设备树(bit-timing+can-fd),用户态socket API,can-utils(candump/cansend),ISO-TP/J1939内置

    8.4 L4 应用实战层(12-14)

    • 12 设备实战:裸机收发驱动,验收过滤器配置,环回测试,CANopen节点(对象字典/PDO/SDO/心跳),J1939解析(PGN/SPN),UDS诊断(0x10/0x22/0x27/0x2E),ISO-TP多帧(SF/FF/CF/FC),多CAN通道+RTOS,双通道冗余
    • 13 调试排查:工具链分层(candump/逻辑分析仪/示波器/万用表/dmesg),candump抓包,逻辑分析仪差分解码,示波器看差分波形,万用表测终端60Ω,错误帧分析,位定时/终端问题排查,典型故障定位,降速调试法
    • 14 排查手册:故障决策树(5大类),19故障速查,位定时/帧格式/错误计数器/高层协议速查,功能安全审查清单(6层),全系列回顾,学习路径,四总线总对照表

    九、CAN vs UART vs I2C vs SPI 总对照表

    9.1 物理层

    维度UARTI2CSPICAN
    线数 2(TX/RX) 2(SDA/SCL) 3+(SCK/MOSI/MISO/CS) 2(CAN_H/L)
    电气 单端 开漏+上拉 单端/推挽 差分
    电平 TTL/RS232 上拉到VCC TTL 差分2V/0V
    同步 异步 同步(SCL) 同步(SCK) 同步(位填充)
    拓扑 点对点 总线 主从星型/总线 直线总线
    终端 无 上拉 无 120Ω双端
    速度 ≤3M ≤3.4M(高速) ≤50M+ ≤1M(经典)/8M(FD)
    距离 RS232 15m 板级 板级 1M=40m,125k=500m
    抗扰 弱(单端) 弱(开漏) 弱(单端) 强(差分)

    9.2 协议层

    维度UARTI2CSPICAN
    帧 START+数据+STOP START+地址+ACK+数据+STOP CS+时钟+数据 SOF+ID+控制+数据+CRC+ACK+EOF
    寻址 无(点对点) 7/10bit地址 CS硬件选 ID(11/29bit)
    双工 全双工 半双工 全双工 半双工
    应答 无 ACK/NACK 无 ACK(多节点)
    多主 否 是(仲裁都退) 否 是(优先级仲裁)
    仲裁 无 线与都退 无(单主) CSMA/CD+AMP优先级
    错误检测 奇偶(可选) ACK/NACK 无 5种(位监控/填充/CRC/格式/ACK)
    错误恢复 无 重试 无 错误帧+自动重发+总线关闭
    流控 硬件/软件 无 无 过载帧(少用)
    数据长度 帧8/9bit 任意(每帧8bit) 任意 0-8经典/0-64 FD

    9.3 应用场景

    场景总线原因
    调试串口 UART 简单点对点
    GPS/蓝牙模块 UART 点对点
    传感器(温湿度) I2C 低速板级多设备
    EEPROM I2C 板级存储
    OLED/Flash SPI 高速
    ADC/DAC SPI 高速
    汽车ECU通信 CAN 汽车级可靠+多主
    工业自动化 CAN/CANopen 可靠+实时
    商用车 J1939(CAN) 标准化
    汽车诊断 UDS(CAN) 诊断标准

    9.4 调试

    维度UARTI2CSPICAN
    工具 串口工具 逻辑分析仪 逻辑分析仪+示波器 candump+逻辑分析仪+示波器+万用表
    难度 低 中 中高 高
    错误分析 简单 ACK/NACK 无(软件) 错误状态机(复杂)

    9.5 选型决策树

    要传什么?
    ├─ 点对点调试/模块 → UART
    ├─ 板级多设备低速 → I2C
    ├─ 板级高速(Flash/OLED/ADC) → SPI
    ├─ 汽车/工业多主可靠 → CAN
    │ ├─ 商用车 → J1939
    │ ├─ 工业自动化 → CANopen
    │ └─ 汽车诊断 → UDS
    └─ 大数据高速 → CAN FD(64B/帧)


    延伸阅读

    CAN 全系列

    • [[01-CAN物理层与差分电气]] / [[02-CAN信号完整性与拓扑]] / [[03-CAN位定时与同步]]
    • [[04-CAN帧格式]] / [[05-CAN仲裁与优先级]] / [[06-CAN错误处理与错误帧]] / [[07-CAN高层协议]]
    • [[08-CAN控制器寄存器与IP架构]] / [[09-CAN传输模式-轮询-中断-DMA]] / [[10-CAN错误恢复与总线关闭]] / [[11-CAN Linux驱动框架]]
    • [[12-CAN设备驱动实战]] / [[13-CAN调试与排查]]

    对照学习

    • [[14-SPI排查手册与速查表]] —— SPI 收官 + 四总线对照
    • [[14-I2C排查手册与速查表]] —— I2C 收官
    • [[00-CAN技术系列总目录]] —— CAN 总目录

    参考资料

    • Bosch CAN Specification 2.0 / CAN FD
    • ISO 11898-1(数据链路层)/ -2(物理层)
    • CiA 301(CANopen)/ SAE J1939 / ISO 14229(UDS)/ ISO 15765(ISO-TP)
    • ISO 26262 功能安全
    • STM32 RM0090/RM0433
    • Linux Documentation/networking/can.rst

    [[00-CAN技术系列总目录]] · 上一篇:[[13-CAN调试与排查]] · CAN 系列完结


    ✨ 感谢你的阅读 ✨

    技术之路漫漫,分享是为了更好地交流。 如果本文的内容对你有启发,希望能得到你的支持:

    👍 点赞   |   ⭐ 收藏   |   👀 关注

    如果你在调试过程中遇到了其他问题, 欢迎在 评论区 💬 留言,我们一起探讨。 关注我,一起交流底层开发的那些事儿!🚀


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » CAN 技术系列 14 · CAN 排查手册与速查表
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!