做嵌入式或者车载总线调试的朋友,手里应该都常备着那么一两块USB转CAN的盒子。之前我一直用某友商的经典CAN工具,直到最近项目要求做CANFD诊断和Bootloader刷写,老的设备带不动新协议,于是搞了一块同星TC1014回来配合TSMaster使用。这块硬件加TSMaster软件,前前后后折腾了大半天,把驱动安装、通道配置、报文收发整条链路跑通了一遍。这篇文章就把我这次实战的完整过程记录下来,从接线到配置再到收发,顺带把我踩过的坑一并列出来,希望能帮准备用TSMaster做CANFD调试的同行少走几步弯路。
1. 准备工作与整体思路
1.1 为什么选TSMaster加TC1014这套组合
先交代一下背景。手里那批板子之前一直用的是经典CAN 2.0,通信速率500kbps,一帧最多8字节,做常规的报文读取和参数标定完全够用。但今年开始要量产的控制器里,OTA升级、UDS诊断、XCP标定全部要往CANFD上迁,数据场从8字节一下跳到64字节,波特率也从500k提到2M甚至5M。老设备不支持CANFD,换方案就成了硬需求。
市面上能做CANFD的工具不少,Vector的VN16xx系列确实稳,但那价格对个人开发者和小团队来说有点劝退。周立功的USBCANFD系列和同星的TC系列属于国产工具里性价比比较高的,功能覆盖日常调试足够。我这次选TC1014的原因是,它和TSMaster都是同星自家生态,软硬件配合的兼容性问题会少很多,而且TSMaster本身免费,不需要像Vector那样单独买授权,做项目验证和产线调试都很方便。
实测下来,这套组合最舒服的地方有两点。第一是TSMaster的界面布局和主流IDE很像,左边工程树、中间报文区、下面Trace窗口,从别的工具迁移过来基本没有学习成本。第二是它内置了总线记录、回放、DBC编辑、诊断脚本这些功能,一个软件全包了,不需要再接第三方插件。对个人开发者来说,省掉的不只是钱,还有来回切换工具的时间。
1.2 CANFD和经典CAN到底差在哪
很多刚接触CANFD的朋友容易想当然,以为只是把DLC加长了。实际上CANFD的改动是底层协议级的,主要有三点。
第一,数据场长度可变,经典CAN一帧最多8字节,CANFD最多可以到64字节。这意味着同样发一轮数据,CANFD理论上用更少的帧数就能传完,总线负载自然降下来了。第二,波特率是双速率的,仲裁段保持原来的速率保证和其他节点兼容,数据段可以提速到2M、5M甚至更高。这个设计很聪明,相当于把“排队进站”和“高速行驶”分开了。第三,帧格式上多了一个FDF标志位,用来区分是经典CAN帧还是CANFD帧,还有一个BRS位,表示数据段有没有切换到高速率。
这里要注意一个关键细节:如果总线上同时存在经典CAN节点和CANFD节点,经典CAN节点收到CANFD帧时会直接报错,因为它的控制器根本不认识FDF位。所以做混合网络的时候,一定要把CANFD节点的帧格式配置成经典CAN兼容模式,或者干脆让所有节点都统一支持CANFD,不然后期排查错误帧会相当头疼。
既然说到技术选型,我顺手整理了一个对比表,方便大家直观参考。
| 对比维度 | 经典CAN | CANFD |
|---|---|---|
| 最大数据场 | 8字节 | 64字节 |
| 仲裁段波特率 | 固定单一速率 | 可单独配置(通常1M以下) |
| 数据段波特率 | 与仲裁段相同 | 最高可达8M(常见2M/5M) |
| 帧格式标志 | 无 | FDF位、BRS位 |
| 典型应用 | 常规控制报文 | 诊断、OTA、标定、日志记录 |
说到底,CANFD不是全新协议,它是在经典CAN的基础上做兼容性扩展。理解这一点后面配通道参数的时候就不会懵,很多配置项其实都是在回答“仲裁段多快、数据段多快、要不要切Frame格式”这几个问题。
2. 环境搭建:驱动安装与硬件接线
2.1 驱动安装与固件校验
拿到TC1014之后第一步不是接设备,而是先把TSMaster装好。去同星官网下载最新版安装包,建议直接选完整版,虽然体积大一点,但省得后面装LIN、FlexRay插件还要重新折腾。安装过程很简单,一路下一步就行,唯一要注意的是安装路径不要带中文和空格,否则后面加载一些脚本的时候容易出现奇怪的编码问题。
把TC1014插到电脑USB口,Windows会自动弹出声提示,接着就能在设备管理器里看到新的USB转CAN设备。如果设备管理里显示的是未知设备或者带黄色感叹号,那就需要手动安装驱动。TSMaster安装目录下自带驱动文件,一般在C:\Program Files\TOSUN\TSMaster\Driver这个路径。手动更新驱动的时候指向这个目录就行,系统会自动匹配。
装完驱动别急着用,先做一次固件校验。TC1014的固件版本可以直接在TSMaster的设备信息界面查,打开软件后点“Hardware”模块,如果能看到设备型号、固件版本号、序列号这些信息,说明驱动和固件都正常。我自己遇到过一种情况,设备插上后TSMaster能识别到,但点连接就报错,后来发现是固件版本太旧,和当前版本的TSMaster不匹配。去官网重新烧录固件之后问题立刻消失。
这块要提醒一句:同星设备的固件升级工具是独立的小程序,不在TSMaster主软件里,下载的时候注意别漏了。烧录固件过程中不要拔USB线,也不要断电,否则设备有可能变砖。虽然大部分情况重新插拔能救回来,但本着多一事不如少一事的原则,升级前把其他占用USB的程序都关掉最稳妥。
2.2 接线方式与引脚定义
TC1014的DB9接口引脚定义和市面上大多数CAN工具一致,遵循CANopen标准。看设备外壳上印的丝印就行,上面标了CAN_H、CAN_L、GND,对应DB9的第7脚、第2脚和第3脚。如果没有丝印,查官方手册也可以。
接线的时候有一个容易被忽略的点:GND一定要接。很多人觉得CAN是差分信号,两根线就能通信,实际项目中如果两个节点之间没有共地,总线电压参考点就不一致,容易出现间歇性通信失败,而且这种故障特别难查。我用一个简单类比来理解这个问题:CAN_H和CAN_L就像两个人用一根绳子拔河,GND就是各自的脚下地面,如果两块地板高度不一样,绳子再怎么拉也是斜的。所以哪怕是近距离调试,也建议把GND连上,用屏蔽双绞线最好。
连接具体设备时,先确认目标设备这边的CAN接口定义,不同厂商对DB9引脚的使用偶尔有出入。如果两边定义不一致,转接变得做一根交叉线。我建议首次连接前用万用表的蜂鸣档测一下线的导通性,确认CAN_H对CAN_H、CAN_L对CAN_L、GND对GND都通,再上电通信。这个步骤虽然多花两分钟,但能排除掉一多半接线错误导致的“通信失败”。
2.3 终端电阻和信号质量的讲究
总线两端各有一个120欧终端电阻,这是CAN/CANFD的老规矩,用来减少信号反射。调试小板通常只有一路节点,如果目标设备本身没有内置终端电阻,就需要在TC1014那一端或者电缆末端跨接一个120欧电阻。
有一个快速判断方法:用万用表测CAN_H和CAN_L之间的阻值。如果是60欧左右,说明总线上两个终端电阻都装好了;如果是120欧,说明只装了一端;如果是无穷大或者接近0,说明线路开路或者短路。这个方法在排查总线故障时非常有效,我几乎每次现场调试都会先测一遍。
还有一点是线缆的长度和质量。CANFD数据段速率上到2M以后,线缆的寄生电容和分布电感对信号完整性的影响很明显。我在测试中发现,用普通跳线在2M速率下连一根30厘米的线,偶发错误帧概率明显比双绞线高。所以做CANFD调试,至少要用质量好一点的双绞线,长度尽量短,如果不得不走长线,就要考虑降低数据段波特率或者加CAN中继器。
3. 从零配置CANFD通道
3.1 新建工程与选择设备
打开TSMaster,第一步是新建工程。默认界面会弹出“New Project”向导,输入工程名称和存储路径,点击确认就能进入主界面。主界面默认打开了一个空白工程,此时所有总线窗口都是空的,需要手动添加。
在TSMaster里,一个工程可以同时管理多个硬件设备。点击左侧“Hardware”节点,右键“Add Channel”或者直接点菜单栏的“Device”按钮,软件会弹出设备选择窗口。这里能看到当前电脑上接的所有同星设备,选中TC1014之后,下面会根据固件能力列出可用的通道。TC1014支持多个CANFD通道,选择自己要配置的那一路就行。
选通道时注意看一个参数:通道类型。有些TC1014设备是多功能版本,同时支持CAN和CANFD,也可能支持LIN和以太网。在同一个硬件通道上,CAN和LIN不能同时用,但不同通道之间可以随意组合,比如通道0做CANFD,通道1做经典CAN,这样一台设备就能同时调试两种总线的节点。
软件里默认的设备连接状态是“Disconnected”,配置完通道参数后记得点击“Connect”按钮建立连接。如果连接成功,状态指示灯会变绿,通道的波特率等信息会从设备固件回读上来。如果点击Connect后提示设备忙或者超时,多半是设备被其他进程占用了。TSMaster的硬件资源是独占的,开了两个TSMaster实例,那个后打开的就抢不到设备。
3.2 通道参数配置:波特率、FD模式与采样点
选中TC1014的一个通道后,右边属性区域会列出详细的CANFD参数。核心配置项有四个:仲裁段波特率、数据段波特率、采样点、FDF帧类型设置。
我这次实测用的参数是仲裁段500kbps、数据段2Mbps,这是目前车载CANFD最常见的一组配置。仲裁段500k和经典CAN保持一致,便于原有节点直接接入;数据段2M能提供足够带宽,又不会对线缆提出太苛刻的要求。
TSMaster里的参数单位是kbps,输入500代表500kbps,输入2000代表2Mbps。千万别把小数位搞错,我见过有人把2M填成200k,结果链路怎么都建不起来。波特率设置完,软件会显示一个对应的“Bit Timing”参数表,里面包括预分频、TQ数、采样点位置等底层量化值,这些一般不用手动调,软件会自动算好。但如果你想深挖,可以把采样点单独拉出来说。
采样点指的是在一个位时间里,采样总线电平的时刻落在什么百分比位置上。CANFD因为数据段速率高,采样点对信号质量更敏感。经验值是经典CAN采样点设在75%到80%附近,CANFD数据段推荐在75%左右。TSMaster里可以直接填百分比数字,比如填75。如果收发双方采样点偏差太大,即使两边波特率标称一样,通信也会出偶发错误帧。
FD模式的配置稍微隐蔽一点。TSMaster的通道属性里有一个“CAN FD”下拉选项,取值一般是“ISO CAN FD”和“Non-ISO CAN FD”。这对应CANFD协议的两个版本,ISO版本是目前汽车行业的主流标准,非ISO版本主要出现在早期芯片方案里。除非你明确知道目标控制器用的是老方案,否则选ISO CAN FD准没错。选错会导致对端节点即使能收到帧也当作错误帧丢弃,这个坑隐蔽得很。
3.3 通道配置的保存与复用
通道参数配好之后,记得保存工程。TSMaster的工程文件后缀是.tse,里面会保存通道配置、总线窗口布局、DBC加载信息、发送报文列表这些所有状态。下次打开直接是上次的工作环境,不用重新配置一遍。
如果你需要在一台电脑上管理多个项目,我建议把常见的波特率组合做成不同工程模板,比如“CANFD_500_2M.tse”、“CAN_500k.tse”、“CANFD_500_5M.tse”,用的时候直接打开对应模板,改一下通道号就能开工。这个习惯帮我省了很多时间,尤其当你在多个项目之间切换时,不用每次重建窗口和报文列表。
TSMaster还支持把通道配置导出为.tdf文件,这是同星的设备描述文件。换新电脑装环境时,直接导入这个文件就能恢复所有通道参数,不需要手动重新填波特率。我通常会把.tdf文件和固件升级包一起放在项目目录里,不管是换电脑还是给同事交接环境,都特别省事。
4. CANFD报文收发实操
4.1 打开通道并进入收发界面
通道配置完成后,在TSMaster主界面左侧的工程树里找到“CAN/CANFD”相关视图,双击“Trace”打开报文追踪窗口。Trace窗口就是整个调试过程中的主战场,报文收发、时间戳、错误帧、总线状态都会实时刷新在这里。
在开始收发之前,先确认通道处于使能状态。TSMaster里每个通道有一个单独的“Enable”按钮,点击后通道状态变成绿色,这时硬件才真正开始收发总线数据。如果只是配置了参数但没有Enable,相当于挂空挡踩油门,设备和总线没有任何交互。
我习惯在Trace窗口上方把“Time”列显示精度调到微秒级别,特别是在分析CANFD延迟和抖动时,微秒级时间戳比毫秒级能看出更多东西。比如连续两帧报文之间如果出现规律性的微小间隙,往往说明发送任务受CPU调度影响。
Trace窗口还支持多种显示过滤方式,最常用的是按ID过滤和按通道过滤。如果总线上报文比较多,建议先按通道过滤,只看当前受测通道的数据,避免其他通道的报文干扰判断。按帧类型过滤也很实用,可以只显示错误帧或者只显示CANFD帧,排查问题效率直接翻倍。
4.2 发送CANFD报文
TSMaster的报文发送功能藏在“Tx Messages”窗口里。打开这个窗口,空白区域右键选择“New Message”,就能创建一条待发送报文。需要填的核心字段有:ID、帧类型、DLC、数据、发送周期。
帧类型这里选择“CAN FD”之后,会多出一个BRS的选项。勾选BRS意味着数据段跳转到高速率发送,取消勾选则整帧都以仲裁段速率发送。在实车上调试时,建议刚开始先不勾BRS,等确认通信链路稳定后再打开,这样能把变量控制在最小范围。
ID字段要注意格式。TSMaster默认用十六进制显示,如果你习惯十进制,记得在设置里切换显示格式,或者在输入时加0x前缀。别小看这个细节,ID填错一两个字节,目标节点根本不理你,而查这个问题往往要耗掉不少时间。
DLC和数据字段在CANFD下是相互关联的。DLC表示数据场长度,范围从0到64。TSMaster在这方面智能一点,数据区域可以直接填,DLC会自动根据输入字节数更新。不过要注意,如果填写的数据字节数不是1、2、4、8、12、16、20、24、32、48、64这些CANFD规范允许的离散值,发送时可能被硬件自动补齐或者直接拒绝。我建议按规范走,别挑战硬件的容错能力。
发送周期单位是毫秒。比如填100,表示每100毫秒循环发送一次。如果你想只发一帧不循环,可以把周期设为0,然后点击“Single Send”按钮,手动触发一次发送。这个功能在做UDS诊断请求时非常好用,发单帧、看响应,比一直开着周期发送干净得多。
下面是一组我在实测中使用的CANFD报文配置:
| 参数项 | 配置值 | 说明 |
|---|---|---|
| 通道 | Channel 0 | 对应TC1014的第1路CANFD |
| ID | 0x123 | 十六进制报文ID |
| 帧格式 | CAN FD | 启用FDF标志 |
| BRS | 开启 | 数据段切换2M高速率 |
| DLC | 64 | 数据场满载 |
| 发送周期 | 100ms | 循环发送 |
| 数据 | 00 01 02 ... 3F | 递增序列,便于验证 |
4.3 接收报文与加载DBC
发送只是半边天,能收能看才是调试工具的核心价值。TSMaster的接收数据默认会以原始帧形式展示在Trace窗口里,包括ID、DLC、数据、时间戳。原始帧适合做底层分析,比如看总线时序、排查错误帧。但如果你想要的是“这帧报文的含义是什么”,那就需要加载DBC文件了。
DBC是CAN通信的数据库文件,里面定义了每条报文ID对应的信号名、起始位、长度、缩放因子、偏移量、单位等等。TSMaster加载DBC的方式有两种:一种是在工程树里右键“Database”添加,另一种是直接在Trace窗口顶部点击“Load DBC”。加载成功之后,Trace窗口的数据视图会自动关联上DBC,展开报文时可以看到每个信号的具体值。
这里有个很实用的功能叫“Physical Value”物理值模式。DBC里的信号原始值是整数,经过缩放因子和偏移量换算后才是带单位的物理量,比如转速、电压、温度。TSMaster可以切换显示原始值和物理值,我调试时基本上都开物理值,省得自己拿计算器换算。
如果项目还没有DBC文件,也可以在TSMaster里直接新建。它的DBC编辑器支持图形化创建报文和信号,画完保存就生成DBC。我第一次用时觉得这个功能挺惊喜,因为很多工具需要单独装一个CANdb++去编辑DBC,TSMaster把这个流程收进主程序了,一体化程度确实高。
4.4 环回自测:验证通道是否正常
配置做完,信号线还没接设备的时候,强烈建议先做一次环回自测。TSMaster有两种回环方式:内部回环和外部回环。内部回环在硬件内部把发送数据直接回到接收路径,不需要接外部线,适合快速验证软硬件是否正常;外部回环需要把TC1014的CAN_H和CAN_L短接,或者接到一个可以在内部短接的设备上,能验证线路和硬件收发器。
内部回环实测特别简单:在通道参数里把工作模式改成“Internal Loopback”,然后在Tx Messages里配置一条周期报文,点“Enable”发送。回到Trace窗口,如果能看到自己刚刚发送的那帧报文,说明TSMaster和TC1014的软件链路、驱动链路、硬件链路全部正常。恢复正常工作模式后,再接上目标设备做联调。
外部回环还多验证一步物理层。我用一根杜邦线把CAN_H和CAN_L短接,再接一个120欧终端电阻,发送自测报文时实际是往线缆上打数据再收回来。如果板子接口的收发器有问题,这一步就能暴露出来。毕竟TC1014接口板直接连电脑,长期插拔USB容易把接口处的ESD保护器件搞坏,外部回环是排除这类硬件故障最直接的办法。
5. 常见问题与排查技巧实录
5.1 设备连接失败与驱动冲突
TSMaster提示“Device not found”是最常见的入门问题。第一步先查设备管理器,确认没有感叹号;再检查其他软件是否占用了设备,比如有些人电脑上装着CANoe、PCAN-View这类工具,如果之前开着没有退出,同星设备资源就一直被占用,必须把那些软件完全关掉。
还有一个容易忽略的点:USB口供电不足。TC1014这类USB转CANFD设备虽然功耗不高,但如果插在老旧主机的前置USB口上,偶尔会因供电不足导致设备识别不稳定,表现是连接成功后跑几秒就掉线。换成主板后置USB口,或者用带独立供电的USB Hub,问题基本消失。我测过好几块不同牌子的USBCAN设备,都出现过类似症状,这锅真不能全算在设备头上。
如果设备连接成功后,但同一台电脑上多个TSMaster工程来回切换时报错,建议把杀毒软件和电脑管家先关了。有些安全软件会拦截TSMaster的驱动加载,直接导致设备打不开。我在公司一台装了某数字助手的电脑上,反复遇到这类情况,卸载助手之后一切正常。
5.2 收不到报文时的排查思路
收不到报文是排查起来最浪费时间的问题。我的习惯是先从软件到硬件、从简单到复杂逐层排除,具体可以按下面这个顺序走。
第一,检查发送通道和接收通道是不是同一个。TC1014多通道设备最容易犯这个错,发送配置在通道0,Trace窗口看的是通道1,自然是空的。第二,检查波特率是否匹配。用示波器或逻辑分析仪看总线信号,大概算一下位时间,如果位宽和配置的波特率对不上,说明发送端和接收端有一侧参数不对。第三,看总线电平。把万用表接到CAN_H和CAN_L之间,正常静态电平下两端电压差应该在0V附近,CAN_H对GND大概2.5V,CAN_L对GND大概2.5V。如果对GND电压是5V或0V,说明收发器可能挂了。
我遇到过最鬼畜的问题是无意中打开了TSMaster的“Busoff Recovery”相关设置,总线错误太多进入Busoff状态后,通道自动暂停收发。表现是整个Trace窗口干干净净,一点报文都没有。把仿真和实际混在一起出问题的概率真的不低,遇到诡异故障时,优先看通道属性和总线状态选项卡,翻一翻总没错。
如果以上都排查完还是收不到报文,就把回环测试再做一遍。如果回环也收不到,硬件出问题的概率就很大,换一根USB线或者另一个通道试试。
5.3 波特率与采样点导致的错误帧
CANFD调试时最容易见到的现象是,Trace窗口里能持续看到帧,但是状态一直显示“Error Frame”。这种情况十有八九是发送端和接收端的数据段波特率不一致,或者采样点差异太大。
为了快速定位,用一个最简单的配置:先全部按经典CAN模式跑,用500kbps统一收发,如果经典CAN能正常通信,说明硬件链路没问题,问题集中在CANFD的高速数据段配置上。然后逐步把数据段速率从500k提到1M、2M,每提一档观察错误帧情况。这个方法虽然慢一点,但定位误差极小。
采样点调整也有小技巧。TSMaster里可以直接填采样点百分比,我习惯先设75%,如果错误帧还是很多,就改成70%或者80%试。不需要改波特率,不影响时序,排查速度比重新配波特率快多了。
遇到错误帧,优先看Trace窗口里错误帧对面有没有显示“ACK”相关状态。如果数据包发出去了但没有节点应答,往往是总线上只有一个节点,ECU接收端没有自动应答功能。这种情况不算真错误,但也要知道总线上必须有一个节点负责ACK,不然发送端会一直报发送错误。
5.4 实际项目中的几个小习惯
调试工作做得多了,慢慢会养成一些自己的小习惯。第一个是工程里始终保留“回环测试”用的报文列表,每次接新板卡先跑一遍自测,确认环境没问题再正式调试。这个习惯帮我避开了很多“明明是环境问题却去查代码”的坑。
第二个是保持DCF和工程文件的版本管理。TSMaster工程文件是文本化的,可以放到Git仓库里管理。给每条报文的备注写清楚用途和修改日期,调参的时候心里就有底了。
第三个是善用TSMaster的历史记录和回放功能。联调过程中遇到可疑的偶发问题,我会在Trace窗口里开启记录,把总线数据保存下来。事后用回放功能逐帧分析,比现场盯着屏幕盯一天有效得多。这个功能尤其适合复现一些“偶尔脱机”“偶发超时”的难缠问题,回放还能随时暂停、放大时间轴,用起来比实时看方便太多。
第四个是要注意CANFD的填充位规则。CANFD的数据场长度大,如果里面连续相同电平太多,位填充机制会插入额外翻转位,影响带宽和时序。所以工程车上的通信矩阵通常会尽量避免使用全0或全0xFF的报文作为周期性常规报文,测试时也别总用全0数据,稍微加点变化更贴近实际工况。
最后给一个配置速查表,方便大家直接对照参考:
| 排查项 | 典型现象 | 处理办法 |
|---|---|---|
| 驱动异常 | 设备管理器感叹号 | 重装驱动,指向TSMaster安装目录 |
| 设备占用 | 连接失败或掉线 | 关闭其他CAN工具 |
| USB供电不足 | 使用中掉线重连 | 换后置USB口或带供电Hub |
| 波特率不匹配 | 错误帧不断 | 回环自测定位,逐步换速率段 |
| 采样点偏差 | 偶发错误帧 | 调整采样点70%~80% |
| 没接GND | 帧收不到或奇偶不定 | 检查CAN_GND共地 |
| FD格式不匹配 | 对端报错 | 确认ISO/Non-ISO一致 |
| 终端电阻缺失 | 长线时信号反射 | 两端各并120欧 |
我自己在实际使用中的体会是,CANFD调试本身并不复杂,难的是把每一个小环节都做到位。硬件接线、波特率、采样点、终端电阻、软件配置、总线协议分析,任何一个环节的疏漏,最终都会表现为“为什么收不到报文”“为什么一堆错误帧”这类让人抓狂的问题。而TSMaster和TC1014这套组合,最大的价值就是把这些环节的可视化程度做得足够高,波形、报文、错误状态都有直观实时展示,配合阶梯式的排查思路,基本能把定位问题的时长从小时级压缩到分钟级。等你跑通一次CANFD通信的整个流程,再回头看就会发现,工具真的只是工具,把原理理解透了,什么设备都能玩得转。