为什么 1394 的故障要按总线分层来看
1394 采集卡在现场报“不识别”或“采集到一半断了”,两种描述听起来相近,实际落在完全不同的层。与 USB 由主机控制器统一调度不同,1394 是节点对等的串行总线:每一个连接都由链路两端的 PHY 完成电气检测、去抖和速率协商,协商成功、端口进入活动状态之后,这个节点才会出现在总线拓扑里。因此“系统里能不能看到节点”本身就是第一级分诊点,它把问题分成“根本没上线”和“上线了但不稳定”两半。
下面按供电、拓扑与线缆、端口状态、主机与驱动、等时资源五层梳理原因,并给出一套按成本从低到高的排查顺序。文中涉及的电缆电源规定、PHY 寄存器字段与等时资源机制,分别取自 IEEE 1394 标准的电缆电源条款、1394b PHY 与 OHCI 控制器的公开数据手册,以及 Linux 内核的 FireWire 驱动接口文档。
第一步:把现象分成四类
| 现象 | 系统层面的观察 | 主要落点 |
|---|---|---|
| 卡本身不出现 | 系统里连 1394 主机控制器都看不到 | PCIe 插槽、供电、BIOS 资源分配 |
| 控制器在,设备枚举不到 | 能看到 1394 控制器,但总线上没有相机或采集设备的节点 | 总线供电、线缆、端口状态 |
| 枚举到,一开采集就断 | 设备节点出现,采集软件初始化时报设备忙、无响应或句柄失效 | 端口速率协商、驱动、等时资源 |
| 能采集,周期性中断 | 图像流周期性停顿、时间戳跳变、软件报告总线复位 | 拓扑稳定性、接地与屏蔽、带宽 |
先确定落在哪一行,再往下走。把四类混在一起逐个换件,是现场最常见的浪费。
第二层:总线供电
1394 的电源和信号是同一根线缆走的。4 针 i.LINK 连接器只有两对数据线,没有电源针;6 针与 9 针连接器才带电源针与电源回线(6 针上是 VP 与 VG)。按 IEEE Std 1394-1995,电缆电源是一路未经稳压的直流母线,范围 8–40 VDC,单口电流上限 1.5 A,实际能给出多少电流取决于主机侧实现。台式机与工控机的 6 针口常见输出约 12 V,端口限流能力也各不相同。
这意味着“插上就有电”是个错觉:一台总线供电的相机或采集设备,只要电流需求超过端口能力,或者线缆压降把它拉进欠压区间,表现往往是枚举不到或反复重连,而不是干脆不亮。压降可以按 R = ρ·L/A 估算:以 0.5 mm² 铜线、4.5 m 一段(往返 9 m)为例,回路电阻约 0.32 Ω,1 A 电流下压降约 0.32 V;线径更细、线缆更长时,这块损失会明显放大。
PHY 层留下了两个可读的证据:
- CPS(cable power status)位:它反映 PHY 的 CPS 输入端子所感知的电缆电源状态,该端子通常经约 400 kΩ 电阻接到电缆电源上。电源跌落时 CPSI 中断会被置起(按数据手册,CPS 输入由高变低即置位),上层由此知道供电可能已不足以可靠工作。
- power class:节点在 self-ID 中上报电源类别,PHY 的 PC0–PC2 三个引脚在硬件复位时决定这个默认值。该字段表达的是节点从电缆取电的需求等级,不能反过来当作对端供电能力的测量结果——判断端口实际能带多少负载,仍要实测电压与电流。
处置很直接:需要稳定供电的设备改自供电或经有源 hub 供电。不要指望用 4 针转 6 针的转接头给它“补电”——这类转接头里没有电源通路,设备只能靠自身供电。
第三层:拓扑与线缆的物理边界
1394 电缆总线的硬约束不多,但每一条都会以“时通时不通”的形式出现:
- 单段标准线缆最长 4.5 m;一条总线最多 63 个节点、16 跳,端到端最长约 72 m。超过单段长度靠菊花链或 hub 扩展时,每一跳都要占用这 16 跳的名额。
- 电缆总线是非循环拓扑,不允许接成环。接成环后,PHY 在树标识(tree-ID)阶段会超时,对应的 CTOI 中断位可以用来提示“总线可能被接成了环路”。环路是这类超时的常见诱因,但不是唯一原因,仍需结合拓扑与端口状态判断。
- 1394b 的信令不能跨 1394a 的连接器与线缆传输。所以用 4 针、6 针线缆连出来的链路,速率上限就是 S400;要跑 S800,需要 Beta-only 的 1394b 端口与 9 针线缆,仅换成 9 针线而端口按双语模式工作并不够。以 TI TSB81BA3E 这类双语 PHY 为例,端口被编成双语端口时,Beta 模式速率固定为 S400,只有 Beta-only 端口才按 Max_port_speed 往上走。
另一类高发问题是线缆与接头本身:接触不良会让连接状态反复抖动,每次抖动都可能触发一次总线复位,采集流随之被打断。这类故障的典型特征是“复位间隔不规律,但换一根线就消失”。
第四层:端口状态位
1394 的 PHY 提供端口状态寄存器,很多“玄学掉线”在这里是可读的。常用字段与判读方式如下:
| 字段 | 含义 | 判读 |
|---|---|---|
| Con | 去抖后的连接状态:连接需经过去抖确认后该位才置 1 | Con=1 只说明物理上连上了,不代表端口可用 |
| RxOK | 1394a 模式下收到去抖后的 TPBIAS 信号;Beta 模式下收到持续有效的电信号 | Con=1 而 RxOK=0:连上了但没有建立活动连接 |
| Dis / Hard_disable | 端口被软件禁用 / 禁用且不再维持连接状态 | 端口被驱动或固件关掉了,先恢复再谈其他 |
| Negotiated_speed / Max_port_speed | 与对端协商出的速率 / 端口允许的最高速率 | 协商结果低于预期,查线缆与端口类型 |
| Connection_unreliable | Beta 模式速率协商失败或同步失败 | 多为线缆质量或端口能力不匹配 |
| Loop_disable | 为避免成环被置为禁用状态 | 确认拓扑中是否接了环 |
| Fault / Standby_fault | 挂起或恢复过程中出错,端口停在挂起态 | 电源管理与连接抖动引起 |
| Port_error | 收到无效码字的计数,255 封顶,读取后清零 | 持续增长说明物理层信号质量差 |
1394a 模式下的连接检测依赖 TPBIAS:PHY 在每对线对上提供约 1.86 V 的标称偏置电压,对端收到这个偏置才认为存在活动连接。这也是为什么一段“只能充电不能通信”的劣质线,或者某个端口偏置电路损坏,会表现为拓扑识别异常。
第五层:主机、驱动与等时资源
主机侧通常是 PCIe 转 1394 的 OHCI 控制器(例如 TI XIO2213B 这类 PCIe 到 1394b OHCI 加三端口 PHY 的方案),它自己有独立的分层:
- 控制器不出现:问题更可能在 PCIe 枚举、插槽供电或卡的上游电路,而不是 1394 总线的协议层。查插槽、辅助供电、BIOS 是否为该插槽分配了资源,也不能排除卡本身的硬件故障。
- 控制器出现、节点不出现:回到供电与端口状态两层。
- 空闲一段时间后掉线:控制器与 PCIe 链路都有低功耗状态与唤醒机制,链路进入低功耗后能否正确唤醒取决于主板与驱动实现。现场可先用“关闭该设备的电源管理”做一次对照,再判断是硬件问题还是策略问题。
- 驱动混装:操作系统自带的 OHCI 兼容驱动与厂商驱动不要同时装,重复的驱动栈会争用同一个控制器。
实时数据走的是等时传输:通道与带宽由总线上的等时资源管理器(IRM)统一分配,不是抢占式。总线每复位一次,generation 就会递增,节点 ID 会被重新分配、可能发生变化,等时资源也需要重新分配,数据流必须重建。这解释了两类现象:一是总线复位之后采集软件不自动恢复,二是“单台相机正常,加第二台就分配失败”。Linux 侧的 firewire 字符设备接口就提供了申请、释放等时资源以及接收总线复位事件的入口,可作为排查时的观察点。
排查顺序:按成本从低到高
- 先分层:控制器在不在?节点在不在?用一句话确定落在上面四类现象的哪一类。
- 单设备、单段线、最短路径直连:去掉 hub、延长线与转接头,只留一根标准线缆。能通就说明问题在中间环节。
- 换线、换端口:优先换一根确定良好的线,再换到卡上另一个端口,观察 Con 与 RxOK 是否稳定。
- 量供电:万用表测 6 针的 VP 与 VG,分别记录空载与设备工作时的电压;带载明显跌落就是供电或线缆问题。
- 看复位频率:连续观察若干分钟,记录总线复位次数与间隔。规律性复位指向软件或电源管理,随机复位指向线缆、接头与接地。
- 读端口状态位:确认端口没有被禁用、速率协商是否达到预期、Port_error 是否在增长。
- 隔离主机:同一张卡换到另一台主机、另一个插槽,或换一张已知良好的卡。做到这一步仍复现,问题基本在卡或设备本身。
- 最后看带宽与软件:多设备同时采集、或提高分辨率与帧率后才复现,属于等时资源分配问题,不是链路故障。
现象与原因的对照
| 现象 | 优先验证 | 常见原因 | 处置 |
|---|---|---|---|
| 4 针线连总线供电设备,枚举不到 | 连接器是否带电源针 | 4 针没有电源通路 | 改自供电,或换 6 针、9 针线缆 |
| 6 针供电下间歇性重连 | 带载电压 | 端口限流不足或线缆压降过大 | 有源 hub、外接电源、缩短线缆 |
| 加第二台设备后掉线 | 等时资源分配 | 带宽或通道不足 | 降帧率与分辨率,或分总线 |
| 复位随机出现,换线后消失 | 线缆与接头 | 接触不良、线缆受损 | 更换标准线缆 |
| 拓扑接成环后全部异常 | 连线方式 | 非循环拓扑被破坏 | 断开环路,按树形重接 |
| 空闲一段时间后掉线 | 电源管理 | 链路低功耗唤醒异常 | 关闭该控制器与链路的低功耗策略 |
什么情况下该停手
以下情形不再属于“调参能解决”的范围,应转为硬件判定:Port_error 持续增长且换线换口无效;端口 Fault 反复出现并停在挂起态;卡上供电或晶振部分有明显发热、掉件、烧痕;同一设备在已知良好的主机与线缆上仍然枚举不到。反过来,如果设备在别的机器上正常、只在这台工控机上异常,优先怀疑插槽供电与主板资源分配,而不是采集卡本身。
写在最后
1394 的排查比 USB 简单的地方在于:它的每一层都留下了可读的状态——供电有 CPS 位与电源类别,连接有 Con 与 RxOK,速率有协商结果,拓扑异常有超时中断位。难点在于这些信息分散在 PHY 寄存器、系统日志与采集软件三处,只看其中一处就容易得出“卡坏了”的结论。按“现象分类 → 供电 → 拓扑 → 端口状态 → 主机驱动 → 等时资源”的顺序推进,多数问题在前三步就能定位。