
第一章 CAN协议的应用范围与常见场景
1.1 CAN总线简介
CAN(Controller Area Network,控制器局域网络)是由德国Bosch公司于1983年开发的串行通信协议,最初专为汽车电子系统设计,如今已广泛应用于工业自动化、医疗设备、航空航天等多个领域。
1.2 核心应用领域
1.2.1 汽车电子
CAN总线是汽车网络的核心技术,主要应用于:
-
动力系统:发动机控制单元(ECU)、变速箱控制、ABS/ESP系统
-
车身控制:车灯、雨刷、车窗、空调等舒适系统
-
底盘安全:安全气囊、助力转向、胎压监测(TPMS)
-
信息娱乐:仪表盘、导航系统、车载娱乐
一辆中高端汽车通常包含5-10条CAN总线,连接50-100个电子控制单元。
1.2.2 工业自动化
在工业领域,CAN总线被大量采用:
-
PLC控制系统:工业机器人的关节控制、产线协调
-
过程控制:工厂自动化产线的实时监控
-
电机驱动:伺服电机、步进电机的精确控制
-
传感器网络:工业传感器的数据采集与传输
1.2.3 航空航天
航天嵌入式系统对可靠性的要求极高,CAN总线凭借其出色的容错能力,在以下场景得到应用:
-
卫星姿态控制系统的内部通信
-
运载火箭的遥测与控制
-
航空电子设备的机内网络
-
无人机飞控系统
1.2.4 其他领域
-
医疗设备:CT扫描仪、MRI设备、输液泵
-
船舶系统:船舶动力系统、导航设备
-
轨道交通:地铁控制、列车通信网络
1.3 为什么选择CAN总线?
| 特性 | CAN总线优势 |
|---|---|
| 可靠性 | 错误检测与自动重发机制,电磁兼容性好 |
| 实时性 | 短帧结构(最多8字节),仲裁机制保证优先级 |
| 成本 | 简单双线差分传输,无需复杂总线仲裁器 |
| 灵活性 | 多主从结构,节点可自由加入/离开 |
| 距离 | 高速CAN(1Mbps)传输距离40m,低速CAN(125kbps)可达500m |
1.4 CAN与其他总线协议的对比
在汽车和工业领域,CAN面临多种竞争协议的选择:
| 特性 | CAN | LIN | FlexRay |
|---|---|---|---|
| 传输速率 | 1Mbps max | 20kbps max | 20Mbps max |
| 数据长度 | 8字节 | 8字节 | 64-192字节 |
| 拓扑结构 | 总线型 | 总线型 | 星型/总线 |
| 成本 | 中等 | 低 | 高 |
| 典型应用 | 核心控制 | 舒适系统 | 高速安全 |
结论:CAN在可靠性和成本之间取得了最佳平衡,特别适合对实时性和确定性有要求的中等速率应用场景。
第二章 CAN应用层协议常见分类及异同
2.1 应用层协议概述
CAN协议仅定义了物理层和数据链路层(ISO 11898),在实际应用中需要定义应用层协议来实现具体的通信语义。主要的CAN应用层协议包括:SAE J1939、ISO 15765(OBD-II)、DeviceNet、NMEA 2000等。
▲ CAN应用层协议分类:按应用领域划分的典型协议
2.2 主流应用层协议详解
2.2.1 SAE J1939
SAE J1939是美国汽车工程师协会制定的商用车CAN总线标准,是目前最广泛使用的商用车网络协议。
特点:
-
基于CAN 2.0B(29位扩展帧ID)
-
专为卡车、客车、农业机械设计
-
支持250kbps和500kbps两种波特率
-
定义了完整的参数组(PGN)和可疑参数编号(SPN)
29位ID结构:
| 字段 | Priority | R | DP | PF | PS | SA |
|---|---|---|---|---|---|---|
| 位数 | 3位 | 1位 | 1位 | 8位 | 8位 | 8位 |
| 说明 | 优先级0-7 | 保留位 | 数据页 | PDU格式 | PDU特定 | 源地址 |
-
Priority(P):报文优先级,0最高,7最低
-
R:保留位,固定为0
-
DP:数据页扩展位
-
PF:PDU格式,决定是组播还是点对点
-
PS:PDU特定段,PF<240时表示目标地址,PF≥240时表示组编号
-
SA:源地址,标识发送节点
典型应用:
-
发动机转速、扭矩、油温、水温的实时监控
-
变速箱状态与控制
-
车辆行驶数据记录
-
故障诊断与报警
2.2.2 ISO 15765(OBD-II诊断协议)
ISO 15765定义了基于CAN总线的车载诊断系统(OBD-II)通信协议。
特点:
-
主要用于乘用车诊断
-
标准化诊断请求与响应格式
-
支持9种标准诊断服务模式(Mode)
诊断服务模式:
| Mode | 功能 | 示例 |
|---|---|---|
| Mode 01 | 当前诊断数据 | 实时氧传感器读数 |
| Mode 02 | 冻结帧数据 | 故障发生时的快照 |
| Mode 03 | 存储的故障码 | 读取历史故障 |
| Mode 04 | 清除故障码 | 复位故障指示灯 |
| Mode 05 | 氧传感器监控数据 | 催化器前/后氧传感器 |
| Mode 07 | 当前故障码 | 检测中的故障 |
| Mode 09 | 车辆信息 | VIN码、车架号 |
2.2.3 DeviceNet
DeviceNet是Rockwell Automation开发的工业自动化协议,基于CAN 2.0A(11位标准帧)。
特点:
-
主从结构与多主从结构并存
-
支持DeviceNet对象库
-
最多64个节点
-
传输速率:125kbps/250kbps/500kbps
典型应用:
-
工业传感器与执行器的联网
-
电机启动器、继电器模块
-
过程仪表数据采集
2.2.4 NMEA 2000
NMEA 2000是海洋电子设备的通信标准,由美国国家海洋电子协会制定。
特点:
-
基于J1939扩展
-
标准化了船舶电子设备的通信
-
支持即插即用
-
250kbps波特率
典型应用:
-
GPS/北斗定位系统
-
深度探测声纳
-
船舶发动机监控
-
舵角指示器
2.3 主流协议的对比与选型
| 协议 | 物理层 | ID长度 | 典型速率 | 主要应用 | 节点数 |
|---|---|---|---|---|---|
| SAE J1939 | CAN 2.0B | 29位 | 250/500kbps | 商用车 | 64 |
| ISO 15765 | CAN 2.0A/B | 11/29位 | 500kbps | 乘用车诊断 | 不限 |
| DeviceNet | CAN 2.0A | 11位 | 125-500kbps | 工业自动化 | 64 |
| NMEA 2000 | CAN 2.0B | 29位 | 250kbps | 船舶电子 | 64 |
| CANopen | CAN 2.0A | 11位 | 125-1Mbps | 工业控制 | 127 |
2.4 协议选择指南
| 应用场景 | 推荐协议 | 说明 |
|---|---|---|
| 商用车/卡车/客车 | SAE J1939 | 标准化程度高,生态完善 |
| 农业机械 | SAE J1939 | 同样适用J1939标准 |
| 工业自动化 | CANopen/DeviceNet | 面向工厂自动化 |
| 乘用车诊断 | ISO 15765 | OBD-II标准诊断 |
| 船舶电子 | NMEA 2000 | 海洋导航设备标准 |
第三章 CAN的底层电气规则及CAN帧结构
3.1 CAN物理层电气特性
3.1.1 差分信号传输
CAN总线采用差分信号传输方式,使用两条导线:CAN_H(高)和CAN_L(低)。
▲ CAN显性/隐性电平定义:差分电压决定逻辑值
电平定义:
| 状态 | CAN_H | CAN_L | 差分电压 | 逻辑值 |
|---|---|---|---|---|
| 显性(Dominant) | 3.5V | 1.5V | ≥2.0V | 0 |
| 隐性(Recessive) | 2.5V | 2.5V | ≤0.5V | 1 |
关键特性:
-
显性位(0)会覆盖隐性位(1)------这就是CAN总线仲裁的基础
-
差分传输有效抑制共模干扰
-
双线拧合具有良好的电磁兼容性(EMC)
3.1.2 终端电阻
CAN总线两端必须接120Ω终端电阻,用于:
-
吸收信号反射
-
提供稳定的直流偏置
-
维持总线特性阻抗(120Ω)
▲ 终端电阻配置:仅总线两端各一个120Ω,总阻值60Ω
终端电阻位置:
-
仅在总线两端的节点上加
-
中间节点不应加终端电阻
-
使用CANalyzer或示波器测量波形确认终端匹配
3.1.3 传输距离与速率
CAN总线的传输距离与波特率成反比:
| 波特率 | 最大总线长度 | 典型应用 |
|---|---|---|
| 1Mbps | 40m | 高速数据通信 |
| 500kbps | 100m | 汽车动力网络 |
| 250kbps | 250m | 舒适系统 |
| 125kbps | 500m | 长距离低速 |
| 50kbps | 1000m | 超长距离 |
计算原则:信号上升时间应小于总线最大延迟的3-5倍。
3.2 CAN帧结构详解
3.2.1 帧的类型
CAN协议定义了5种类型的帧:
| 帧类型 | 用途 | 优先级 |
|---|---|---|
| 数据帧 | 发送数据 | 高 |
| 远程帧 | 请求数据 | 中 |
| 错误帧 | 错误通知 | 最高 |
| 过载帧 | 接收准备未就绪 | 中 |
| 帧间隔 | 分隔帧 | - |
3.2.2 标准数据帧(11位ID)
标准数据帧是CAN 2.0A格式,使用11位标识符:
▲ CAN数据帧结构:标准帧各字段组成
各字段详解:
| 字段 | 位数 | 说明 |
|---|---|---|
| SOF | 1 | 帧起始,显性位,同步所有节点 |
| 仲裁段 | 12 | 11位ID + RTR位 |
| 控制段 | 6 | IDE + r0 + DLC |
| 数据段 | 0-64 | 0-8字节有效数据 |
| CRC段 | 16 | 15位CRC + 界定符 |
| ACK段 | 2 | ACK槽 + 界定符 |
| EOF | 7 | 帧结束,隐性位 |
| IFS | 3 | 帧间隔 |
各字段详解:
-
SOF(Start of Frame):帧起始,由1个显性位组成,用于同步所有节点
-
仲裁段(Arbitration Field):显性(0)= 数据帧;隐性(1)= 远程帧
-
11位标识符:报文唯一标识,值越小优先级越高
-
RTR位:远程传输请求位
-
控制段(Control Field):显性(0)= 标准帧;隐性(1)= 扩展帧
-
IDE:标识符扩展位
-
r0:保留位,显性
-
DLC(Data Length Code):数据长度码,4位,表示数据字节数(0-8)
-
数据段(Data Field):0-8字节的有效数据
-
CRC段(CRC Field):15位CRC序列:基于多项式计算;1位CRC界定符:隐性位
-
ACK段(ACK Field):ACK槽:接收节点发送显性位表示正确接收;ACK界定符:隐性位
-
EOF(End of Frame):7个隐性位,帧结束
-
IFS(Inter Frame Space):3位帧间隔
3.2.3 扩展数据帧(29位ID)
扩展帧是CAN 2.0B格式,使用29位标识符:
▲ CAN扩展帧结构:29位ID与标准帧的对比
扩展帧ID结构(29位):
| 字段 | 位数 | 说明 |
|---|---|---|
| 基本ID | 11 | ID28-ID18,对应标准帧ID |
| SRR | 1 | 替代远程请求位,固定隐性 |
| IDE | 1 | 扩展标识符,固定隐性 |
| 扩展ID | 18 | ID17-ID0 |
| RTR | 1 | 远程传输请求位 |
3.2.4 远程帧
远程帧用于请求其他节点发送数据,结构与数据帧类似:
| 区别点 | 数据帧 | 远程帧 |
|---|---|---|
| RTR位 | 显性(0) | 隐性(1) |
| 数据段 | 有数据 | 无数据(DLC可为0-8) |
| 用途 | 主动发送数据 | 请求数据 |
3.2.5 错误帧
当节点检测到错误时,发送错误帧:
错误帧结构:
| 字段 | 位数 | 说明 |
|---|---|---|
| 错误标志 | 6 | 显性/隐性(根据节点状态) |
| 错误界定符 | 8 | 隐性 |
错误类型:
| 错误类型 | 检测条件 |
|---|---|
| 位错误 | 发送的位与总线监视的位不一致 |
| 填充错误 | 连续6个相同电平位(违反位填充规则) |
| CRC错误 | 接收的CRC与计算的CRC不匹配 |
| 格式错误 | 固定格式位(CRC界定符、ACK界定符、EOF)不合格 |
| ACK错误 | 发送节点未检测到ACK槽的显性位 |
3.2.6 位填充规则(Bit Stuffing)
为保证同步,CAN采用位填充机制:
规则:当发送端检测到数据段、仲裁段、控制段中连续出现5个相同电平位时,必须自动插入1个相反电平位。
位填充示例:
原始数据: 11111000011
填充后: 111110011001011 (在5个1后插入0,在5个0后插入1)
接收端自动去除填充位,恢复原始数据。
3.3 CAN总线仲裁机制
CAN总线采用非破坏性仲裁,当多个节点同时发送时,通过ID逐位比较决定优先级

CAN仲裁流程:节点发送同时监听,非破坏性优先级仲裁
仲裁原理:
-
节点发送的同时监听总线
-
若发送显性位(0)但读到隐性位(1),说明有更高优先级,退出竞争
-
最终赢得总线的节点继续发送,优先级最高
ID优先级示例:
| 节点 | ID | 二进制 | 仲裁结果 |
|---|---|---|---|
| A | 0x100 | 001 0000 0000 | 赢得总线 |
| B | 0x101 | 001 0000 0001 | 仲裁失败 |
| C | 0x110 | 001 0001 0000 | 仲裁失败 |
结论:ID数值越小,优先级越高。ID=0x000拥有最高优先级。
第四章 CAN协议控制器原理
4.1 CAN控制器架构
CAN控制器是实现CAN协议的核心硬件,负责处理数据链路层的所有功能。
▲ CAN控制器架构:核心模块与数据流向
4.1.1 控制器核心模块
典型的CAN控制器内部包含以下模块:
| 模块 | 全称 | 功能 |
|---|---|---|
| IML | Interface Management Logic | CPU命令接口、缓冲区管理、中断处理 |
| TXB | Transmit Buffer | 存储待发送帧 |
| RXB | Receive Buffer | 存储接收帧(RXB0/RXB1) |
| Filter | Acceptance Filter | 验收滤波,过滤不需要的帧 |
| BTL | Bit Timing Logic | 位时序管理、采样点配置 |
| CRC | CRC Generator/Checker | CRC校验 |
| EML | Error Management Logic | 错误计数、状态转换 |
4.2 位时序与波特率配置
4.2.1 位时间结构
CAN总线的一个位时间分为4个段:
▲ CAN位时序结构:同步段、传播段、相位缓冲段
| 段名 | 作用 | 时间量子(Tq) |
|---|---|---|
| SYNC_SEG | 同步段,所有节点在此同步 | 1 Tq |
| PROP_SEG | 补偿物理延迟( transceiver + 总线) | 1-8 Tq |
| PS1 | 吸收相位误差 | 1-8 Tq |
| PS2 | 选择采样点位置 | 1-8 Tq |
4.2.2 波特率计算
波特率 = CAN时钟频率 / (BRP × (SYNC_SEG + PROP_SEG + PS1 + PS2))
其中:
-
BRP(波特率预分频器):1-64
-
Tq(时间量子) = BRP / CAN时钟
配置示例(CAN时钟=8MHz,目标波特率=500kbps):
// 最佳配置(采样点87.5%)
SYNC_SEG = 1
PROP_SEG = 1
PS1 = 7
PS2 = 2
BRP = 2
// Tq = 2 / 8MHz = 0.25μs
// 1位时间 = (1+1+7+2) × 0.25μs = 2.75μs
// 波特率 = 1 / 2.75μs = 363.6kbps ≈ 500kbps
4.2.3 采样点配置
采样点位置对通信可靠性至关重要:
| 应用场景 | 推荐采样点 |
|---|---|
| 汽车标准 | 87.5% |
| DeviceNet | 62.5% / 87.5% |
| CANopen | 87.5% |
| J1939 | 87.5% |
// 采样点计算公式
sample_point = (SYNC_SEG + PROP_SEG + PS1) / Total_Bit_Time × 100%
// 示例(87.5%采样点)
sample_point = (1 + 1 + 7) / (1+1+7+2) × 100% = 81.8% // 接近目标
4.3 发送与接收流程
▲ CAN发送接收时序:CPU与控制器的交互过程
4.3.1 发送流程
-
CPU写入TX缓冲区(ID + DLC + DATA)
-
控制器进行位填充
-
并行转串行,从TX引脚发出
-
发送完成后等待ACK响应
-
发送完成中断通知CPU
4.3.2 接收流程
-
RX引脚接收串行数据
-
串行转并行,去除位填充
-
CRC校验
-
验收滤波决定是否接收
-
写入RX缓冲区
-
接收完成中断通知CPU
4.4 验收滤波器
验收滤波器是CAN控制器的关键功能,决定哪些帧被接收:
4.4.1 单滤波器模式
单滤波器同时检查ID和数据段的第一个字节:
// 单滤波器配置示例
// 假设要接收ID=0x123的帧
Filter_Config = 0x123 << 5; // 只关心ID的高11位
Mask_Config = 0x7FF; // 全部11位都参与比较
4.4.2 双滤波器模式
双滤波器可以同时监控两个不同的ID范围:
// 滤波器0:接收ID范围 0x100-0x10F
Filter0_Config = 0x100 << 5;
Mask0_Config = 0xFF8; // 只关心高5位
// 滤波器1:接收ID 0x200
Filter1_Config = 0x200 << 5;
Mask1_Config = 0x7FF; // 全部比较
4.5 错误状态与处理
CAN节点有3种错误状态:
▲ CAN错误状态机:主动错误→被动错误→总线关闭
| 状态 | TEC/REC | 行为 |
|---|---|---|
| 主动错误 | < 128 | 正常通信,可发送主动错误标志 |
| 被动错误 | 128-255 | 延迟重发,只能发送被动错误标志 |
| 总线关闭 | > 255 | 节点脱离总线,需重启恢复 |
4.6 典型CAN控制器芯片
| 芯片型号 | 厂商 | 接口 | 特性 |
|---|---|---|---|
| MCP2515 | Microchip | SPI | 独立CAN控制器 |
| SJA1000 | NXP | Parallel/8-bit | 汽车级控制器 |
| TJA1050 | NXP | - | 高速CAN收发器 |
| SN65HVD230 | TI | - | 3.3V CAN收发器 |
| STM32F4xx | ST | 内置 | ARM Cortex-M4集成控制器 |
4.6.1 MCP2515寄存器配置示例
// MCP2515初始化配置
void MCP2515_Init(void) {
// 配置波特率:500kbps @ 16MHz
// BRP=2, SYNC=1, PROP=1, PS1=6, PS2=1
SPI_Write(CNF1, 0x01); // BRP=2, SJW=1
SPI_Write(CNF2, 0xB1); // BLTMODE=1, SAM=1, PHSEG1=7
SPI_Write(CNF3, 0x01); // PHSEG2=1
SPI_Write(CANINTE, 0x00); // 关闭中断
SPI_Write(CANCTRL, 0x00); // 正常模式
}
// 发送一帧数据
voidMCP2515_TxMessage(uint16_t id, uint8_t dlc, uint8_t *data) {
uint8_t sidh = (id >> 3) & 0xFF;
uint8_t sidl = (id << 5) & 0xE0;
SPI_Write(TXB0SIDH, sidh);
SPI_Write(TXB0SIDL, sidl);
SPI_Write(TXB0DLC, dlc & 0x0F);
for (int i = 0; i < dlc; i++) {
SPI_Write(TXB0D0 + i, datai);
}
SPI_Write(TXB0CTRL, 0x08); // TXREQ
}
第五章 实际应用中的常见问题及调试步骤
5.1 常见问题分类
▲ CAN调试流程:硬件→软件→总线问题逐级排查
5.1.1 硬件相关问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 总线无通信 | 终端电阻缺失/过多 | 检查总线两端120Ω终端电阻 |
| 波形畸变 | 阻抗不匹配 | 调整线缆,使用屏蔽双绞线 |
| 通信距离短 | 信号衰减/干扰 | 降低波特率,加装滤波器 |
| 偶发错误 | 电磁干扰/接地不良 | 加强屏蔽,改进接地 |
5.1.2 电气特性问题排查
终端电阻配置错误
| 配置 | 终端阻值 | 总线阻抗 | 结果 |
|---|---|---|---|
| 正确 | 两端各120Ω | 60Ω | 波形良好 |
| 错误 | 仅一端120Ω | 120Ω | 反射增加 |
| 错误 | 两端各60Ω | 30Ω | 波形严重畸变 |
接地电位差问题
当不同节点存在接地电位差时(>2V),会导致通信错误。
解决方案:
-
使用隔离CAN收发器
-
统一接地电位
-
在CAN_GND线上串联阻值平衡
5.1.3 软件配置问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法发送 | 波特率配置错误 | 重新计算并配置位时序 |
| 无法接收 | 验收滤波器太严格 | 放宽滤波器设置 |
| 丢帧 | 中断处理不及时 | 优化中断服务程序 |
| 乱码 | ID格式错误(标准/扩展混淆) | 检查IDE位设置 |
5.2 调试工具与方法
5.2.1 示波器/逻辑分析仪调试
观测要点:
-
SOF位:确认帧起始正确(1位显性)
-
差分电压:显性≥2V,隐性≤0.5V
-
波形完整性:无畸形、无毛刺
-
ACK位:确认接收节点应答
-
帧间隔:确认正确间隔
5.2.2 CAN分析仪使用
推荐工具:
| 工具 | 厂商 | 特点 |
|---|---|---|
| CANalyzer/CANoe | Vector | 专业汽车总线分析 |
| PCAN-View | PEAK-System | PCAN硬件配套 |
| CANopen Magic | - | CANopen协议分析 |
| cantact | Linklayer Labs | 开源CAN分析仪 |
分析流程:
-
连接硬件:CAN接口 → 分析仪 → PC
-
配置参数:波特率、采样点、终端电阻
-
监控总线:捕获帧、过滤ID、记录时序
-
分析问题:错误帧统计、丢帧率、延迟
-
5.2.3 软件调试技巧
Python-CAN库使用示例
import can
创建总线
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)
发送消息
msg = can.Message(
arbitration_id=0x123, 11位标准ID
data=0x01, 0x02, 0x03, 0x04, 4字节数据
is_extended_id=False
)
bus.send(msg)
接收消息(10秒超时)
msg = bus.recv(timeout=10)
print(f"ID: 0x{msg.arbitration_id:X}, Data: {msg.data.hex()}")
5.3 典型故障案例分析
案例1:汽车CAN总线偶发通信故障
故障现象:
-
车辆行驶中偶发仪表盘显示异常
-
故障码P0300(多缸失火)
诊断过程:
-
使用CANoe监控总线,发现偶发错误帧
-
检查波形,发现低频干扰
-
定位发动机舱线束与点火线圈线缆并行
解决方案:
-
重新布线,增加CAN线与高压线间距
-
加装共模扼流圈
-
改进接地,使用星型接地
案例2:CAN波特率不匹配
故障现象:
-
新节点无法加入CAN网络
-
无ACK响应
诊断过程:
-
测量新节点波特率:250kbps
-
目标网络波特率:500kbps
-
晶振频率偏差导致配置错误
解决方案:
// 正确配置(8MHz晶振,500kbps)
// BRP=2, SYNC=1, PROP=1, PS1=7, PS2=2
CNF1 = 0x01; // BRP=2
CNF2 = 0xB1; // PHSEG1=7
CNF3 = 0x02; // PHSEG2=2
案例3:终端电阻缺失
故障现象:
-
节点间距超过100米时通信不稳定
-
严重反射波
诊断过程:
-
测量总线阻抗≠60Ω
-
发现终端电阻失效
解决方案:
-
更换120Ω终端电阻
-
确保总线两端各有终端
5.4 调试检查清单
| 检查项 | 内容 | 方法 |
|---|---|---|
| 终端电阻 | 两端各120Ω,总阻值60Ω | 万用表测量 |
| 线缆规格 | 屏蔽双绞线,120Ω阻抗 | 目视检查 |
| 波特率 | 所有节点一致 | CAN分析仪验证 |
| 采样点 | 87.5%(汽车标准) | 配置检查 |
| 接地 | 所有节点共地 | 电位测量 |
| 波形 | 无反射、无毛刺 | 示波器观察 |
附录
附录A:CAN常用波特率配置表
| 目标波特率 | 晶振8MHz | 晶振16MHz | 晶振12MHz |
|---|---|---|---|
| 1Mbps | BRP=4, BT=8 | BRP=2, BT=8 | BRP=3, BT=4 |
| 500kbps | BRP=8, BT=8 | BRP=4, BT=8 | BRP=6, BT=4 |
| 250kbps | BRP=8, BT=16 | BRP=8, BT=8 | BRP=6, BT=8 |
| 125kbps | BRP=16,BT=16 | BRP=8, BT=16 | BRP=12, BT=8 |
附录B:常用CAN芯片选型
| 应用场景 | 推荐芯片 | 说明 |
|---|---|---|
| 汽车ECU | SJA1000 + TJA1050 | 汽车级认证 |
| 工业控制 | MCP2515 + SN65HVD230 | 性价比高 |
| STM32内置 | STM32F4xx/F7xx | 集成度高 |
| 高速采样 | FPGA + CAN IP核 | 灵活定制 |