嵌入式工程师学习路线
嵌入式工程师学习路线
本路线面向”要给 MCU 加上 CAN FD”的嵌入式开发工程师:从看懂帧结构,到搭好调试环境,再到写出驱动、配好位定时、调试错误帧,最终能独立完成多节点 CAN FD 系统。
读者定位:本路线为辅助路线,网站主读者是模拟IC 设计工程师;嵌入式工程师作为辅助读者,在选型与物理层问题排查时可与模拟IC 工程师学习路线交叉参考。
这条路线适合谁
- 用过或没接触过 CAN、但熟悉 MCU 开发的嵌入式工程师;
- 目标是把 CAN FD 用起来:控制器初始化、收发驱动、位定时配置、调试排错;
- 需要掌握的工具以开源免费为主(SocketCAN / can-utils / python-can),不依赖商业工具也能走完全程。
与模拟IC 工程师路线的分工:本路线站在 MCU/控制器一侧,不深究收发器内部电路;若你负责选型或排查物理层问题,可交叉跳到模拟IC 线的阶段 2。
路线总览
| 阶段 | 主题 | 预计周期 | 关键输出 |
|---|---|---|---|
| 1 | 协议基础 | 1~2 周 | 能读懂一帧 CAN FD 报文,理解与 Classical CAN 的差异 |
| 2 | 环境与工具 | 1 周 | 一套能收发 CAN FD 的本地调试环境 |
| 3 | 驱动与库 | 2~4 周 | 可运行的驱动代码与收发测试程序 |
| 4 | 位定时与调试 | 2~3 周 | 稳定、可复现的位定时配置与排错手段 |
| 5 | 应用层与系统 | 2~3 周 | DBC 描述的多节点 CAN FD 系统 |
阶段 1:协议基础(1~2 周)
目标
掌握 CAN FD 帧结构、CAN 2.0 与 CAN FD 的差异,理解 DLC、CRC、位填充、错误机制等协议要素——这是后续一切工作的共同语言。
必读资料
- Bosch CAN FD Specification v1.0 — 免费且权威的协议源头,帧结构原始出处;
- ISO 11898-1:2024 — 现行协议标准,帧格式、仲裁、错误处理、CRC 全在此;
- Hartwich 2012:CAN FD 原始论文 — 作者讲设计动机,比直接啃标准更易懂;
- 饶运涛《CAN 原理与应用》 — 中文教材,入门友好;
- CAN FD 词条 + Classical CAN 词条 — 先锚定两个核心术语。
动手任务
- 用
candump抓一段总线流量,对照帧结构图逐字节拆解一帧 CAN FD 报文; - 手工画一张表格,列出 CAN 2.0 与 CAN FD 在 DLC 编码、CRC、位速率、错误状态指示器(ESI)语义上的差异;
- 写一段伪代码/流程图,描述”收到一帧 CAN FD 后控制器应完成哪些解析步骤”。
阶段 2:环境与工具(1 周)
目标
搭好一套”低成本、可复现”的 CAN FD 调试环境:主机侧用 SocketCAN + can-utils,硬件侧用 USB-CAN 卡,能收发即成功。
必读资料
- SocketCAN 工具条目 — Linux 内核自带 CAN 协议栈,免费主力;
- can-utils 工具集 —
cansend/candump/cangen等日常命令; - USB-CAN 适配卡 — 低成本硬件接入方式;
- python-can 库 — 用脚本驱动收发,方便自动化;
- BusMaster 或 PCAN-View/PRO — Windows 侧可选图形工具;
- SocketCAN 词条 — 术语速查。
动手任务
- 在 Linux 主机上用 SocketCAN 配置一个
vcan0(虚拟总线),cangen连续发帧、candump确认收到; - 用 SocketCAN 回环模式(或单卡自发自收)连续收发 100 帧 CAN FD,统计无误码;
- 用
ip -details link show can0查看实际协商出的位定时参数,理解命令行与硬件寄存器的对应关系; - 用 python-can 写一个 30 行以内的收发脚本,周期性发送并打印收到帧。
阶段 3:驱动与库(2~4 周)
目标
把协议和工具落到 MCU 上:能初始化 CAN FD 控制器(内置外设或 SPI 扩展如 MCP2518FD),写出可用的收发驱动。
必读资料
- python-can 库 — 在主机侧做协议仿真与测试,先于硬件验证逻辑;
- CANopen FD 词条 + CiA 1301 CANopen FD — 若产品需要应用层协议,这是入口;
- NXP TJA1462 数据手册 — 收发器选型与接口(也可看 TI TCAN1462-Q1 或 Microchip ATA6563);
- 知识库:控制器与驱动 — 控制器寄存器、DBC 等相关知识点(建设中);
- 教程:教程列表 — 原创动手教程(建设中,后续补充寄存器级示例)。
动手任务
- 用一款自带 CAN FD 控制器的 MCU(或 MCP2518FD 扩展),写初始化代码:配置模式、波特率寄存器、FD 使能;
- 写一个中断驱动的收发测试:每收 10 帧翻转一次 LED,每发 1 帧带 BRS 置位;
- 把同一套收发逻辑在 python-can 虚拟总线上再跑一遍,确认”代码逻辑”与”硬件行为”一致;
- 用
candump抓自己 MCU 发出的帧,逐字段核对与发送缓冲内容是否一致。
阶段 4:位定时与调试(2~3 周)
目标
理解采样点、TDC、相位裕度的物理含义,掌握位定时配置的实操方法,能独立用示波器解码抓帧、排查错误帧。
必读资料
- CiA 601-3 位定时配置与评估 — 位定时配置的直接指南;
- 示波器 CAN 解码 — 抓帧、解码、看波形的基础;
- 知识库:位定时与同步 — 采样点、TDC、相位裕度等知识点(建设中);
- 采样点词条 + TDC 词条 + 相位裕度词条 + 错误帧词条 — 四个最常用的调试术语。
动手任务
- 为一个 500 kbit/s + 2 Mbit/s(或 1M/5M)的组合计算采样点,并把计算结果写进 MCU 位定时寄存器,实测验证;
- 在数据段开启 TDC 后,对比开/关 TDC 的错误帧率差异,记录结论;
- 用示波器抓一帧 CAN FD,手动解码 EDL/BRS/ESI 位,与
candump输出对照; - 人为制造一种错误(如波特率失配、总线短路),观察错误帧波形与控制器错误状态寄存器,写下排查步骤。
阶段 5:应用层与系统(2~3 周)
目标
从”单点收发”走向”系统”:用 DBC 描述信号、接入应用层协议(CANopen FD)、设计多节点拓扑,并具备基本的 EMC/布线意识。
必读资料
- DBC 词条 + CANdb++ 编辑工具 — 用 DBC 统一描述信号,团队协作必备;
- CANopen FD 词条 + CiA 1301 — 应用层协议起点;
- 总线终端词条 + 共模扼流圈词条 — 拓扑与 EMC 的两个关键点;
- 知识库:工具与测试 — 分析工具与测试方法(建设中);
- 教程:教程列表 — 应用层相关原创教程(建设中)。
动手任务
- 建一个包含 3 个节点的 DBC(含车速、转向角等 3~5 个信号),用 python-can 按 DBC 编码发送并解码验证;
- 搭一个 3 节点 CAN FD 总线(可用开发板 + 终端电阻),测试最长支线与最远节点组合下的稳定性;
- 写一份”拓扑与布线自查清单”:终端电阻值、支线长度、共模扼流圈、接地点,逐项检查;
- 跑 24 小时长稳测试,记录错误帧统计,确认系统可用性。
完成标志
- 不看资料能画出 CAN FD 帧结构,并列出与 Classical CAN 的 5 个关键差异;
- 有自己的调试环境(SocketCAN + USB-CAN 卡或虚拟总线),能随时收发并抓帧分析;
- 能独立完成 MCU 侧 CAN FD 控制器的初始化、发送、接收,代码可复用;
- 能针对”采样点/波特率/TDC”等配置问题进行诊断,并用示波器验证结论;
- 交付过一个多节点 CAN FD 系统(含 DBC),并有错误帧/稳定性数据支撑。
参见
- 模拟IC 工程师学习路线 — 收发器选型、物理层深挖时参考;
- 学习路线总览 — 两条路线如何选;
- 控制器与驱动知识域 — 相关知识点;
- 工具与测试知识域 — 测试与调试知识点。