79
FireWire参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对 FireWire 无任何接触或了解的工程师而撰写之 FireWire 手册。其目的在于使读者认知并熟悉 FireWire,并且由 1394 Trade Association 专家人员的经验中,对于 FireWire 总线如何运作建立彻底且完整 的了解。

FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

FireWire™ 参考讲解

(信息指南)

January 22, 2010

摘要

本文件系提供给之前对 FireWire 无任何接触或了解的工程师而撰写之

FireWire 手册。其目的在于使读者认知并熟悉 FireWire,并且由 1394 Trade

Association 专家人员的经验中,对于 FireWire 总线如何运作建立彻底且完整

的了解。

Page 2: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

1394 Trade

Association

规范

1394 Trade Association 规范、手册 以及指南,乃是由 1394 Trade Association 工作

团队为了促进 IEEE1394 兼容产品市场的发展以及成长所制作。1394 Trade

Association 乃是一个非营利的工作组织,1394 工作团队的参加者多是自愿且未由

该组织支领薪资。大多数的参加者代表 1394 Trade Association 组织的会员。由这

些工作团队所发展的工作产品(work product)代表参加者专业的共识(consensus)。

1394 Trade Association 文件的使用系完全基于自愿。1394 Trade Association 文件并

没有暗示没有其它方式可生产、测试、量测、购买、销售、或者提供 1394 Trade

Association 规范范畴的物品以及服务。此外,在一时间点文件中提出的观点将根据

技术状态的发展以及规范使用者的意见将有所改变。使用者必须谨慎确认来决定文

件确为 1394 Trade Association 的最新版本。

欢迎任何对 1394 Trade Association 各版本文件有兴趣者提出意见,无论您是否为

1394 Trade Association 的会员。对文件的建议变更应随同适当的意见,并以书面方

式提出。

解读声明: 问题偶尔可能系对于规范与特定应用的相关性提出。当该些解读引起

1394 Trade Association 的注意,我们将准备适当的响应动作。

对规范的意见或者解读的要求可以寄到下面地址:

Editor, 1394 Trade Association

315 Lincoln, Suite E

Mukilteo, WA 98275

USA

1394 Trade Association 文件由 1394 Trade Association 采用,但未虑

及在本规范中,对存在于物品、材料、或者制程中之专利或者其

它智能财产权。1394 Trade Association 于文件的采用,对任何专利

权拥有人并没有任何责任;对于文件的使用者也无任何义务。关

于智慧财产权,本文件之读者请自行判断是否侵权。

1394 Trade Association

315 Lincoln, Suite E

Mukilteo, WA 98275 USA

所印制

Copyright © 2010 by 1394 Trade Association

All rights reserved.

Page 3: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

2

版权所有 2010, 1394 Trade Association. 所有权利保留

目录

作者: .................................................................. 4

共同贡献者: ............................................................ 4

版权声明 ............................................................... 5

IEEE 版权 ............................................................ 5

IEEE 1394 技术背景 ...................................................................................................................6

简介 ................................................................... 6

FireWire应用 ........................................................... 7

FireWire产品 ........................................................... 8

主机配接器(Host Adapters) – 通常以适配卡的形式存在 ................. 10

连接线以及连接器(Cables & Connectors) ............................... 13

中继器(Repeaters) ................................................... 19

数位相机 ............................................................ 24

外部硬盘 ............................................................ 25

1394总线(bus)范例 ................................................... 26

双 & 四主机配接器 (Double & Quad Host Adapters) ....................... 28

IEEE1394 标准 ......................................................... 31

IEEE1394 技术 ......................................................... 32

模块式架构 (Module Architecture) .................................... 32

概念总线模型(Conceptual Bus Model) .................................. 33

IEEE1394 背板(Backplane) VS 连接线使用环境(Cable Environment) ....... 36

FireWire 传送速度& 向后兼容性(Backwards Compatibility) .............. 37

1394 寻址模式 (Addressing Model) .................................... 41

尺寸标注以及字节顺序 (Size Notation & Endianess) .................... 43

总线重置与 1394总线自我组态 (Bus Reset & 1394 Bus Self-Configuration) 45

Beta回路以及冗余性 (Beta Loops & Redundancy) ........................ 48

1394 传输协议之分层 (Protocol Layering) ............................. 49

1394 总线封包(Bus Packets) .......................................... 50

1394周期(cycle) – 第一部分 ......................................... 53

1394 周期- 第二部分: 周期开始封包与周期主控器(Cycle Start Packets & the

Cycle Master) ....................................................... 54

Page 4: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

3

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 周期 – 第三部分:周期结构(Cycle Structure)与周期飘移(Cycle Drift)

.................................................................... 57

1394周期 – 第四部分:等时以及异步数据传输 .......................... 59

等时数据传输的本质 (The Essence of Isochronous Traffic) ............. 61

等时传输频宽(Isochronous Bandwidth) ................................. 63

异步数据传输 (Asynchronous Traffic) ................................. 63

异步串流封包 (Asynchronous Stream Packets) .......................... 64

封包尺寸限制 (Packet Size Restrictions) ............................. 66

连结层的操作 (Link Layer Operation) ................................. 67

数据交易型态(Transaction types):读出、写入、与锁定(Lock) ........... 68

CSR 模型(Model) ..................................................... 70

组态(Configuration ) ROM & GUIDs .................................... 72

数据交易型态 (Transaction types) .................................... 73

直接内存存取 (DMA) .................................................. 74

DMA 内文 (Contexts) & 内文程序 (Context Programs) ................... 76

串行总线管理 (Serial Bus Management) ................................ 78

Page 5: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

4

版权所有 2010, 1394 Trade Association. 所有权利保留

作者:

Dimitrios Staikos Codemost Technology Co. Ltd.

共同贡献者:

Les Baxter Baxter Enterprises

Burke Henehan Henehan Consulting

Don Harwood PLX Technologies

Eric Anderson Apple

以上全为 1394 Trade Association 会员

照片特别感谢 Point Grey Research Inc. 以及 IOI Technology Corporation 所提供

Page 6: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

5

版权所有 2010, 1394 Trade Association. 所有权利保留

版权声明

IEEE 版权

本规范之部分由已出版之IEEE标准允许复制:

原始文件为:

IEEE Std 1212-2001, Standard for a Control and Status Registers (CSR) Architecture for Microcomputer Buses

IEEE Std 1394-2008, Standard for a High-Performance Serial Bus

IEEE 版权政策于 http://standards.ieee.org/IPR/copyrightpolicy.html,其部分声明:

免版税许可(Royalty Free Permission)

于免版税基础上,IEEE-SA 政策主张任何人可摘录以及出版最高可达,但不超过,全部 IEEE SA 文件的

10%(除 IEEE SIN 书籍以外)之内容,只要:

1) 提供适当的承认感谢;

2) 该标准的「重点中心」不完全包含于摘录的部分。

以上包含 IEEE 文件的表格、图标、数字、以及报表范围。

Page 7: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

6

版权所有 2010, 1394 Trade Association. 所有权利保留

IEEE 1394 技术背景

简介

本文件之目的在于提供 IEEE1394 之广泛介绍,使得读者对所有 IEEE1394 技术中重大

技术观点、相关术语、以及 1394 技术特征能够快速熟悉。

「1394 高性能串行总线(IEEE1394 High Performance Serial Bus)」,系为本技术的正式

名称,亦为苹果公司所拥有的商业注册商标「FireWire」。此外,SONY 公司为了本身

使用小型连接器的实践也注册了商标 i.LINK。

本份文件系为了期望获得 IEEE1394 技术背景的软件以及硬件工程师所撰写,其内容超

越了由科技杂志以及网站所涵盖之表面的技术介绍、与营销用途的描述。本份文件并

未尽于解释一切,但尝试努力控制于合理的篇幅,包括大量的图表共约 80 页,在此期

望下,工程师实际完成阅读本文件之期望相当高。

本文件涵盖了两个目标:

1. 协助工程师们来进行 FireWire 技术之评估。

当工程师被要求回答之际,「我们应使用 FireWire 吗?」 是一个非常重要的问

题,。这些工程师通常面临着严重的时间限制,以及不具备相当丰富的资源,来协

助其对 FireWire 有一个清楚的概念,以致于可以作出一个聪颖的选择。

FireWire 并非简单的,但须权衡于其功能以及灵活弹性。本文件目标之一,系帮助

工程师对于 FireWire 的内在底细能够有一个具体的了解,俾使其对于总线的真实效

能够有充分理解的基础,而非受到竞争技术灌溉下的恐惧以及混乱,可作出自己的

选择。

2. 帮助使用 FireWire 的工程师能够较佳地使用与正确地使用 FireWire。

即使作出了使用 FireWire 的决定,许多工程师仍无一个可允许其使用完整总线效能

以及建立一个成功解决方案的理解程度。FireWire 的效能往往被错误地使用,或者

于最佳案例中没有得到充分的运用。当须进行障碍排除之际,没有人可确定应该先

进行什么工作,因为即使是系统并未有问题,也没有人真正了解这是怎么一回事。

但对工程师而言,现在的问题反而是「这到底是怎么一回事啦 ?」

缺乏对于 FireWire 充分了解的结果是不公平地指责这个技术过于复杂以及不可靠。

本文件的目标系帮助工程师能够扎实地理解 FireWire,因此,可以适当地使用

FireWire 来建构一个能够解决问题的方案。

Page 8: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

7

版权所有 2010, 1394 Trade Association. 所有权利保留

FireWire 应用

我们以列出 FireWire 的应用领域来开始描述 FireWire。

FireWire 于工业上的主要应用,乃相关于数字相机。这些应用可以被统称归类为「机

器视觉(machine vision)」的应用,然而这是一个非常广泛之术语。正如 FireWire 越来

越被认定为「机器视觉」的一个可靠之解决方案,不同类型的工业应用亦随之出现。

FireWire 硬盘,也被广泛使用于储存解决方案,并在 FireWire 市场中持有相当的份

量。

目前的 FireWire 应用包括有:

机器人控制(Robotic Control )

该种系统使用了 FireWire 相机作为环境感应器(environmental sensors)。计算机藉

由 FireWire 相机看到了环境影像,进行图像分析,并且给予必要与环境进行互动

的机器人手相关的动作指示,好比说,拿起物体、将物体放置到新位置等。

自动光学检测 (Automated Optical Inspection)

该种系统使用 FireWire 相机于自动化装配生产线,譬如说计算机主机板、计算机

配接器、手机等;对于制造的产品撷取相片,并检查产品是否正确地被建构,确

保产品之间外观无明显的差异处。

医学影像 (Medical Imaging)

该类系统可使用 FireWire 相机建立病人脸部或身体的三维模型。这些模型则经由

医疗程序被使用于多种用途上。

拍摄 (Filming)

该种系统可使用 FireWire 之相机数组以建立用于特殊视觉效果的特殊三维影像记

录。

安全监控 (Security Surveillance)

FireWire 相机基于安全性的理由,被使用于监视的用途上。

储存 (Storage)

比如用于储存以及备份的高性能外部硬盘。

通信系统 (Communication Systems)

FireWire 于高速服务器与服务器通讯的数据中心,被作为一个内部局域网络。

音频与专业等级音频 (Audio & Pro-Audio)

Page 9: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

8

版权所有 2010, 1394 Trade Association. 所有权利保留

专用于音频应用,如放大器/扬声器控制、音频通道的路由/混音、剧院系统的音频

串流传送以及音乐会等,可以利用 FireWire 来完成。

视讯盒 STB (Set-Top Box)

在美国,通过 FCC 规范的所有 STB 视讯盒,必须具备一个允许记录所有数字内

容的功能性 FireWire 连接端口。

数字摄影机 (Digital Camcorders)

许多数字摄影机提供了一个 FireWire 连接埠,允许轻松地连接到使用者的个人计

算机上。

商业航空 (Commercial Aviation)

该种系统使用 FireWire 作为大容量的局域网络,亦可提供飞行娱乐系统中点播视

讯串流所必需具备的 QoS(quality of service)要求。

军事 (Military)

于军用飞机、直升机或车辆中,FireWire 正被作为一个传送控制信息以及感应器

数据之可靠以及高容量的局域网络。

汽车 (Automotive)

FireWire 正进行相当大的努力,为现代以及未来车确立车内的通讯网路,譬如车

辆中每一乘客座位之点播视讯、电视、音乐等。

FireWire 产品

本节中将列出最常见到的 FireWire 产品。任何具备一个 FireWire 连接器/接口,并可通

过 FireWire 来进行通讯之产品,皆可以视为「FireWire 产品」,即使该产品亦可能配

置其它的接口。例如,今天大多数的外接硬盘皆具有一个 FireWire、一个 USB 和一个

可能的 eSATA 连接器。

最常见的 FireWire 产品类别如下:

主机配接器(Host Adapters)或是称为主机控制器

我们需要将该配接器,通常为适配卡,安装于计算机中,来获得一个 FireWire 的

接口。许多主机板在线路板上内建了 FireWire,因此该类规格之计算机将可能不

再需要一个单独的主机配接器。乃是属于内嵌于主机板上的接口控制器。

连接线以及连接器

中继器(Repeaters)

Page 10: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

9

版权所有 2010, 1394 Trade Association. 所有权利保留

本质上,中继器就是一个连接线延伸器和信号分割器。若是需要安装一个

FireWire 装置,其位置大于一个特定连接线所允许的距离,就可以使用一个或多

个中继器,因此连结许多连接线来达成预定的目标距离。

此外,如果 FireWire 主机配接器配置有 3 个连接端口,却需要连接到 5 台相机,

此时就可能需要一个或复数个多连接埠的中继器,用来提供所需额外的连接埠。

例如,一个 4 连接埠的中继器可连接 3 台相机于一个单连接端口的主机配接器

上。

数位相机

绝大多数的 FireWire 相机符合于工业影像数字相机 (Industrial Imaging Digital

Camera, IIDC)的标准。它提供了一个相机之软件接口以及视讯格式型态的标准。

所有非 IIDC 标准的建构,通常被认为是「客制化的(custom)」,并使用于特定的

应用上,诸如保全、军事用途等。

外接硬盘

数字摄影机 (Digital Camcorders)

以下各节来解释一些 FireWire 的范例产品。

Page 11: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

10

版权所有 2010, 1394 Trade Association. 所有权利保留

主机配接器(Host Adapters) – 通常以适配卡的形式存在

此为一个具备 3 个外部 FireWire 连接端口以及一个 PCIe 总线,用来连接个人计算机的

FireWire 适配卡:

外部 FireWire 连接埠

PCIe 总线

Page 12: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

11

版权所有 2010, 1394 Trade Association. 所有权利保留

这是一个具备两个外部 FireWire 连接埠、一个内部 FireWire 连接端口以及一个 PCIe 总

线的 FireWire 适配卡:

以上「内部」以及「外部」的用语,系指该连接端口是否存在于计算机机壳(enclosure)

的外部或是存在于机壳内部。

内部 FireWire 连接埠

外部 FireWire 连接埠

PCIe 总线

Page 13: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

12

版权所有 2010, 1394 Trade Association. 所有权利保留

以下例子是一个具备 2 个 FireWire 连接埠以及一个 GOF 连接端口的 PCI-Express 主机

适配卡:

FireWire 数据可以藉由不同型态的连接线来传输,各个连接线有其连接埠(连接器),譬

如前例中的 GOF 连接埠。

最后介绍之主机配接器,乃是一个 ExpressCard 接口用之主机配接器,适用于笔记型计

算机:

Page 14: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

13

版权所有 2010, 1394 Trade Association. 所有权利保留

. 连接线以及连接器(Cables & Connectors)

FireWire 有几种不同类型的连接埠,因此会存在有各种不同类型的连接线。标准

FireWire 连接线有 4 种不同的连接器,每一个不同型态的连接线,比如说 CAT5e、

POF 及 GOF 等,多有不同的对应连接器。其它不同类型的连接线未被称为 FireWire 连

接线;此处所说的 FireWire 连接线,系指规格标准中的 1394 连接线。

标准 1394 连接线之 4种不同连结器的存在,系基于 1394 标准以及所使用两个讯号模

式 ,1394a以及 1394b 的演变结果。然而,可能导致用使用者陷入严重的混淆;另外

与其它竞争技术相比,譬如 USB,许多人认为 FireWire 居于弱势。

下表列出了 4 种 FireWire 连接线的不同的连接器:

连接器 特征 图片

4-接脚

(i.Link)

仅可用于

1394a 讯号。

传输速度可达

400Mbps。

连接线并未载

送电力。

6-接脚 仅可用于

1394a 讯号。

传输速度可达

400Mbps。

连接线可以载

送电力。

Page 15: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

14

版权所有 2010, 1394 Trade Association. 所有权利保留

Bilingual

双模式

可用于 1394a

或者 1394b讯

号。

传输速度可达

800Mbps( 特

定情况可达

3200Mbps)。

连接线可以载

送电力。

Beta-only 仅可用于

1394b 讯号。

速度可达

800Mbps( 特

定情况可达

3200Mbps)。

连接线可以载

送电力。

双模式(Bilingual)与 Beta-only 连接器看起来非常相似,甚至 FireWire 专家也有可能分

辨不出的问题。当然,这种相似也意味这些插头(plugs)的插座(sockets),看起来也会非

常相似,并且造成更多的混淆。因此,在此必须澄清其区别。

透过查看以上的图片,差异可能无法立即分辨清楚。Beta-only连接器于其插座(sockets)

的顶端有一个比较宽的开口。相对于此,Beta-only 插头(plugs)或插孔(jacks)于顶端有一

个比较宽的开口,以下所显示的图片中,其中 Beta-only 连接线显示对应两个插孔/连接

座:

Page 16: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

15

版权所有 2010, 1394 Trade Association. 所有权利保留

透过该设计,有可能将 Beta-only连接线插入 Beta-only或双模式插孔或连接座中,但

是双模式(bilingual)连接线仅可能插入双模式插孔或连接座中。

下一个从 IEEE1394-2008 标准中撷取的图片可以说明这一点:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 4-46)

FireWire 连接线的制造,通常于每一端具有相同型态的连接器:两端皆为 6-只接脚或

者是两端皆为 9-只接脚。

Page 17: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

16

版权所有 2010, 1394 Trade Association. 所有权利保留

然而,也有可能在连接线的每一端具有不同的连接器。

以下的图片显示了 FireWire 连接线,分别具有一个 4-只接脚以及 6-只接脚的连接器,

通常称为 「4-到-6 」之连接线:

Page 18: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

17

版权所有 2010, 1394 Trade Association. 所有权利保留

下一张图片显示了具备 6-只接脚以及 9-只接脚(6-到-9 连接线)双模式连接器的 FireWire

连接线,第一张产品图使用了锁定式连接器(locking connector):

在以上所显示的连接线中,9-只接脚连接器当然是一个双模式连接器。很明显地,如

果一条连接线在一端仅支持 1394a 讯号,而在另一端仅支持 1394b 讯号,将不具有任

何的意义。因此,并没有所谓的 6 只接脚-到-9 只接脚(仅适用 Beta)的这类连接线。

Page 19: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

18

版权所有 2010, 1394 Trade Association. 所有权利保留

甚至也有 4-到-9 的连接线,其中 9-只接脚连接器显然为一双模式(bilingual)连接器:

Page 20: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

19

版权所有 2010, 1394 Trade Association. 所有权利保留

中继器(Repeaters)

诚如前面所叙述,1394中继器有两个基本功能:

1. 连接线延伸器(Cable Extenders)

2. 连接线信号分割器(Cable Splitters)

1394 中继器看起来很类似于 USB 集线器(hubs)或是以太网络(Ethernet)的集线器/切换器

(switches),实际上却是完全不相同。顾名思义,中继器的单一目的就是要重复中继器

连接端口之间的讯号 。从其中一个连接埠所接收到的每一位将立即于其它连接埠重复

中继传送。

1394 传输协议将确保对于任何装置中所传入的数据传输,在一个时间之下仅能从一个

连接埠送来。因此,对于 1394 中继器的操作,将不会有任何问题或是运作上复杂度,

比如说,封包的缓冲等。

以下是相关于 1394 装置的事实,必须于此特别强调:

所有 1的 1394 装置皆为中继器。

这是 1394 设计的基本前提之一。一个具备 3 连接端口的主机配接器也是一个可于该三

个连接端口之间重复所有讯号的中继器,而一台具备 2 个连接端口的数字相机也是一

个可于该两个连接端口之间重复所有讯号的中继器。

如此方式之下,可以任何意欲的方式来连接一套 1394 装置而形成一个 1394 总线,因

为经由整个连接线长度,所有的讯号可于所有的装置中重复。

而目前描述类别下之装置,只不过是一些重复装置,因此被称呼为「中继器或重复器

(repeaters)」。但这并不是表示为唯一可重复数据传输的装置。而是说这些装置只重复

数据传输并且未执行其它功能 。

基于上述主机配接器的技术限制,目当可用硅芯片仅支持最多 3 个连接埠;故,大部

分 1394 中继器仅具备有 3 个连接埠。这些都是内部恰好具备有一个 1394 节点的中继

器,也就是拥有一个 1394 芯片。

然而,某些设计涵盖超过一个 1394 节点,来使得许多重复连接埠可供利用。制造此种

中继器公司之营销部门倾向于将其定位为「集线器(hubs)」的方式来推销,但是必须要

充分清楚了解到,这仅是复合式(composite)的讯号中继器。

____________________

1 所有多连接端口的 FireWire 装置。单一连接端口之装置,显然没有任何目标连接端口来中继重送讯号。

Page 21: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

20

版权所有 2010, 1394 Trade Association. 所有权利保留

以下图片显示了一个 3-连接埠中继器,每一连接埠为 9-只接脚的双模式(bilingual)连接端口。

图片显示该装置的两个侧视图,因此,可以清楚看见所有三个连接埠;一个连接埠于

右方,而另一对分别位于左侧。

圆形插孔,系为一个电源插座。 1394 中继器不仅重复讯号;也可以中继连接线的电

力,因为 1394 连接线亦可载送电力。一个中继器不需要使用外部电源来进行操作;其

功率消耗非常小,因此仅使用 1394 连接线已有的足够电源供应即可动作。然而,其它

更多未配置外部电力的耗电装置可能存在于总线上,该等装置期望于连接在线找到足

够的电力。中继器的电源插头对总线电源而言,作用有如一个额外的「电源切入点

(entry point)」;因此,所有装置皆可适当地发挥功能。

以下图片显示了两个 5-连接埠的中继器(两个角度的侧视图):

Page 22: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

21

版权所有 2010, 1394 Trade Association. 所有权利保留

如前所述,从图中的第一个装置即可看出,这些装置实际上包含了 3 个 FireWire 节点

(nodes),也就是 3个较小的基础中继器,如下图所示:

因此,该装置实际上包含了 3 个连接埠的中继器。这些中继器彼此连接使得在同一

1394 总线上,而 5 个连接埠则显露于中继器盒体之外。

另外也有 2-连接埠的中继器,因其未能提供任何于总线上的额外连接点,因此,基本

上是作为连接线延伸器(cable extenders)使用。以下的图片显示了此一产品:

节点 A

(中继器)

外部 1394 连接

中继器外盒

(box)

两个 FireWire 节点的内部

连接

节点 B

(中继器) 节点 C

(中继器)

Page 23: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

22

版权所有 2010, 1394 Trade Association. 所有权利保留

FireWire 装置 /中继器,也可以在不同速度型态的连接端口之间中继数据传送。下图显

示了一个 1394 主机配接器,当然亦为一个中继器;其中,具备了两个 1394b 连接埠以

及一个 1394a 连接埠:

不过,大多数出现于市面上的单纯中继器产品,并没有合并 1394a 以及 1394b 连接

埠;但可能混合其它不同型态,通常是两个 1394 连接埠与一些其它连接线型态一起出

现。

Page 24: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

23

版权所有 2010, 1394 Trade Association. 所有权利保留

下面的图片显示了一个由 Point Grey 所提供中继器的两张侧视图,其中具备了两个

1394a 连接埠以及一个 CAT5e 连接端口,并且使用 GigE 讯号于 CAT5e 连接在线来传

输 FireWire 数据:

下一张图片显示一个中继器的两个侧视图,其中具备两个 1394b 连接端口以及一个供

光学连接线(optical cable)用的连接埠:

Page 25: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

24

版权所有 2010, 1394 Trade Association. 所有权利保留

数位相机

如前所述,1394 相机出现于许多 FireWire 的产品应用中。有些人亦使用更通用的术语

感应器(sensor),因为相机本身就是一种于可见光谱的光学感应器。然而,一个红外线

相机或许是最有可能被视为「感应器」,而不是相机。

根据定义,所有 1394 相机皆为数字式。该类相机以数字位(0 以及 1)撷取以及编码图像

(images),再于 1394 连接在线传送这些数字位。

大多数 1394 相机实践了 IIDC 传输协议,其中的最新版本为 1.32(2009 年,2.0 版本规

划进行中)。这是一个软件接口(software interface)的协议,并定义与 IIDC 兼容之相机

应该实践的一组缓存器和命令,如此一来,软件就可以查询相机并根据需要来进行组

态与配置。

该 IIDC 协议并且定义了一套标准,也就是相机可以进行的预定视讯格式,比如说,影

像尺寸+画素编码+封装,但亦允许客制化的视讯格式。

之所以要存在 IIDC 标准,当然是基于互操作性上的考虑 。当使用标准的视讯格式,

在无须改变软件的情况之下,应该能够轻易地以一个制造商的相机来取代或替换另一

个制造商的相机。

于市场上,由于大多数的 1394 相机符合 IIDC 协议,而 IIDC 仅适用于 1394 相机(亦即

并任何无适用于 GigE 之 IIDC 相机);因此「1394 相机」和「IIDC 相机」两个术语在

今日(2009 年)还可以互换适用。然而,IIDC 2.0 也支持其它的接口技术(GigE、USB

等)。

以下的图片显示了一个具备一 1394b之双模式(bilingual)连接端口的 IIDC 相机:

图片中左上角的插座(socket)是用于「触发」之用途,并非电源插座。大多数的 IIDC 相

机无电源插座;而是从 1394 连接线中来撷取所需要的电力,如前所述,连接线可以携

带电力。

Page 26: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

25

版权所有 2010, 1394 Trade Association. 所有权利保留

以下的图片显示了一个「线路板形式」相机的两侧,亦即一个没有外壳的相机;因此

可以精确地针对特定需求之客户:

正如以上所显示的图片,FireWire 相机通常不随同镜头一并贩卖,因此客户可自行根

据其需要来决定特定的镜头,当然该些相机可能仅具有单一的 FireWire 连接埠。

外部硬盘

今日的外部硬盘具备有大量的接口,通常包含 FireWire 在内。以下的图片显示一个具

备有两个 1394b 连接埠以及一个 1394a 连接埠(单一 1394 节点的所有部分,可以中继重

复讯号),一个 eSATA 连接埠以及一个 USB 连接埠。

外部硬盘如下图所示,通常需要比 1394 总线所携之更多电力,无法仅仰赖总线的电力

来操作,因此,会具有一独立的电源插座(不像相机)。然而,许多 FireWire 硬盘款式可

以直接由 FireWire 总线上来取得电力,因为 FireWire 总线比其它可供电总线,例如

USB,提供更多的电力。

Page 27: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

26

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 总线(bus)范例

下面的图片显示了一个由软件工具所描绘出 1394总线的范例:

此处将要提前开始解释一切详细的内容(但并非涉及到所有有关技术的问题),但是足以

描述此一典型之 1394 总线。对于刚起步阶段的人而言,软件绘制出此一图像,代表着

1394 提供非常丰富的连接性以及拓扑接续信息。 智能型装置,比如相机以及硬盘,对

其装置本身也提供了相当丰富的描述信息。好比说,相机厂商、机种的款式等。

因此,如上所见,1394 软件对于每一个装置之连接端口数量、每一个装置的哪一些连

接端口与其它装置的哪一些连接端口互相连接等,皆提供了详细的信息。

黄色节点乃是 1394b节点 2,而白色节点乃是 1394a 节点 3。 1394 总线允许使用者可在

相同总线上同时连接 1394a 以及 1394b 装置。蓝色连结系 1394a 连接,而绿色连结则是

1394b 连接。必须注意到,一个 1394a 装置(例如节点 8)仅可藉由 1394a 连结,连接到

1394b 装置(如节点 6)。

节点 6 和 14 系为 1394b 中继器,而节点 5 和 8 则为 1394a 中继器。在实务中,节点 8

乃为一个安装于个人计算机内具有 6 个 1394a 连接端口的主机配接器,PC 已经关闭。

由于这个装置已经「关闭」,因此,机能上仅能作为一个中继器,而描绘软件也是以

这个方式来描述。

还必须注意到,这是一个单一节点之 6-连接端口装置。该技术特征仅能利用 1394a 技

术的芯片来达成。目前,并无制造出的 1394b 芯片可以支持三个以上的连接埠。

____________________

2能够针对 1394b 讯号,但通常为 1394a 讯号。

3仅针对 1394a 讯号。

Page 28: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

27

版权所有 2010, 1394 Trade Association. 所有权利保留

还有一些在图片中存在的事实值得来提及。所有 1394 总线逻辑上被规划为「非环状

图」,或者是树状的连接形态。每个被连接的连接埠相接于一个「子」节点(child

node),或者是「母」节点(parent node),而不形成环状回路。这种分层架构的顶端,为

一个根(root)节点,它并无母节点。

这些关系,可以利用 1394-2008 标准中的图式来显示证明:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure E.22)

母子节点的关系,乃是基于纯粹的「逻辑」关系,非关功能。该关系仅为建立树状连

接拓扑结构,并且在总线的仲裁(arbitration)过程中利用(选择哪一个节点将传输数据),

需要传达仲裁要求(arbitration requests)到担任一个仲裁者的节点。

「母节点」不会对每一「子节点」提供任何其它的「特殊」服务,反之亦然;母节点

也不能代表其子节点,执行任何「特殊」功能。这些装置彼此独立运作,即使在母子

节点关系逆转的情况下,也以同样的方式运作。

任何的节点,甚至一个中继器,皆可作为根节点。然而,在实际应用上,一个「更有

能力的」节点通常会被指派担任根节点的角色,例如前面所示的产品图片,通常以 PC

个人计算机作为根节点。

当总线上仅有一台个人计算机时,FireWire 行为如同一个周边总线;如此的总线可以

使得周边装置能够连接到计算机上,就如 USB 接口一样。

然而严格上来说,1394 并非为周边总线,只是可以如此来视之。在 1394-2008 标准,

第 1.1.1 段(paragraph)记载:「本标准描述了一个高速、低成本的串行总线,其可以作

为于周边总线、一个平行背板(parallel backplane)总线的备份、或是一个局域网络(local

area network) 。」

事实上,微软以及苹果的操作系统 OS(operating system),将 FireWire 当作周边总线,

但不代表着 FireWire 即为「周边总线」。

Page 29: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

28

版权所有 2010, 1394 Trade Association. 所有权利保留

双 & 四主机配接器 (Double & Quad Host Adapters)

在过去几年,「双」和「四」FireWire 主机配接器出现在市场上。这些装置利用了 PCI

总线核心规范,允许 PCI/PCIe 总线上的一个实体装置,在其内部中可以具有一个以上

的逻辑功能。

一个标准的主机配接器,是仅具有一个「功能」的单一实体装置。一个双主机配接器

就为具有两个「功能」的单一实体设备,而一个「四」配接器则具有四个「功能」。

因此,一个「双」配接器在功能上,就相等于两个完全独立的主机配接器,可以节省

个人计算机的内部空间,并且在安装一定数目的插槽的情况下,允许有更多的 1394

「功能」。

以下图片显示了一个双配接器以及两个功能的核心:

虽然该实体装置似乎有 4 个 1394 连接埠,但这些连接埠彼此之间并不全部皆可中继重

复数据传输,因每两个连接埠属于不同的配接器,而这两个配接器彼此之间完全独立

(并非彼此连接;并非处于同一 1394 总线上)。使用于这些配接器的控制芯片可以支

持三个连接端口,但是,在电路板上并未有足够的空间来容纳这些连接埠数量,因此

每一个配接器仅提供两个连接埠。

Page 30: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

29

版权所有 2010, 1394 Trade Association. 所有权利保留

相同地道理,以下的图片显示了一个四配接器:

在此范例中,对每一个配接器,仅提供了一个 1394 连接埠。

必须再次强调,这些配接器在逻辑上是互相独立的。此代表着,当计算机软件询问操

作系统:「您有多少个 1394 配接器呢?」答案将为「四个」,而非:「两个双配接

器」或者「一个四配接器」。正常的计算机应用软件并无法确定两个配接器的实体究

竟为一个双配接器,还是两个单一配接器。

特殊的计算机软件,比如说装置驱动程序,可利用检查 PCI-树状拓朴连接结构的方

式,对一个可能为双配接器,得到一些额外的提示(hints),但是对于所得到的答案仍然

无法确定;因为即使该软件看到了一个 PCI切换器(switch)上连接两个 1394配接器,它

依然无法肯定该 PCI切换器的实体位置;因为可能在一个多配接器上或是在主机板

上。

同样地,当 1394 装置驱动程序(device drivers)加载时,操作系统并不以任何方式区分

单、双和四配接器。该装置的驱动程序无法得知有双或者四配接器,除非像系统整合

商之用户对于系统植入(plant)了可以帮助装置驱动程序正确识别出这些多配接器的特殊

额外信息;例如说,系统登录(system registry)的方式。

Page 31: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

30

版权所有 2010, 1394 Trade Association. 所有权利保留

究其原因,双和四配接器出现于市场上的理由有几项因素:

•节省 PCI插槽(slots)的空间。

•传输频宽(bandwidth)的限制

假设一个应用需要 8 个相机配合工作,其中任何 3 个之结合皆超过 FireWire 频宽。一

个 FireWire 总线仅能有 2 台相机,因此整个应用需要 4 个总线,可以藉由一个四配

接器或是两个双配接器来提供。若是使用四个独立的配接器,因于大多数计算

机主机板并没有 4 个可供利用的 PCI 插槽或是 4 个可供利用的 PCIe 插槽,那么,组

态配置(configuration)的问题将明显浮现。

•FireWire 规格限制每一个总线最多仅能支持 63 个装置。这些装置当然也包含中继

器。因此,如果一个应用需要 500 个环境监测感应器,这些感应器就必须安排于多个

FireWire 总线上。

然而,应用的组合需求若是超越目前 FireWire 的 800Mbps,双或四配接器却是无法解

决高视讯框速率下、高分辨率视频格式应用的问题,。

Page 32: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

31

版权所有 2010, 1394 Trade Association. 所有权利保留

IEEE1394 标准

第一个 FireWire 标准,系由 IEEE 于 1995 年所发表的。随着技术的进展,一些修正与

扩充亦被标准化。这些修正案于 2008 年整合成为一个单一的文件。

下表显示了每一个 1394标准之演变以及重大贡献:

IEEE1394-1995

肇始的 FireWire 标准。简介 100Mbps、200Mbps 以及 400Mbps 的位速率。

IEEE1394a-2000 (修正)

简介重大的效能改良;效率改善。

IEEE1394b-2002 (修正)

介绍 1394b讯号以及 800Mbps 传输速率。

IEEE1394c-2006 (修正)

新连接线型态(CAT5e, CAT6, GOF, POF, GigE)的电气规范 。

IEEE1394-2008

合并原始文件以及修正信息为单一标准。另外,简介 1600Mbps 以及 3200Mbps

数据传送速率的电气规范。

Page 33: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

32

版权所有 2010, 1394 Trade Association. 所有权利保留

IEEE1394 技术

模块式架构 (Module Architecture)

以下参考图示取自 1394-2008 标准之附件 Q1,其中描述了 1394「模块架构」:

串行总线架构(serial bus architecture)以节点(nodes)来定义。一个节点为一个可寻址(addressable)之个体(entity),其可独立重置(reset)和识别(identified)。多个节点可能存于一个单一模块,而多个单元(unit)可能存于一个单一节点,如图Q. 1所示。

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.1)

每个模块,系由一个或多个节点所构成,可以独立初始化(initialized)以及组态配置(configured)。必须注意到,模块乃是实体封包概念(physical packaging concept),而节点乃是逻辑寻址概念(logical addressing concept)。模块是包含一个或多个节点之实体装置,这些节点可分享一个实体接口(physical interface)。在正常操作下,模块无法为软件所见。节点乃是具有唯一地址(unique address)的逻辑个体(logical

entiry)。它提供一个识别(identification)ROM以及一组标准化之控制缓存器(control

resisters),并且可被单独重置(reset)。

以上的文字解释了为何谈论 1394 总线,经常会提及「节点」。在大多数的情况下,于

每一个实体装置的「模块」只有一个「节点」;但于某些情况下,以上论点似乎又并

不正确,比如说,双和四配接器,还有复杂的中继器等。

然而,这些例外比较起绝大部分之 1394 装置属于罕见;因此在实务上,「1394 装置」

与「1394 节点」之用语,通常是可以互换使用。

Page 34: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

33

版权所有 2010, 1394 Trade Association. 所有权利保留

概念总线模型(Conceptual Bus Model)

在这个阶段,我们可以来区分「总线(bus)」和「网络(network)」的差异性。因为基于

之前所见,此种区分可能会有一点模糊,参考 1394­-2008 的 1.1.1 段:

本标准系描述一个高速、低成本的串行总线,可适用于作为周边总线、一个平行

背板(parallel backplane)总线的备用、或者是局域网络(local area network)。

FireWire 为「总线」,也可作为一个「局域网络」。此外,随着许多可作为局域网络

的不同「总线」技术之涌现,可能很难看出其区别。

所以在这一个论点上,我们将描述计算机总线之基本概念(conceptual)模型,显示于

下:

根据此一模型,有一个「共享分享通讯线」(水平绘制于该图片的底部),所有的装置皆

直接连接于此一「共享分享通讯线」。

当然,有其寻址方案,使得装置可以利用单一地址来识别本身。然而,所有的数据传

输是在于信号在线群播(broadcast)。所有传输的封包会被传送到通讯在线,而对每一个

装置皆是可见的;因为,经由传播整个线路使得每一个装置都能够看见。

在该些「看见」的封包中内含有封包的预定目标装置。这个装置能够辨识出封包系针

对自己,因此,可以进行接收封包。1394 标准禁止一个装置接收其它装置地址的封

包。此一原则的例外为总线分析仪(bus analyzer),它会接收所有的数据传输,因为这是

它的功能。数据传输是让每一个于共享通讯线路上的装置能够来「检视」,让某些节

点自行判断决定是否要接收数据封包。因此,数据封包并无法停止经由总线来传播。

决定接收封包与否,乃是由硬件组件来自动执行:每一个节点的硬件,将会自动检视

出现于通讯在线所有封包的标头(headers)。一旦该硬件认出自己的地址出现于封包标头

中,就会进行接收完整的封包。

由于仅有单一的共享通讯线,必须存在有一个方式或机制来决定下一个传送者。这一

个过程,1394 规范就称为「仲裁(arbitration)」,而不同的总线会以不同方式来实施。

Page 35: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

34

版权所有 2010, 1394 Trade Association. 所有权利保留

这 个 基 本 总 线 结 构 , 恰 巧 说 明 了 第 一 个 局 域 网 络 (Thin & Thick Ethernet,

10BASE2/10BASE5)是如何来建构的。共享的通讯线插入 BNC 接头,因此,装置可实

体连接于共享之缆在线,如下图所示:

因此,它该算是 Thin & Thick Ethernet(以太网络)还是总线呢?

答案于维基百科中在相关主题内有很棒的一段描述。它们是「总线网络 (bus

networks)」:

总线网络拓墣连接结构,乃是一个网络架构,其中有一组客户端透过共享

通讯线来连接,即是所谓的总线。

因此,在共享通讯线之间有一个明确的区分,为「总线」以及整个网络之「总线网

络」。

此无疑地说明了何谓总线以及何谓网络之间的ㄧ些可能混淆。然而,在所有上述的案

例中,我们严格地指「区域」网络,因为唯有如此,则才有可能实体上共享相同的通

讯线。

「网络」本身为一个有点过于广泛使用的术语,因此往往使用的正确术语该为「计算

机网络(computer network)」或是「电信网络(telecommunications network)」。

一般而言,「计算机网络」之术语系指「一群相互连接的计算机」,其中「计算机」

一词是以较广泛的涵义来定义,亦即一台打印机亦为计算机、一个路由器(router)亦为

计算机,相对于个人计算机可以经由软件来进行「任何事」的处理,这些装置则是进

行高度专业化的机能。

「电信网络」之术语系指「电信连结以及节点之网络,透过安排使得讯息在多个连结

并透过许多节点,通过网络的一部分至另外一个网络」。

这两个术语实际上有相当大程度的重迭。任何非平凡的区域计算机网络,譬如说一个

跨越整栋建筑的网络,其中牵涉到许多连结和节点(路由器、集线器等),因而产生出

「局域网络」之错觉。

Page 36: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

35

版权所有 2010, 1394 Trade Association. 所有权利保留

下图描绘出一个所谓的「区域」计算机网络:

于上图中,NID 意指「网络基础建设装置(network infrastructure device)」。 根据

TCP/IP 规范,L2 和 L3 系指不同型态的「网络连结(network links)」;其中,L2 是数据

链路,而 L3为网络连结。

总线以及网络之间有明显的差异。在一个网络之中:

数据传输未能传播到整个网络。

网络中各个区段(segments)区域性独立操作,而彼此之间完全独立。

无中央仲裁(central arbitration)机制来决定谁应该在下一个传送。仲裁(如果存在)

仅限于区域区段。

由一个区段到另外一个区段之数据传输,必须经由中间的装置(比如说集线

器、路由器)适当地路由到目的端。

计算机/电信网络的概念模型显示如下:

一个数据封包经由网络,从一台计算机传输到另一台计算机,到达预期的目的地。

Page 37: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

36

版权所有 2010, 1394 Trade Association. 所有权利保留

一个设计该类网络的工程师可以在不同部分的网络之间,建构不同容量之连结,使得

这些连结,得以处理数据载送之负荷。

FireWire 亦可作为局域网络之总线。其中没有路由(routing)参与。根据 IEEE 1394.1 标

准,可能以 1394 桥接器互连复数个 1394 总线,而此将建立一个需要路由的网络,然

而,该类桥接器产品并无法广泛被利用。

IEEE1394 背板(Backplane) VS 连接线使用环境(Cable Environment)

先前所显示之概念总线模型,系由一个单一骨干(backbone)和所连接之节点所组成,可

为概念性,但也可能以实体建构存在于实务应用上,通常称为「背板总线(backplane

bus)」。

事实上,1394 标准定义 1394 供两个环境使用,根据 1394 – 2008 附件 Q2,显示如下:

串行总线之实体拓扑连接结构分为二种「使用环境」,显示如图Q.2。其中一个称为背板环境(backplane environment),并且在本标准中定义,虽然建构可能需要包含于其它背板总线标准的额外实体层(physical layer)之描述。另外一个为连接线环境(cable environment),完整地于本标准中指定。互连节点(interconnected nodes)

可能存在于任一使用环境中,并未受到限制。

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.2)

Q.2.1 连接线使用环境(Cable environment)

连接线使用环境之实体拓扑的连接结构,为一具有分支(branches)之非环状网络。「非环型」代表不支持封闭式的回路形态。

Q.2.2背板使用环境(Backplane environment)

背板使用环境之实体拓朴的连接结构,为一多点总线(multidrop bus)。此媒介(media)包含两个绕行整个背板长度之单端导线。连接器分布于总线上,以允许节点「插入」到总线。

1394 之背板使用之实践已经被运用于专门的通信领域、太空以及工业系统之应用,通

常系利用两个于 VME、PCI以及 Futurebus 标准中为串行总线保留之导线。本文件的其

余部分,纯粹针对「连接线使用环境」。

Page 38: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

37

版权所有 2010, 1394 Trade Association. 所有权利保留

由以上的图式以及之前的总线范例,在连接线使用环境中共享通信线,乃是以许多连

接线的组合来建立,透过 1394 节点连接可做为讯号中继器。

FireWire 传送速度& 向后兼容性(Backwards Compatibility)

在此必须澄清的另一个主题为 FireWire 的传输速度。这些速度的代码显示于下表:

100 Mbps S100

200 Mbps S200

400 Mbps S400

800 Mbps S800

1600 Mbps S1600

3200 Mbps S3200

为了完整性,应该强调以上这些数字为「名义上象征性」的速率。因为,S100 并非实

际达到 100Mbps,仅为 98.304 Mbit/s4。只是接近 100Mbps,基于营销上的诉求,称为

100Mbps(98.304 是一个于发音或记忆上都非常尴尬的数字)。

在 1394 年的标准中,此 98.304 Mbps 的数据速率,乃是所谓的「基础速率」。其它所

有的数据速率皆为该基础速率的真实倍数 。

例如说,S800 实际上为 8 *(基础速率)= 786.432 Mbps。

在本文件撰写的阶段,S1600 以及 S3200 的数据速率也已经完成 电气规范的定义。

以下几点必须明确弄清楚:

FireWire 装置支持多种传输速度。相较于最大容量(maximum capability),可在

相对低于最大容量之速度下传输和接收数据。

相同地,FireWire 装置可在相较于最大容量的较低速度运行下中继数据传输。

此作法显然系为向后兼容性之理由。例如,可能有一台具有 S800 主机配接器之个人计

算机控制了一个 S400 IIDC 摄影机。由于相机并不能「理解」更高的速度数据传输,

所有传送给它的命令必须用 S400 来传输。同样地,任何由相机之响应或影像数据将使

用 S400 的数据速率;因此,S800 之主机配接器必须能够接收。

请注意,基于上述之要点,作者提到了「最大容量(maximum capacity)」而非「最高速

度」。在此有一原因,也是 FireWire 另一个混淆的来源。 此种混淆从 S800数据速率

延伸,而 S800 数据速率肇始于 1394-2002 标准之出现。「1394b 装置 」的说法始终是

正确的,然而有时候会发现,「S800装置」的说法技术上并不太正确。

____________________

4 根据 1394标准,本文件使用「.」点于十进制的分隔。

Page 39: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

38

版权所有 2010, 1394 Trade Association. 所有权利保留

首先,1394a 和 1394b 意指讯号模式(signaling modes),而非速度标记。一个具有三个

1394b 连接埠,且最高仅能传送至 S400 的主机配接器为完全合法的,实体设备也确实

存在。因此,陈述一个装置为「1394b 装置」,技术上仅告知该装置具有 1394b 连接端

口,而且可使用 1394b 讯号;若是该连接端口支持了双模式(bilingual)的情况下,也可

以使用 1394a 信号,

此外应当强调,在技术上来说,1394 节点并不能被说为有一个「最大传输速度

(maximum transmission speed)」、一个「最大数据速率(maximum data rate)」。 最大数

据速率容量,为 FireWire 连接端口之特性,而非 FireWire 节点 。

让我们再度留意之前的例子,一块具有一个 1394a 连接埠以及一个 1394b 连接端口的

主机配接器,系以适配卡的形态。

在可能的情况下,最具有能力的 1394b 连接端口的数据传输速率为 S800,但 1394a 连

接埠不能达到比 S400 高的数据速率,因为更高的数据传输速率仅有 1394b的信号。

因此,陈述一个装置为「S800 装置」并不是太正确,因为有ㄧ些连接端口的传输容量

更低。形容为「可达成 S800 容量的装置(S800-capable device)」或许更为理想。

请注意,以上仅相关于 1394b 的芯片,因为他们支持每一连接端口不同速度和不同的

连接端口型态。但是在大多数案例下,所有 1394b 的连接端口具有相同的最高速度。

因此,对于 1394b 装置所使用的术语,说出:「这是一个 S800 之 1394b 装置」并不会

导致于不正确。在任何情况下,我们必须牢记 S800≠的 1394b; S800 和 1394b 并非同

样事情之名称。

基于上面叙述,有一个疑问可能会发生:一个具有 S400 和 S800 连接埠的 1394 节点,

如何来正确地中继数据传输?

为了寻求答案,我们必须从 1394 标准之事实开始说起, 亦即一个封包的传输速度乃是

一项电子属性(electrical attribute),而不会随着路径方式来改变 。一个以 S100 速度传输

的封包,将以该数据速率穿越整个总线,甚至穿越过两个装置之间具有更高速度的连

结。

Page 40: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

39

版权所有 2010, 1394 Trade Association. 所有权利保留

自然地,较低的数据速率传输可以通过较高数据速率的连结。然而,于一个更高数据

速率的封包如何传递到一个较低数据速率的连结呢?

FireWire 标准的答案出奇地简单:

如数据讯号不能在一些连接埠中继重复,那么这些数据讯号就不会被中继重复了。

此言代表着,1394节点并无法总是能够中继重复所有讯号,但是:

对于所有始终可以中继 1934 讯号的节点而言,是有能力来中继这些讯号到

那些有能力中继讯号的连接端口。

重新回到之前的另一个例子,该处有一个混合 1394a 和 1394b 之总线,我们将留意一

些有关上述之含意:

绿色连结指出使用 1394b 讯号之连结,而蓝色连结指出使用 1394a 讯号的连结。较细

的连结代表了 S400 速度,而较粗连接代表了 S800 速度。 黄色节点为 1394b 节点(可对

应 1394a 和 1394b 讯号),而白色节点为 1394a 节点(仅对应 1394a 讯号)。

节点 15 被绘制为蓝色,帮助我们识别区域节点(local node),由于总线上可能有多台个

人计算机存在,但它是一个 1394b 节点。为什么?因为有一个 1394b 连接至节点 14,

可对应 1394b 讯号,所以视为一个 1394b 节点。

节点 15 以及节点 8 之间的连接为一个 1394a 连结,因为节点 8 是一个 1394a 节点;最

有可能是由一个 9-只接脚双模式连接端口以一个 6 到 9 连接线来连接,但也有可能于

节点 15 由 6-只接脚连接埠以一个 6到 6 连接线来接续。

当相机在节点 10 以 S800 速度传送一个封包,该封包将于连接在线经由节点 9、14、

13、12、11 以及 15 来中继,但在 15 节点上将不会再中继重复 。此举代表着,如果节

点 10 之相机欲传送一个封包到节点 2 的硬盘,并且以 S800 的速率来传送该封包, 那

么该封包将无法到达目的地。

Page 41: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

40

版权所有 2010, 1394 Trade Association. 所有权利保留

以技术面来说,「节点 2是无法以 S800 的速率从节点 10 来到达的」。

如果相机于节点 10 欲与节点 2 相互通讯,就必须以 S400 数据速率或是更低的速率来

传送数据封包。

这是 1394 在软件上的一个主要复杂点。利用 1394 总线所提供之拓扑连接信息(相同于

以上所使用来绘制 1394 总线拓扑连接结构),该软件可以计算出所谓的「路径速度

表」(或称为速度图)。这是一个表格/矩阵,显示出任何节点可使用到达任何其它节点

之最大数据速率。另外,该软件可以藉由「试验 & 发现」的方式,也就是尝试先利用

最大速率与每个装置通讯,直到于某种更低的速率下成功为止。

此外,根据传输速度,对于数据封包的最大尺寸也有所限制存在。因此,如果一个节

点需要传送一个「大」封包,一个需要 S800 尺寸的封包,到达一个仅需要 S400 的节

点,则不可能传送该封包。

确保系统组件(1394 节点)以一个拓朴连接结构可以彼此连接在一起,并让操作上没有

问题产生,乃是 1394 系统设计师的责任,。

1394 协议设计人员决定不中继更高速率数据传输于较低速率的连结上,原因可能不会

立即显现出来。

假设一个节点欲传送一个小的 S800 封包,比如一个 16 字节的封包,到另一个节点

上。该封包够小,适合于 S400 连结,那么为什么不降级(downgrade)该封包至 S400,

并且在 S400连结中「中继」传输呢?

标准答案是「传输速度」等于「传输时间」。一个 16 字节 S800 的封包须

16*8b/800Mbps 来传输 (或是经由 S800 连结 )。如果是在 S400 的传输,则需要

16*8b/400Mbps,很容易看到此为双倍的时间量。

若是在可以的允许情况下,相同的封包在不同部分的总线采取不同时间量传播,然而

此举将会引起时序敏感操作的问题,比如总线仲裁相当的复杂。

因此,相较于计算路径表的软件复杂度,FireWire 设计工程师倾向于较为简单的

FireWire 解决方案,也就是到处皆为相同的传输速率。在任何情况下,对 FireWire 装

置的任意安排仅发生于终端用户方案,而通常在终端用户并未有那样多装置。在复杂

的工业系统,该系统设计师用这种方式建立起 1394 总线来消除或减少这些问题。

Page 42: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

41

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 寻址模式 (Addressing Model)

依据 1394-2008 附件 Q3:

Q.3 寻址 (Addressing)

串行总线遵守64字节寻址的CSR架构,其中每一个地址中较高的16位代表着节点ID(node_ID)。此举,提供了最高 64 k个节点之地址空间。

串行总线划分node_ID为两个较小的字段(field):较高阶的10位指定一个总线ID(bus_ID),而较低阶的6位指定了实体ID(physical_ID)。每个字段都保留所有为“l”值,是为了特殊的用途。因此,这个寻址方案提供了1023组总线,每一组总线具有63个独立可寻址的节点。

FireWire 系遵照 IEEE 标准 1212-2001 的命令与状态缓存器 CSR(command and status

register)架构。根据此一标准,总线的地址空间即是一个 64 位的内存空间。在总线上

进行动作,也就是对于 64 位地址空间的「内存位置」做存取的操作。指定的内存地

址,最初映像到总线上其中的一个节点,之后再到该节点内部的相对应 CSR 缓存器。

因此,这个 64 位地址可以识别节点以及于节点内部的ㄧ些「逻辑单元」,这些单元将

会处理在内存地址上的动作要求。此举也意味着该 64 位内存地址,会被划分成两个部

分,第一个部分类似节点的「外部地址」,如何被其余的总线来认知;而第二个部分

则是「内部地址」,仅对于节点内部有其意义。

这个概念非常类似于网络的 TCP/IP 协议:IP 地址是「外部地址」,而 TCP/UDP 连接

端口则是「内部地址」,用来确认个人计算机中的哪些软件模块应该抓住进来的封

包。

FireWire 使用了 64 位地址中较高的 16 位为「外部地址」,而其余的 48位则是识别节

点中的「内部地址」。

1394 总线上之 1394 节点的「外部地址」,就称为节点 ID (Node ID)。节点 ID 的地址

长度为 16 位,并可进一步划分为两个部分,10位的总线 ID (Bus ID)以及 6 位的实体

装置 ID (physical ID)。

10 位的总线 ID,提供了 1024 个的可能值。其中预留的一个值(全部皆为 1,1023,

0x3FF)具有特殊的意义。它确认为「区域 1394 总线」,也称为「局部总线 ID」。

为了理解「总线 ID」的涵义,我们也必须提及 1394 桥接器(bridges)。在支持 1394 桥

接器的 IEEE1394.1 标准中有叙述,这类装置可以让两个或多个独立的 1394 总线相互

通讯。在这种情况下,这些总线将具有不同的总线 ID。使用局部总线 ID 的数据传

输,仅用于局部总线,因此会被 1394 桥接器所忽略。对于所有非局部总线 ID 的数据

传输,桥接器会自动检查总线 ID 值,并且转送或说重送封包到 1394 总线的目的地;

或者是朝向目的地总线。

请注意,这是封包转送(package forwarding),而非封包中继(package repeating)。桥接器

应该接收封包并放置到一个缓冲区(buffer)、决定将其转送到哪一个总线、然后在该总

线上仲裁(arbitration)取的权利重送该封包。因此,两个总线之间是彼此相互独立的。

Page 43: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

42

版权所有 2010, 1394 Trade Association. 所有权利保留

就理论来说,可以建立一个由 1394 桥接器所互连的完整又复杂 1394 总线网络,如下

图所示:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 1.1)

既然包含多个总线之大型拓扑连接结构乃为可能,所以可以合理地预期,每个总线应

有自己的编号(ID),使得总线桥接器可以适当地转送数据传输。因此,在 16 位的节点

ID 内,有 10 位的总线 ID。

就实务上来说,此时并没有 1394 桥接器,因为企图为此操作建立一个工作标准已经被

证实为相当复杂;而在这段期间内,在没有总线桥接器的情况下 1394 依然运作良好。

因此,产生了一个 FireWire 桥接器标准存在,但是没有人愿意付钱制造桥接器的情

况。

因此,在 99.99 ... 9%的情况下,所有在 FireWire 总线的数据传输使用了总线 ID。对其

余的 0.00…01%,还有一些有趣的技巧可以利用来改变某些总线节点(但并非所有的节

点)的总线 ID。

6 位实体 ID,则是一个更为有趣的议题。6 位可以产生 64 个可能值,其中的数值 63(位

皆为 1)被保留,作为「群播(broadcast)」的用途。

然而,关于实体 ID 值的有趣事实为,并不会始终维持不变。随着总线的重新组态配

置,比如说装置的插入或是拔出,实体 ID 值将会随之更新而变化。

这种随插即用(Plug & Play)」的手法,是 FireWire 的主要优势也是个麻烦。 在 1394 总

线上,可于任何地方插入任何装置,而总线会重新自动组态配置,建立一个新的树状

拓扑连接结构,并且对装置指定了实体 ID 值。完全无须人为的干预!

就硬件层面来说,此举是非常惹人喜爱的安排,但是对于软件层面,处理随时变化实

体地址的装置并非如此容易。

在本文件中,将有更多细节将着墨于总线自动重新组态配置的议题。

Page 44: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

43

版权所有 2010, 1394 Trade Association. 所有权利保留

下图摘自于 1394-08 标准,概括描述了 1394 内存模型的寻址模式,另外也显示了内部

48-位地址进一步划分为「初始内存空间(initial memory space)」、「私用空间(private

space)」、以及「缓存器空间(register space)」:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.3)

尺寸标注以及字节顺序 (Size Notation & Endianess)

以下表格,摘自 1394-2008 第 1.5.3 段:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Table 1.1)

最后一栏所使用的术语乃为 1394 标准所使用,本文件之后将依然会延用。

Page 45: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

44

版权所有 2010, 1394 Trade Association. 所有权利保留

有一个非常重要的问题,相关于字节的顺序;也就是最低位在前的 little endian 与最高

位在前的 big endian:

对于四字节字(quadlet)的字节寻址以及八字节字(octlet)的四字节寻址,1394 串行总线使用了最

高位在前顺序的 big-endian 方式。对于 32 位的 quadlet 缓存器,字节 0 总是缓存器的最高有效

字节(most significant byte)。对一个 64-位的 quadlet 缓存器对(register pair),第一个 quadlet 总是

最高有效者。最左边的字段先行传送;在一字段中,最高有效字节(MSB),也就是最左者,也

是最先传送者。这种排序的惯例显示于图 1-3 中。

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 1.3)

此种 big endian 惯例,基本上为一个字节序号(byte numbering)的惯例,使得在总线上的

所有节点对传送或者接收的资料封包可以有相同的解读。而节点内部中可能会存在有

一个 little endian 之处理器;然而,在该节点传送的数据封包必须遵守 big endian 的法

则,让所有其它节点都可以了解这些封包,确保彼此之间的相互操作性。

同样地,1394 标准之第 1.5.5 段也定义一个「数据封包」如下:

串行总线封包,系由一序列的 quadlets 所组合构成。

当然也有许多不同特定类型的封包,但根据该定义,任何资料封包为一序列之

quadlets,如以下所显示。这就代表着,其尺寸总是一个 4 字节的倍数:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 1.4)

Page 46: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

45

版权所有 2010, 1394 Trade Association. 所有权利保留

总线重置与 1394 总线自我组态 (Bus Reset & 1394 Bus Self-Configuration)

「总线重置(bus reset)」,是 1394 总线上的一项基本特征,标准的术语并未对其有简明

的定义。

因此,作者将提供一个非官方的定义:

一个总线重置系一事件,它中断了 1394 总线的正常运作,并迫使所有节点

进入到一个特殊的状态,该状态可以清除之前的拓扑连接信息,并且启动

总线组态的一个新历程。一旦总线组态配置宣告完成,正常的总线运作就

可以重新开始。

技术上而言,有两种类型的总线重置:

1. 长时期总线重置(Long Bus Reset):需要较长的时间,才能完成的总线重置阶段

(于重新组态配置开始之前),而且可能会损坏数据封包。

2. 短时期总线重置(Short Bus Reset)::亦称为仲裁总线重置,因为启动器(initiator)

基于总线仲裁,彷佛要传输封包,之后启动总线重置。速度较快,而且因定义

上没有其它人于该时间被传送,因此不会损坏任何数据封包。

很容易厘清的是,当一个节点加入或由 1394 总线上移除时,长时期总线重置发生。显

然地,尚未被加入到总线的装置不能仲裁与要求短时期总线重置。对于装置的移除也

是如此;该装置不可能知道一个外面代理人即将拔掉它。此为实体本身拔出所导致的

总线重置。

短时期总线重置,通常为软件模块所使用,这些软件模块欲以特殊方式来重新组态配

置总线;比如说,建立一个新的根节点。在任何可能的情况之下,软件应该总是启动

短时期总线重置,并且避免启动长时期总线重置。

根据 1394-2008 附件 H,在一个总线重置之后的总线组态历程时间表如下:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure H.1)

Page 47: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

46

版权所有 2010, 1394 Trade Association. 所有权利保留

在树状形态辨识(tree identify)阶段之前,尚有一个简短的阶段(图中并未显示),称之为

总线初始化(bus initialization)的阶段。在该阶段,每一个节点会决定出其连接埠的连接

状态。

树状形态辨识阶段,在 1394-2008 标准中的描述如下:

在一总线初始化过程后,树状形态辨识过程会转换网络拓墣连接为树状结构,其中一个节点被指派为根节点,而所有的实体连接朝着该根节点有一个方向性。这个方向性是标示每一个被连接的连接埠为「母节点」(也就是连接于一个较接近于根节点的节点),或是「子节点」连接埠(连接于一个离根节点较远的节点)。

此举代表着,树状形态辨识阶段,乃是在于将节点组织成一个具有阶层性的架构,最

顶端为根节点,而根节点仅具有子节点。

自我辨识(Self-Identify)或说自我确认阶段,乃是以一个决定好的方式来将实体 ID 值分

配给每个节点的阶段。代表一旦树状结构已经被确认,仅有一种方式来指派实体 ID。

我们可以大致认为,在一个给定的总线上,实体 ID 指派决定于根节点。如果总线上,

节点 A 为根节点,则仅有一种方式来分配实体 ID 值。如果根节点被更改为节点 B,则

将有另一种不同的方式,但是如果节点 A 又被还原为根节点(比如透过软件的安排

等),则原来的指派仍然适用。只要是实体拓扑连接结构没有被改变(无加入或是移除节

点),如果节点 A 为根节点,则将执行相同的实体 ID 指派。

技术上来说,「自我辨识」阶段与「树状形态辨识」是分开的,因为一个新的算法过

程被执行用来完成实体 ID 值的分配。

在此阶段之后,可重新开始正常的总线操作,譬如总线仲裁和封包传输。部分的操作

亦描绘于以上的图式中,无论如何,这些任务涉及到正常的数据传输。「树状形态辨

识」和「自我辨识」阶段,是经由特殊的讯号交换来进行处理的。

因此,可以总结:

每当 1394 总线有实体拓朴连接结构的改变(1394 节点的连接或是移除),或者软

件决定对既存总线的拓朴连接结构做重新组态配置(比如说,有新根节点、新间

隔计数 new gap_count、清除总线错误等),总线重置将会发生。

总线重置,会中断总线的正常操作并且迫使每一个节点进入一个「特殊」的重

新再组态模式。

总线重置之后,紧接着进行总线初始化阶段,在该阶段每个装置再次确定哪些

连接埠为连接的,哪些不是。

接着是树状形态辨识阶段,决定出其中母节点与子节点之间的关系,并建立一

个总线拓朴连接结构。在本阶段之末,所连接的连接埠了解已连接到一个「子

节点」或是「母节点」。「根节点」也同时被确立,并且其连接埠仅连接到子

节点。

其次是自我辨识阶段,在此阶段,实体 ID 值被指派给每一个节点。

总线正常动作,也就是数据封包交换,此时再度开始。

Page 48: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

47

版权所有 2010, 1394 Trade Association. 所有权利保留

有一个应该清楚说明的小细节,从技术上来说「连接一个装置到总线上」或是「从总

线中移除一个装置」可能不甚精确。您也可以连接其它的 1394 总线区段到总线上(加

入已经连接的一大堆装置到总线上),或是从总线上移除一整段(同时移除一堆的装

置)。该两项动作,通常仅产生一个总线重置,而非对每一个连接或不连接的装置有一

个总线重置。

就技术面而言,一个「拓扑连接的改变」是指:

1394 总线的任一连接端口的连接状态被改变。

如此的一个「连接埠连接状态 」改变,会触发总线重置 。

例如,有可能透过软件来「停用(disable)」一个 1394 连接埠的连接。此举代表着该连

接端口仍然「实体上被连接着」(连接线并未拔除掉),但是「逻辑上并未连接」,也就

是说于连接线的另一端,连接埠的电气特性连接已经消失。如此的事件,就是一个

「连接埠连接状态」的改变,因此,1394 将起动总线重置。

除了长时期和短时期的总线重置区别之外。总线重置也有「硬式」和「软式」重置的

分别:

硬式总线重置(Hard Bus Reset)::由连接埠连接状态的改变启动。所有的硬式

总线重置,乃是长时期总线重置。

软式总线重置(Soft Bus Reset)::基于某种原因由软件起动。可以为长时期或者

短时期重置。

硬式总线重置很容易理解。但是,为什么还需要软式总线重置呢?

软式总线重置的存在有很多的原因。其中最为显著的原因,是为了在总线拓朴连接结

构中,软件可以指定哪个 1394 节点将作为根节点。

后段总线重置阶段的正常动作,根节点被选择。用一个较为简略的方式, 随机性地选

择根节点。这并不代表遵守一个随机性的过程。而是说,当一个总线重置发生时,(a)

所有节点将有相等的机率成为根节点,以及(b)实际上并没有任何方式足以猜测谁将成

为根节点。

然而,在接下来的章节中所描述之理由,软件模块可能冀望某个特定的节点成为根节

点。因此,1394 提供了一种改变所有节点「均等机率」之方法,并偏袒某个特定的节

点。这是透过传送一个特殊用途的数据封包。当下一个总线重置发生时,此数据封包

将通知目标节点,必须更动规则。而且也通知所有其它节点,有其它人将更动规则,

因此它们最好能按照规则小心行事。

这个节点被「知会」,但为了拓朴连接结构实际地改变,必须产生总线重置。因此,

软件启动软式总线重置,完成指派一个特定节点为根节点的任务。

Page 49: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

48

版权所有 2010, 1394 Trade Association. 所有权利保留

Beta 回路以及冗余性 (Beta Loops & Redundancy)

之前已经提到过,1394总线拓扑连接结构,系为一个分层式无环状回路之树状结构。

对于一个仅有-1394a 总线(一个仅涵盖 1394a 节点之总线),这个陈述在实体层的观点

乃为真实。您无法让连接线环绕,最终回到开始处。

如果一个回路导入仅有 1394a 之总线,则树状形态辨识(Tree Identify)阶段的算法将陷

入一个无限回路之中,最终将逾时(timeout)并产生一个新的总线重置。如此过程将一直

重复,造成一个总线重置的无限序列现象,直到有人为的动作来实际移除该回路。

1394b 标准,则对 FireWire 加入了一个非常强大的功能。现在,实体回路的连接方式

是被允许的。所追加的情况是,在总线初始化阶段,1394b 总线上的节点侦测出回路的

存在并且逻辑上「切断(break)」了这个回路。所谓逻辑上切断一个回路,基本涵义是

说,逻辑上移除了其中的一个连结,这个连结系为回路中的一部分;移除了一个连结

就等于切断了整个回路。

至于回路如何被侦测出来的细节以及切断连结如何选择,则属于本文件以外的范围。

然而,「切断」连结则不是。前面已经提到,软件有能力来「停用(disble)」一个连接

埠,从而使其在逻辑上是呈现不相连的,但实际上连接线依然被连接着。

在这种的情况下类似的事情发生了。1394 总线自动停用所选择连结上的连接埠,以切

断回路。根本无须软件的介入。总线重置之后的特殊自动处理阶段,都会自动进行。

这种连接埠停用的处理,就称为「回路-停用(Loop-Disable)」。

但更令人惊讶的是,在相同的时间多个回路存在是可能的。1394 会精心挑选并自动切

断所有适当的连结,使得总线(a)没有更多的回路,以及(b)所有的装置仍然维持着可以

存取的状态。

所有这些议题都非常有趣,但问题是「我们为何要允许回路」?是否有人为的错误发生

在组态配置中,我们将会不会发生总线无限重置序列的现象?

这个特征的理由,最终结果是「冗余性(redundancy)」的问题。

系统设计师在 1394 总线上打算建构回路的理由,乃是希望在一些装置之间至少有一个

以上的实体连接线路径;因此,如果有某个连接线路径在硬件上发生了问题,则装置

还可以透过另一条连接线路径来存取。

因此,1394在这个地方做了一些看似魔法的额外处置。每当一个总线发生重置时,会

重新计算所有的回路,如果出现了一个连接变化,则将「切割」总线成为两段;然

后,对连接埠自动重新起动了回路停用,将总线变回一个区段。

如此之下,相对于其它的竞争技术,1394b 提供了冗余性的机能,此乃一个很大的优

势。

Page 50: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

49

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 传输协议之分层 (Protocol Layering)

1394 协议,系为一个数据传输的协议,因此很自然地以分层的方式来定义,有如堆

栈。下图取自于 1394-2008 标准,并显示出串行总线协议(SBP-Serial Bus Protocal)中所

有已定义的层级:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.4)

实际上,串行总线管理(Serial Bus Managemet)分层,位于架构的最顶部,由于服务范

围跨及所有下层,所以被绘制于一侧。

上面所显示的层级架构中,实体体(Physical)和连结层(Link)通常以硬件的方式来建构,

泛称为 PHY 芯片(或简称为 PHY)和连结芯片(或简称为 LINK)。

几年之前的多数实践方式,主机板上的 PHY 和 LINK 多以单独芯片存在的方式来建

构。但近几年来,芯片制造商整合了 PHY+LINK 芯片于单一硅芯片之中。然而,此为

建构上的细节。 PHY 和 LINK 分别执行完全不同的功能,因此,应以不同的的单元来

讨论。例如,实体层控制 1394 节点的连接埠、决定出连接埠的连接状态、进行仲裁要

求、中继所有的数据传输等。

数据交易层(transaction layer)和串行总线管理(SBM-Serial Bus management)层,多数以

软件或韧体的形式来实践,这些软件建构在支持 1394 的节点内。并非所有的节点需要

所有的协议层级。例如,一个中继器仅有一个 PHY,无须 LINK。例如相机的装置也

存在有 LINK 和数据交易层,但通常没有 SBM 层。其中,SBM层的实践,一般是建构

于 PC 个人计算机之中。

Page 51: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

50

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 总线封包(Bus Packets)

在先前的段落中,已经陈述了 1394 数据封包的基本定义:

串行总线封包,系以一序列的四字节 quadlets 所组成。

任何的 1394 数据封包,有如下图所示为一序列的 quadlets,当然就意味着数据封包的

尺寸总是 4字节的倍数:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 1-4)

然而,有许多不同种类的资料封包,决定其特性和用途。完整的架构显示于以下由

1394-2008 标准中所撷取的图式中:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-1)

在该架构中的第一层级,包含有三种型态的封包:

1. PHY 封包

这些封包的大小为 2 个 quadlets(8 字节),而接收端无须做出认可。由于其名称

已经内含讯息,原本目的是用来传送信息、送出命令和给予或接收 1394 总线上

Page 52: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

51

版权所有 2010, 1394 Trade Association. 所有权利保留

节点 PHY 芯片的响应。这些封包,两个 quadlets 并非相互独立。第二个 quadlet

为第一个二进制之倒转,作用有如 checksum的检验。

然而,PHY 封包后来过于超载,这意味着投入新的用途。VersaPHY 协议,以

保留一些字段(fields)定义了一个新 PHY 封包的子集(subset)。在这些封包中,

两个 quadlets 内皆包含有信息。因此,两者并非彼此的倒转关系。

2. 认可封包(Acknowledge Packet)

根据 1394-2008 段落 3.1.5 的描述,一个认可封包系「一个 8-位封包之传送,可

以是针对主要封包(primary packet)的接收来做回应」。

3. 主要封包(Primary Packet)

根据 1394-2008 段落 6.2.1 的描述,「一个主要封包和认可封包或是 PHY 封包

的区别,系根据其长度以及/或者编码来识别。主要封包的长度,必须至少有两

个 quadlets(一个 0-数据长度的等时封包)。一个主要封包,必须包含有封包标头

(header),也有可能包含了数据区块(data block)」。

必须承认,以上对于主要封包的定义是有点晦涩难懂;因此,也可以把主要封包想象

成「任何不是 PHY 封包或者认可封包的另外封包」。

另外请注意到,认可封包的定义,它们乃是「选项(option)」。意思是说,并非每个类

型主要封包的接收,多需要认可的响应。

一旦理解封包型态的第一层级分类,就可以转移到第二个层级,其中将主要封包区分

为「异步封包(asynchronous packets)」以及「等时封包(isochronous packets)」。

在 1394-2008 标准的段落 6.2.1 陈述如下:

对串行总线的两个基本的主要封包变化型态定义为:异步封包以及等时封包,系利用数据交易码数值(transaction code value)来加以区分。

此一简单的陈述当然无法揭露出所有的复杂性,但可使我们了解一件重要的事情:

站在数据上的观点,异步以及等时封包乃是相同的事情:一个具有标头和

可能有主体(body)的 1394数据封包。等时封包,仅是于标头使用特殊的数

据交易码数值(10),而异步封包,则使用其它数值。

这意味着等时数据封包本质上并无什么特殊性。 而是等时封包处理的方式有其特殊

性,使得等时数据传输成为 FireWire 接口的一项重大特征。细节将会于尔后段落中解

释。

在进行下一步之前,必须暂缓一下,先来解释一些技术术语。在计算机软件文件的领

域里,「异步(asynchronous)」连同其相反词「同步(synchronous)」经常出现。然而,

FireWire 使用「异步(asynchronous)」之术语相对于「等时(isochronous)」,用来区分两

种主要封包之基本类型。

因此,「异步(asynchronous)」、「同步(synchronous)」和「等时(isochronous)」三者的

主要差别为何呢?

Page 53: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

52

版权所有 2010, 1394 Trade Association. 所有权利保留

虽然明显的差异,可能对一个希腊语者(所有这些单词源自于希腊字"ασύγχρονο",

"σύγχρονο", "ισόχρονο")或者已经沉浸在 WireFire 世界里多年者来说毫无困难;但作

者已经注意到对于那些不甚熟悉 FireWire 者,这些术语却产生相当大的混淆。

先让我们从计算机领域中「异步(Asynchronous)」与「同步(Synchronous)」的定义开始

来说起,基本上系针对 I/O 操作的特性而说的:

异步(Asynchronous) I/O ,或称为非阻隔式(non-blocking) I/O ,是一种输入/输出

处理的方式,允许 I/O 操作完成之前可以继续其它处理的方式。

同步(Synchronous) I/O, 或称为阻隔式 I/O,是一种输入/输出处理的方式,其

中的呼叫者必须等待操作完成,才能够进行下一个处理。

希腊字「异步(Asynchronous)」,乃是用于描述「两个或多个独立但同时发生的事情,

彼此可以无须关联」,这就是为什么它们被认为是独立的原因所在。

好比说,我点了一些比萨、然后继续做我的工作,此时比萨正在准备、烹饪中,完成

之后才把比萨交给我。我的工作和比萨的准备,就是一种「异步」的程序。

在这层意义上,「异步 I/O」这个术语中,采用了异步这个单字的确是挺有效用的。程

序执行先行摆脱一些 I/O 的操作、并在这个期间进行了其它的事情、尔后在某一个时

刻再将 I /O 的操作完成。

而希腊字「同步(Synchronous)」,则是 用来形容「事件同时发生而且彼此时间相关的

姿态 」。

好比说,当一个芭蕾舞剧演出的时候,舞者正以同步的方式来演出。其中,有些人在

同一时间做出完全一样的动作,而那些跑着并且进行个别演出(solo)的移动舞者也完全

了解时间的搭配性;而且,他们也知道必须在音乐背景演奏的 5 个节拍内完成其移动

的部分动作。以此来观之,所有的这些舞者都是「同步」的,他们以一种「同步的」

方式来进行。

因此,将所谓的阻隔式 I/O 视为同步 I/O,在用词上相当不恰当。等待直到某件事情的

发生,并不会让您与该件事情引起同步。等待直到某件事情发生,并不代表着你必须

在该期间同时坐着不动不做任何事情。在异步 I/O 的事例下,执行程序也会等待 I/O 来

完成;譬如说,影像档案数据在尚未读取之前,是不可能在屏幕上绘制图像的。不同

的是,在这段期间,仍然可能进行某些事情,而不是闲置在那儿。

在 1394 技术之中很少有同步的事情,仅有芯片或是连接线信号的低阶操作才需要同

步。因此,可以断然地说:

在 FireWire 的技术中,并无同步数据传输这般的事情。

诚如以上所见,为了描述一些过程为同步或是非同步,就必须有一个以上的元素

(elements)在时间上有所相关性。一些事情可能与其它的事情为同步或是非同步。

Page 54: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

53

版权所有 2010, 1394 Trade Association. 所有权利保留

因此,1394术语中的「异步封包」并不代表说该封包本身为「异步」,而是说这个封

包为「异步式的数据传输形态 」。同样的道理,「等时封包」则是表示了一个「等时

的数据传输型态」封包。

因此, 在 1394 的世界里,异步(asynchronous)这个术语的选用,乃是用来表示非等时。

异步数据传输以及等时数据传输的个别特征,将于下一段中来介绍。

1394 周期(cycle) – 第一部分

首先来看 1394-2008 标准中段落 3.1.65 对于「等时(isochronous)」一字的定义:

时间上的一致(也就是说有相同的时间区隔)以及定期发生循环(recurring)。

相关于希腊文的涵义,这段定义相当精确。在 1394 中也是一样,等时式数据传输,乃

是指在规律的时间区间中进行数据载送,而且这个时间区间是相等的。

现在则可以来理解 1394标准中更多技术上的描述:

3.1.15 异步封包 (asynchronous packet):依照异步仲裁规则来传送的主要封包;这是针

对在等时期间以外而说的。

3.1.66 等时区间 (isochronous interval):在周期开始封包(Cycle Start packet)送出以后开

始的期间,执行一个子动作来作为结束。在一个等时期间,仅有等时封包可以传送。

一个等时期间,平均每125微秒开始一次。

3.1.68 等时子动作 (isochronous subaction): 在等时期间之内,可能进行一个连锁封包

或是一个前面含有间隔(gap)的封包。

以上段落所企图来解释的,即是所谓地等时区间(isochronous interval)或称为等时期间

(isochronous period)的概念。任何在此时间期间之外所传送的封包,皆是异步封包。而

在该期间之内所传送的封包,当 然就是等时封包。

下图显示了每 125 微秒区间,在 1394 总线上等时区间和异步期间的交替载送:

等时期间的结束,是基于一种不太容易来解释的方式,特别称为「子动作指示

(subaction indication)」,此处将不再做进一步的分析与说明。当等时期间结束之后,就

可以开始进行异步期间。然后,大约对这个等时期间开始以后的 125 微秒后,另一个

周期开始事件将再发生;也就是以另一个周期开始封包,展开了一个新的等时期间。

Cycle Start Event

Page 55: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

54

版权所有 2010, 1394 Trade Association. 所有权利保留

正确地来说,1394协议规则的本质, 等时封包仅能够在等时期间之内来传送。当等时

期间结束之后,异步封包才有可能被传送;直到 125 微秒过后,下一个周期开始;也

就是说下一个等时期间又将开始。

举例来说,您不能够取得一个异步封包(处理码值非为 10 者),迫使其在等时期间传

送。1394 控制器将会拒绝在该期间传送这个封包,而是等待到下一个异步期间才会开

始传送。

这个图式也说明了 FireWire 的一项基本观念:所谓的「1394 周期」,是泛指一个平均

为 125 微秒的期间。请注意,「1394周期」与「等时区间(isochronous interval)」是不

相同的事情。比较精确的说法是:

(等时期间) + (异步期间) = 「1394 周期」 ≈ 125 微秒

1394 周期的开始,是藉由于一个周期开始事件,它是 1394 总线上的一种数据封包,特

别称之为「周期开始封包(Cycle Start Packet)」。当下一个周期开始封包传送时,也就

宣告这个 1394 周期的结束,并开始一个新的 1394 周期。

1394 周期- 第二部分: 周期开始封包与周期主控器(Cycle Start Packets & the Cycle

Master)

来对图标 6.1 做仔细观察,周期开始封包系为一个主要封包(primary packet),而且是异

步形态的一种。了解「周期开始(Cycle Start)」数据封包,是理解 1394 等时和异步数据

传输非常重要的一环。周期开始封包,系一数据封包,与其它数据封包的传送是一样

的。它并非像任何特殊的电子信号,来作为电子频率。

下图由 1394-2008 标准­中撷取而来,明显地可以看出,一个周期开始封包系由五个

quadlets 所组成:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-10)

Tcode 字段(field),该是数值 8。source_ID 字段,是传送周期开始封包节点的节点

ID。而 cycle_time 字段,则是周期主控器之 CYCLE_TIME 缓存器的内容。

由于周期开始封包系为一个数据封包,应该由在总线上的其中一个 1394 节点传送。在

1394 的术语当中,传送周期开始封包的节点,就称为周期主控器。在任何时间点上,

仅能存在一个周期主控器。也仅有一个节点可以传送周期开始封包。

Page 56: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

55

版权所有 2010, 1394 Trade Association. 所有权利保留

总线重置之后,立即决定出周期主控器节点,然后一直维持着这个「角色」直到下一

次的总线重置。在新的周期主控器可能被选出之时,将传送周期开始封包直到下一个

总线重置。

以下这件事实值得再三强调:

周期开始封包的传送,是为选项(optional)。

一个软件程序模块,可以要求周期主控器停止周期开始封包的传送。这时候会怎样呢?

若追溯之前所给的定义,等时时间间隔以一个周期开始封包为开始,而在这个周期

内,有等时期间以及异步期间。如果没有周期开始封包,也就是代表着没有等时传输

的期间、没有周期,并且 1394 总线始终进行异步传送。

并非所有的系统或应用,皆需要等时传输的数据传送形态,所以,也有可能「关闭」

周期开始封包,仅采用异步传送方式。

在这个情况下,端看其详,结果很令人惊讶;关闭了周期开始封包,竟然可以将性能

表现提高约 5%。这是因为,每一个周期开始封包的构成为 20 字节,以每 125 微秒传

送一次(每秒 8000 个),代表着占有总线频宽百分比为:

((20*8000*8) bits/sec) / 800Mbps = 0.15%

至于解释如何删除该 0.15%数据交易来获致 5%性能的改善,已超出了本文件的范畴;

但是可以这么说,有一些应用需要额外的性能提升,因此关闭周期开始封包并非不合

理或是罕见的。

之前提到总线重置之后,周期主控器必须被选出。为何必须如此呢?又,在筛选周期

主控制器过程中,是否有不同的技能呢?

答案是肯定的,有两个技术程次:首先,一个节点能够或是不能够作为一个周期主控

器。并非所有的 1394 节点,都有能力来产生周期开始封包,以致于有些节点无法成为

周期主控器。其次,要产生周期开始封包需要一些额外的电路和韧体上的支持;所

以,一些装置选择不提供该能力,而让其它的 1394 节点来担当周期主控制器的任务。

"有能力作为周期主控器": 一个有能力产生周期开始封包的 1394 节点。

同时,仅有在拓朴连接结构上的根节点,才能够履行周期主控器的职责。如果 1394 总

线上的根节点具有能力作为周期主控器,那么该总线组态就可以称为「具有等时传输

能力」。同样的道理,另外一个没有周期主控器机能的根节点,就没有等时传送的能

力了。

相反地,如果一个 1394节点可以进行等时数据传送,则称为「具有等时传输能力」。

这就代表着为了让 1394总线上能够进行等时数据传输,就需要满足:

1. 总线上存在有能力进行等时传输的节点。

2. 总线会将周期主控器配置为根节点。

Page 57: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

56

版权所有 2010, 1394 Trade Association. 所有权利保留

3. 周期主控器才能启动周期开始封包的传送。

诚如前面所述,若是软件欲采用等时传输,却检测出当前根节点并非有能力担当周期

主控器,那么就会另外寻找一个有能力作为周期主控器的节点,指定该节点成为下一

个根节点,并启动一个短时期总线重置。

在实务中,多数的应用都需要等时传输的支持;因此,1394 软件通常多会使用短时期

总线重置,来操控总线的拓朴连接结构,让有能力担当周期主控器的节点,在拓朴连

接结构中最终会成为根节点。

所有的 1394 主机配接器,皆具有能力来担当周期主控器,也就是说 PC 个人计算机之

类的装置,多有能力来扮演周期主控器。因此,大部分的 1394 系统,PC 个人计算机

多是作为根节点装置。

然而,这仅是一个方便与实务上的巧合。 并没有硬性规定个人计算机一定必须为 1394

总线上的根节点,才能够进行等时数据传输。

Page 58: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

57

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 周期 – 第三部分:周期结构(Cycle Structure)与周期飘移(Cycle Drift)

在介绍完 1394 标准所有的技术术语以及规则之后,现在就可以来探讨 1394-2008 标准

中一个很有趣的图式:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.16)

该图释中可能包含了太多的讯息,现在将逐一解释。

首先注意到的第一件事情,就是「周期同步(cycle synch)」箭头。每一个周期主控器内

部具有一个非常精确的频率,每秒产生 8000 次周期同步信号 (每 125 微秒一次)。这就

表示说,节点上的 1394芯片必须传送出一个周期开始封包。

然而我们已经提及,周期开始包也是正常的封包。如果有其它的主要封包在这个时候

也要传送时,会发生怎样的情况呢?在这种情况之下,周期开始封包将会被延迟。这

就是为何之前对于周期持续时间的定义,125 微秒持续时间,总是用到像是大约或是平

均等字眼。

1394 协议处理工作于较低层次的方式,使得周期开始封包成为一种拥有较高优先权的

封包。一旦目前封包传送结束之后,没有其它封包将被传送;此时,等待周期开始封

包将取得优先权。

从上图中可以看出,在两个周期同步事件之间,周期开始封包的传送皆有一点小小的

延迟。如果这个事实不及时来加以处理,那么 1394 总线的逻辑频率,将慢慢地飘移。

举例来说,在 24 小时的运作之后,可以预期周期的数目为(24 小时/125 微秒),但事实

上却是发现在实务上将少了许多的周期。

此种累积周期漂移(cycle drift)的现象,将对许多的应用产生了严重的问题。因此,1394

标准在这个问题上施予了一点聪明的对策。周期主控器的 1394 芯片,将会追踪这些小

漂移,并且很快速地和自然地纠正。

透过使用周期同步事件有如指南针。周期同步事件,来自于一个真实的硬件频率,因

此,它们绝对不会漂移。每当周期同步事件发生时,等于告诉 1394 芯片「尽快传送一

个周期开始封包」。

Page 59: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

58

版权所有 2010, 1394 Trade Association. 所有权利保留

由时间点零开始,并假设第一个周期用掉 145 微秒,因而第二个周期开始封包被数据

传输延迟了 20 微秒。下一个周期同步将会于 250微秒的时间点发生。假设仍然有资传

输,周期开始将被延迟 5微秒,所以将会在时间点 255 微秒传送。因为(255-

145)=110,所以第二个周期仅持续了 110 微秒,而非 125 微秒,而一个 15微秒的修正

产生。下一个周期同步将发生于 375微秒。(375-255)=120,代表着如果有没有数据传

输,其余的 5 微秒将会被调整过来。

若是来思索一下前面的描述,无论数据传输多么繁忙、无论系统的运行有多久,每一

个周期开始封包开始的最糟情况,也会离它们该开始的 40-50 微秒以内被传送。正是

因为没有延迟之积累(delay accumulation),也就不会有「频率漂移(clock drift)」。有些

周期可能会有点超过 125微秒,­而有一些较短,但平均周期仍然持续着 125 微秒,而

每一秒平均有 8000 个周期。

若是想了解为何这个事件为真实,请考虑以下的资料:

如果来监视 1394 总线于第一个周期开始封包之后,经过了 24 小时的运作时

间,那么将会看到多少个周期封包呢?答案为(24*3600*8000)个或者

(24*3600*8000)-1 个。有可能最后一个周期可能不工作,因此观察将会少了一

个封包。

若是将这两个数字除以 24*3600,其结果将非常接近于 8000 个,差距在

1/(24*3600)之内。

如果监视 1394 总线恰好 5000 小时。则将看到多少个周期呢?答案为

(5000*3600*8000)或者(5000*3600*8000)-1。将两个数字除以 5000,结果将更接

近 8000。

总之,周期同步(cycle sync),乃是真实的硬件频率。而周期开始封包,则是一个软件

频率,可视为 1394 总线上对于硬件频率的一种呈现。

Page 60: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

59

版权所有 2010, 1394 Trade Association. 所有权利保留

1394 周期 – 第四部分:等时以及异步数据传输

现在,让我们再来探讨图式中的其它部分;我们才能够对于等时传输以及异步传输,

能够深入理解。为了参考上的方便,将该图式重复如下:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure Q.16)

我们已经在前一段中,解释了周期同步事件的涵义。从图中可以看到,「第 m个周期

(cycle #m)」在一个小延迟(x)后开始,而「第 m+1 个周期(cycle #m+1)」则跟随着另一

个迟延。无论如何,我们将来解释这些延迟怎样得到修正,如何让这些延迟永远不会

累积。

该图式中显示的「间隔(gaps)」,乃是「总线闲置时间(bus idle time)」的持续时间。根

据 1394 标准的规定,等时封包之间可以不会出现间隔(也就是所谓的连锁封包

concatendated packets),或者存在着微小的等时间隔(isochronous gap)。当有等时封包的

最后一个节点完成传送之后,则每个节点都在等待下一个等时封包,但实际上却已经

没有了。这时候,总线将闲置久一点的时间(这段期间称为子动作间隔 subaction gap),

而 1394 芯片了解等时期间已经结束,因此将会进行异步数据传输。

图式中的所有方框就代表着数据封包。不难看出,「周期开始」封包位于每一个周期

的起始处。而且被标注为"ch J", …, "ch N"的这些方块为等时封包,其中 ch" 代表了"通

道(channel)"。至于封包 B 以及封包 C,则是异步封包,而这类封包的传送会有认可

(acknowledgement)封包的交握处理。

这些认知带给我们对于等时封包以及异步封包,能够理解其显著的差异点:

异步封包在其封包标头中,具有一个目标实体 ID (target physical ID)字段。该目

标实体 ID 可能为某个特定的 1394 节点,也有可能是所有的节点(当实体 ID 为

63 时,就是群播封包 broadcast packet)。 一个异步封包会传送给一个特定的

1394 节点或是群播给所有节点。

等时封包,其封包标头中并不存在目标实体 ID。相反地,它却具有一个「等时

通道编号(Isochronous Channel Number)」,其数值由 0 至 63。

Page 61: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

60

版权所有 2010, 1394 Trade Association. 所有权利保留

信道编号对封包而言,功用上有如一个「逻辑卷标(logical label)」,就像是美

国有线电视新闻网(CNN)对特定的电视广播频率来说,乃是一个标签;这是相

同的道理。

且让我们来回顾 1394 标准中,对于等时封包以及异步封包的封包格式定义:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-17)

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-3)

等时封包格式,相当直接了当易于了解;因为仅有一种等时封包的型态。然而,异步

封包却存在有很多型态,图 6.3 显示了其通用格式,其中某些部分的提示乃是列为选

项。

现在,我们必须确定对于底下事项完全理解,没有任何的混淆:

所有的封包、无论是等时与异步封包均透过 1394 总线来传播。

Page 62: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

61

版权所有 2010, 1394 Trade Association. 所有权利保留

异步封包标头中的实体 ID,并不会使得这个封包路由或跟随其它封包。所有

1394 的节点均会留意总线上的数据传输,而当他们察觉到封包中有它们的实体

ID 地址(或者群播),就会将封包接收进来。

一个 1394 节点,仅能够接收包含其实体 ID 的异步封包(包含群播封包)。一个

节点无法「窃听(eavesdrop)」其它节点的数据传输。仅有高度专业且非常昂贵

的仪器装置,称为「1394 总线分析仪(1394 bus analyzers)」才能够接收所有的

异步封包。

异步封包,可以由其接收器来认可。

相反地,等时封包并没有特别寻址给任何节点。

任何具有等时传输能力的 1394 节点,可以接收任何等时封包(透过通道的方

式)。

多个节点可以接收相同通道的等时封包。

等时封包,永远不需要接收器的认可响应。

一个等时通道编号,仅能够在每个周期上出现。

一个 1394 节点可以在每个周期内,传送复数个等时封包,但各个封包必须使用

不同的通道编号。

等时数据传输的本质 (The Essence of Isochronous Traffic)

在列出所有技术定义、规则及其涵义之后,对于整体的了解应当更为清晰。因此,转

移到更高的层次,来进一步探讨 1394 的迷人之处。

当由一台计算机复制数据文件到另外一台计算机时,没有人「在乎」此一操作将占去

多少时间。只要不过于缓慢,是没有人「在乎」的。该档案最终将储存在第二台计算

机中,而且数据是有效的;几个毫秒(ms)或多或少,对于使用者来说并未造成任何差

别。然而,我们在意的是所有数据必须正确地复制到彼端。

相反地,当播放一些音乐,譬如音频串流(audio stream)时,每一个人在乎「下几首」

歌曲能够实时由档案读取,以及这些歌曲可以实时送到音频装置上。如果音频数据有

所毁损,我们可以听的出来。在时间上若是稍有延误或是错误,将导致声音上的差

异。 人类的眼睛并不容易察觉出视讯串流中的视觉差异。比如说,数据少了一个视讯

框(frame),我们也不会注意到。但是如果在于一序列中,3 到 4 个视讯框不见了,则我

们就有可能会发现到。假若某视讯框部分数据未能正确地被译码(或者影像数据坏掉

了),我们或许可能会察觉不出来。

正如我们所见的,不同的数据型态会存在有不同的要求。比如说,像音频串流或是视

讯串流,一般均称为「串流数据(streaming data)」。串流数据除了要实时传送之外,还

有一个同样重要的议题,那就是串流数据的传送速率。

假设要播放一个时间达 1小时的 800MB MPG 之电影档案。该档案储存在硬盘之中。

您复制一个档案的测试副本,仅需要 10 秒钟即可完成。您的计算机相当快速,可以在

10 秒内读取和写入所有的数据。当您开始播放电影、MPG 档案被译码与显示、耗掉

30%的 CPU 效能。这台计算机明显地足够快,那为何会像您的电影一样,存在一个关

于「串流数据」的问题呢?

Page 63: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

62

版权所有 2010, 1394 Trade Association. 所有权利保留

这个问题当然是有其它装置可能被涉入,装置的资源有限、特别是有限的内存缓冲空

间(memory buffers)。您的计算机可能将该电影的所有音频串流于 60 秒内译码完成,然

而此举将会产生大小 200MB 的音频数据。您将无法传送该 200MB 到您的音频装置

上,因为其内存缓冲空间也许仅能容纳 2 秒的声音。那,一些麻烦就开始出现啦。

编写一个软件程序,以硬件装置可以处理的适当速率传送串流数据到该硬件装置上,

而且并未造成任何的失误,未曾早到也未曾晚到,并非一件看起来像那么简单的事

情。此外,产生串流数据到简易的装置上,往往使得事情更加复杂。由于对方也必须

要控制传送速率,否则其接收器超载的资源难以负荷。

因此,串流数据告示了我们两个主要困难点:

1. 数据绝不能够晚到。

2. 数据也绝不能够太快到达。

1394 总线协议提供了等时传输的支持,就是要在同一时间解决这些问题。

假设我们有一个未经压缩(uncompressed)的视讯串流,具有以下特点:

影像大小: 800x600

画素编码(色彩深度 Color Depth) = 每个画素 16位

视讯框速率(Frame Rate):每秒 20 个视讯框(fps)

因此,每个影像框有 800x600=480000 画素,在每一个画素有两个字节色彩深度之下,

每个视讯框会产生了 960000 字节。每一个视讯框必须以二十分之一秒传送,或者每

8000/20=400 周期。

既然我们可以在每一个周期内仅运送一个等时封包,那么,就必须在每一个周期内传

送 960000/400=2400 字节。

相机抓取一个视讯框,将其切割为 400 个 2400字节的封包,然后要求 1394 芯片于等

时信道 8 上传送该些封包。如此一来,就解决了以上之两个问题。

相机也没有什么其它的事情好担心;信任 1394 芯片将尽自己本分工作,并且知道于

400 个周期影像后,就已经被传送;而且是在一个稳定的速率之下(每一个周期一个封

包)进行。

视讯串流的接收器,对此种方案也相当欢迎。对于入门者来说,即使数据比预期还快

到达,也无须去分配额外的缓冲空间。接收器知道确实的数据速率,所以能够事先进

行适当的缓冲区安排。此外,接收器在 20fps 的视讯框速率下,也不用对显示做任何事

情。如果某些视讯框较早到达,则接收器必须「延迟」其显示,使得视频显得更顺

畅。但是,现在接收器知道视讯框架总是按时到而且决不会提前早到。一个新视讯框

到达的时候,恰好也是显示该视讯框的时间。

所以,这就是 1394 为等时数据传输所做的因应处理。 如果一个装置打算产生串流数据

(无论是何种型态的数据),先选择一个信道号码、切割(chop)这个数据成适当尺寸的封

Page 64: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

63

版权所有 2010, 1394 Trade Association. 所有权利保留

包大小、然后将那些麻烦的工作交托给 1394 芯片,该控制器会在每一个周期内忠实地

传送这些封包。1394 协议让芯片保证,绝对能够在每个周期传送一个等时封包。

当然,1394节点并不一定要使用每一个周期来传送等时封包。比如说,在前例中视讯

框的 960000 字节,可能以 3000 字节来包装成封包,那么就需要 320 个周期来传送整

个视讯框。然后,相机将指示 1394 芯片保持闲置,直到额外的 80 周期经过,才会开

始进行下一个视讯框。

等时传输频宽(Isochronous Bandwidth)

很明显地,1394 的频宽并非无限的,所以需要一些更多的协议规则来维持接口的正常

运作。请注意到,这些都是「软式(soft)」规则;1394 标准中描述了这些规则,但是并

未有相对应的硬件机制来执行。所有的 1394 节点多自愿同意遵守:

所有打算传送等时数据传输的 1394 节点,必须分配一个唯一的通道编号(目前

尚未使用的)。这样就可以保证任何信道号码,仅在一个周期内出现一次。

等时传输期间的频宽,不得超过可用频宽的 80%,也就是不应超过 1394 周期

的 80%。因此,每个周期内不会超过 100 微秒。这个 100 微秒由 1394 标准解释

为「4915 频宽分配单元(4915 bandwidth allocation units)」。

每一个打算传送等时数据传输的 1394 节点,必须以配置「频宽分配单元」的方

式来保留等时传输所需要的频宽。这就像是在等时期间,保留了所需期间的

「时间间隙(time slot)」。

如果所有的 1394 节点都遵循了这些规则,则至少有 20%的总线频宽,将可用于异步数

据传输,总线也可正常运行,不会造成问题。

所有以上的叙述,可以针对等时数据传输来做个总结:

时序性的保证 (Guaranteed Timing)。

每 125 微秒,封包确定会传送。

不确保式递送 (Non Guaranteed Delivery)

由于没有认可封包的响应,因此,传送器无法确知接收器是否真正收到数据。

收进来的封包也有可能因为先进先出(FIFO)错误而被丢弃掉。

不公平性 (Unfair)

仅有那些已经分配频宽单元的装置,才被允许传送。

异步数据传输 (Asynchronous Traffic)

如果从较高的层次来探索,异步数据传输所具有的特性与等时传输刚好相反:

保证递送 (Guaranteed Delivery)

几乎所有的情况下,一个认可封包将回应给传送器。

时序性的不保证 (Non Guaranteed Timing)

异步传送的特征是尽力而为来传送。传送器根本不知道封包何时会传送完毕。

Page 65: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

64

版权所有 2010, 1394 Trade Association. 所有权利保留

公平性 (Fair)

所有的装置,都能够传送。

一个额外的特点,异步传输乃是「公平式的仲裁(fair aribitarion)」。每一个节点都可以

得到公平的机会来传送其异步封包。相反地,等时封包传输就是一种不公平的方式:

快到可以先分配频宽的 1394 节点,往往是唯一被允许来传送等时封包者。

正如我们之前所见,一个像是相机的装置通常会准备一组等时封包,然后要求芯片来

传送这些封包。这个动作中的术语,一般称为「等时封包队列(queued)来传送」。

类似的事情也会发生于异步数据传输。当传送器希望载送一个档案到接收器时,譬如

使用诸如 SBP2 高阶传送协议。传送器可能会将许多准备的异步封包做成队列,再进行

异步数据传输。

接下来的情况如下:

1. 1394 芯片进行总线仲裁,乃是为了取得使用权来传送异步封包。当然,仅能在

异步期间进行。

2. 1394 芯片取得仲裁的使用认可,并且开始传送封包。

3. 如果有更多封包需要传送,则进入步骤 1。

当然,总线上可能有其它的节点要进行异步数据传输。因此,其它节点进行完全相同

的程序,而公平式仲裁算法会确保所有节点可享有公平的权力来仲裁。

让我们假设有 10 个节点,具有异步数据传输。如果我们假设所有节点皆有相同尺寸的

封包需要传送,而该尺寸仅允许有两个封包可以容纳在异步期间,那么,10 个节点的

每一个,将于每五个周期传送一个封包!

在实务上,我们通常不会知道其它节点的数据传输负载,因此有时候一个节点会在每

五个周期接收到一个异步封包(像是以上的例子)、有时候于相同的周期内得到 10 个异

步封包 (表示没有其它人需要传送)。

最终的结果是,异步数据传输不具有时序性的保证:我们根本不知道一个异步封包在

其传送之前,究竟须要在队列中等待多久的时间。

异步串流封包 (Asynchronous Stream Packets)

描述于前几个章节,在本文件中值得注意的是,1394 标准对于规则提供了一个特别例

外的情况。

这实在是一个很简单的概念,但是却也很容易导致混淆:

异步串流封包(Asynchronous Steam Packets),乃是具有等时封包格式之封

包(数据交易码=10),并在异步期间来传送。

Page 66: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

65

版权所有 2010, 1394 Trade Association. 所有权利保留

这个原因的探索,已经超出了本文件的描述范围;然而,异步串流封包的概念,很容

易抓住:1394 节点准备了等时封包(也就是具备有等时封包格式的封包),然后,在异

步传送队列中等待,而不是在等时传送队列中;这是一个由 LINK 芯片所允许的动

作。因此,这个等时封包是在异步期间被传送;当然也得遵循异步封包的所有限制,

比如说,公平仲裁、未知的时序等。

相对的例外,是将异步封包安排在等时封包的伫立中,此举却是不被允许的。

异步串流封包的机制,是非常有吸引力的一项特征;特别是当成一个装置-对-主机端的

通报机制,因为,装置不需要知道控制主机端目前的实体 ID。

不过,从接收器的角度观点来查看,对于高阶软件而言,这些封包正如与正常的等时

封包一样。这就意味着接收器必须适当地设定等时接收的 DMA 存取;异步串流封

包,将不会由进行异步数据传输的 DMA 引擎来处理。

Page 67: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

66

版权所有 2010, 1394 Trade Association. 所有权利保留

封包尺寸限制 (Packet Size Restrictions)

数据封包中的数据量,就称为「有效负载(payload)」,它有大小限制无法任意地扩

大。所能允许的最大尺寸,决定于封包的型态(异步封包、等时封包)、以及封包传输速

率。

以下两个图表,显示 1394 标准对于有效负载上的限制:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-4)

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-7)

我们可以注意到,对于等时封包比较有利。等时封包在任何传输速度的最大有效负

载,是相同传输速度下异步封包的两倍。

Page 68: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

67

版权所有 2010, 1394 Trade Association. 所有权利保留

连结层的操作 (Link Layer Operation)

以下系由 1394-2008 标准中撷取而来的状态机(state machine),显示了 1394连结层的操

作流程,类似于流程图:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 6-21)

该图相当复杂,但是我们可以快速地回顾一些范例,并且看到我们之前的描述,如何

对应到该状态图中之内部流程。

状态机由 L0状态开始(异步操作备妥之状态)。

当异步封包被接收,则转换进入 L0:L4 。

Page 69: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

68

版权所有 2010, 1394 Trade Association. 所有权利保留

如有一个正常的异步封包,则切换到 L4:L5、 之后 L5:L6、最后进入 L6:L0,

回到开始之处。

在 L0 状态,一个周期开始封包被接收,则进入路径 L0:L4:L10,此时的状态机

会处于等时操作准备的状态下。然后,开始了等时期间。

如果有一个等时封包要被送出,则会进入 L10:L11:L12 的路径,然后回到 L10

状态。

在某些点,一个子动作指示(subaction indication)发生,并且切换进入 L10:L0 状

态。待这个等时期间结束,我们就必须再度转移到异步期间。

数据交易型态(Transaction types):读出、写入、与锁定(Lock)

在本文件的前端,我们已经讨论过 1394 的寻址模型,并且理解 1394 协议的摘要,描

述了这个总线为一个固定 64 位的地址空间。定义于该模型之操作,就被称为「数据交

易(transactions)」,它可以发生于两个节点之间。这个术语不应该与数据库理论中的

对等描述相互混淆。1394「数据交易」与数据库「处理」是完全没有共通之处。对于

1394 来说,「数据交易」是与数据交易层(transaction layer)具有相同的涵义。

无庸置疑,数据交易系以异步封包来进行的。

在 1394-2008 标准中,列出了可以运用的数据交易处理型态:

数据交易层在节点之间,提供了三种数据传送的操作方式:

a) 写入数据交易(Write transaction)—数据被传送到一个不同节点的一个

地址。

b) 读取数据交易(Read transaction)—数据由一个不同节点的一个地址取

得。

c) 锁定数据交易(Lock transaction)—数据被送到一个不同的节点,用来

进行一个不可分割的功能(indivisible function),然后返回结果。

这些不同的数据交易型态,会被映像到异步封包标头中的不同数据交易码(transaction

code)。

一般而言,每个数据交易会被分割为「交易要求(transaction request)」封包以及一个相

互对应的「交易响应(transaction response)」封包。交易响应封包,在其封包标头中有

其本身的数据交易码。

一般的程序如下:

1. 节点 A 传送交易要求给节点 B。

2. 节点 B 认可该交易要求。

3. 节点 B 根据该要求进行一些必要处理。

4. 节点 B 传送一个交易响应给节点 A。

在步骤 2,这个认可响应可能是「否定的」。表示节点 B 不能接收该要求封包,因此

结束这个数据交易。

Page 70: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

69

版权所有 2010, 1394 Trade Association. 所有权利保留

如果该封包被接收,那么节点 B 将会检查这个要求的「有效性(validity)」,然后进行

所要求的处理,并且响应一个「成功」的响应码,或者是响应一个「失败」响应码来

拒绝该操作。

在这个交易要求被传送以及被认可后,直到接收到交易响应之前,节点 A 会认定这个

交易仍在「尚未了结(pending)」的状态。

节点 B 的另外一个选项,是都不要做任何回应! 在这种情况下,节点 A 将自动「超时

(timeout)」掉,并且怀疑是否节点 B 有任何差错。多数地场合,没有返回交易响应封

包,通常表示了节点 B 的内部有某种错误发生。

这里应该特别强调的是,所有该些「数据交易」,都是属于数据交易层等级的动作。

并没有任何硬件机制迫使传送一个响应,而且任何数据交易多必须适当地配合。事实

上,节点 A 可自由地直接送出一个交易反应封包给节点 B;节点 B 会正常地接收封

包,检查该封包并且了解该封包并没有悬而未决的要求,于是将之舍弃。

Page 71: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

70

版权所有 2010, 1394 Trade Association. 所有权利保留

CSR 模型(Model)

诚如前面陈述,FireWire 遵循了 IEEE 标准 1212-2001 的命令及状态缓存器(Command

and Status Register, CSR)架构。我们也陈述,1394 协议使用了固定 64 位地址,其中的

高 16 位作为「外部(external)」地址,而较低的 48位则是作为「内部(internal)」地址。

IEEE 1212 所描绘此模型之图式如下:

(Copyright IEEE. Used with permission. Identical to IEEE 1212-2001 Figure 4)

我们已经从 1394-2008 标准中见过非常类似的图式。不难看出,该 48「内部」地址位

可以更进一步被划分为「缓存器空间」(20 位)以及「CSR 偏移」(28 位)。这个内部划

分法的主要用意是为了组织化的原因,用来创造出一些内部要遵循的法则,可以说是

一种「软式(soft)」分割。OHCI控制芯片,可能为在低地址的缓存器空间提供一些稍

微不相同的功能,但考虑本文献的所有实务目的,我们可以假设一个 CSR 地址使用了

全部的 48 位。

什么是一个命令及状态缓存器(Command and Status Register, CSR)呢?乍看之余,似乎

这个术语很通用很基本且微不足道,因此 IEEE 1212 标准与 IEEE1394-2008 标准皆未

有清楚的定义。显然地,每个人都知道什么是「缓存器」。因此,可以这么说,CSR

系一缓存器,可以用来执行命令与回报结果。作者不知是否会有所遗漏,但这会是我

们进行讨论的开始。

在 1394 模型中,CSR 基本上是一个与特定 48 位偏移联系在一起的「软件 5迷你模

块」,就如同于一个中断处理器与中断号码之间的密切关系。当一个具特定 48 位偏移

的异步要求封包到达时,装置驱动程序会先检查是否有任何的软件迷你模块与该偏移

有相关连。如果为否,该封包就会被丢弃。如果为是,该封包就会交给软件迷你模块

来进行处理。

____________________

5 或者是韧体(firmware)。

至于这个「软件迷你模块」做什么,是毫不相关的。它仅是进行 CSR 规范要求要做的

事情。譬如说,可能会从相机读取一些信息,并传回状态信息。或者是对相机做开始

Page 72: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

71

版权所有 2010, 1394 Trade Association. 所有权利保留

或停止的动作,这类动作往往归类为「命令」。当然,也可能做以上两件事情。当接

收到读取数据交易请求时,即会响应「状态」;当接收到一个写入数据交易请求时,

就会进行动作。

不使用「软件模块」,而是采用「软件迷你模块」的字汇术语来表示,主要的原因是

大部分的系统中,较大的「软件模块」与许多不同的 48 位偏移有所牵连;所以,当具

有其中一个偏移的封包来到之时,软件模块中的某些部分就会来处理。

通常,一个 CSR 的大小为一个 quadlets,也就是四字节。底下图式显示了技术标准中

描述 CSR 部分操作的惯用方式:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 7)

第一列显示了 CSR 内部的位字段的整体定义,而其它列则是用来表明 CSR 是如何初始

化、读取数据交易、或写入数据交易。

底下是从 IIDC 标准中撷取而来的一个 CSR 范例:

这是一个非常简单的 CSR。仅有一个位被定义,其余的位皆为保留(reserved)。

Page 73: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

72

版权所有 2010, 1394 Trade Association. 所有权利保留

组态(Configuration ) ROM & GUIDs

之前图式提到关于 1394的地址空间,我们看见了内存空间的部分被标注为「组态

(configuration)ROM」。这是一个特殊用途的内存区块,包含了对于节点机能的延伸信

息。也仅有可以进行数据交易的节点,需要来建构该组态 ROM,比如主机配接器、相

机、硬盘装置等。该组态 ROM 的架构,系用分层的方式来构成,如下图所示:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 8-18)

若是从内存的布局来看:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 8-20)

其中的总线_信息_区块(Bus_Info_Block)非常重要,显示如下:

(Copyright IEEE. Used with permission. Identical to IEEE 1394-2008 Figure 8-21)

这个 Bus_Info_Block 的最后两个 quadlets,包含了所谓的"GUID",乃是「Globally

Unique Identifier)」的简称。该 GUID 系由 24 位的「厂商识别码(Vendor ID)」以及一个

40 位的「芯片识别码(Chip ID)」所组成。事实上,制造商必须在该字段中储存唯一的

数值;因此,不会有两个装置具有相同的 64 位 GUID 值。

GUID,通常是被软件用来当总线重置后,识别装置用,因为实体 ID 可能会变化。

Page 74: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

73

版权所有 2010, 1394 Trade Association. 所有权利保留

数据交易型态 (Transaction types)

1394‑ 2008 标准,也根据执行上的特性来对数据交易做分类:

7.3.2.1 一元化数据交易 (Unified transaction)

一个一元化数据交易,其定义系为一数据交易,以认可请求子动作(acknoeldged

request subaction)为始,但其后并不会追随着响应子动作(response subaction)。仅有写入数据交易,才可以正常地完成一元化数据交易。读取数据交易以及锁定数据交易,并不能正常完成一元化数据交易。

7.3.2.2分割式数据交易 ( Split transaction)

一个分割式数据交易,其定义系为一数据交易,以认可请求子动作为始,其后会跟随着认可响应子动作。读取数据交易、写入数据交易、以及锁定数据交易,都可以进行分割式数据交易。在要求子动作以及响应子动作之间,可以发生其它的子动作。

7.3.2.3连锁式数据交易 ( Concatenated transaction)

一个连锁式数据交易,其定义系为一数据交易,以认可请求子动作为始,其后立即跟随着相对应的认可响应子动作,两者之间并没有子动作间隔的存在。读取数据交易、写入数据交易、以及锁定数据交易,可以进行连锁式数据交易。连锁式数据交易,在要求子动作以及响应子动作之间,不可以发生其它的子动作。

7.3.2.4 群播数据交易(Broadcast transaction)

一个群播数据交易,其定义系为一数据交易,仅包含一个未认可请求子动作。只有写入数据交易可以进行群播。读取数据交易以及锁定数据交易不可以进行群播。

7.3.2.5 未决的数据交易 (Pending transaction)

一个未决的数据交易,其定处系指尚未完成的数据交易。

基本上来说,大部分的数据交易多为分割式的数据交易。传送器送出一笔需要获得认

可的数据交易请求,其它事情接着发生,然后目标接收端传回一个交易响应。

于某些情况下,目标接收端能够在交易请求封包之后立即传送响应封包,并未使总线

有机会让给其它节点传送数据。这就是所谓的连锁式(Concaenated)数据交易。

而一元化(Unified)交易,视为写入数据交易的特殊情况。传送器送出写入交易请求,而

目标接收端传回一个很特殊的认可码,代表着「此数据交易已经完成,但是没有要送

出进一步回应」。

置于群播数据交易以及未决的数据交易,已经在文件前头有所叙述与交代。

Page 75: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

74

版权所有 2010, 1394 Trade Association. 所有权利保留

直接内存存取 (DMA)

当 FireWire 首先进入市场时,不同的厂商提供了不同 LINK 层功能的建构方案。这些

差异不仅存在于这些芯片内部,外部的接口也可能有差别。您需要不同的软件程序代

码来与每一个 LINK 芯片与配接器沟通,而配接器上的硬件可能有不同的电子设计。

此点对于软件工业还是硬件工作者,当然是非常不理想的情况。所以,当 Firewire 获

得市场的认同有足够的动力之际,LINK 芯片的外部接口马上被标准化为今日尽所皆知

的「1394 OHCI」。OHCI 的涵义,就是开放式主机控制器接口(Opern Host Controller

Interface),其它的接口技术诸如 USB,也有类似的标准。技术上来说,「1394

OHCI」是用来不让混淆发生,然而我们正处于一个 1394 特定的背景环境,将 1394

LINK 芯片称呼为 OHCI 芯片,并使用共同的表现方式,好如说,「OHCI 传送一个封

包」来代表着「1394 连结层藉由 OHCI 芯片,来传送一个封包」。

为主机控制器提供一个 1394 接口,并非一件容易的事情,特别针对高性能科技像是

FireWire。

试问一个简单的问题:「当一个封包被接收时,该封包应该储存于何处?」

有两个可能的答案:

1. 封包被储存于线路板上的内存,然后,配接器触发一个中断。主机端软件就会

处理该中断,并将该封包复制到主存储器上。

2. 使用 DMA 直接内存存取的方式,封包直接被储存在主存储器中。在完成之

后,配接器触发一个中断通知主机端软件,一个新的封包可用。

对于封包的送出,也有相同的选项可加以利用:

1. 封包被主机端软件复制到线路板上的内存中。然后,软件会告知配接器来传送

该封包。

2. 使用 DMA 方式,配接器直接由主存储器读取封包,然后传送该封包。

使用线路板上内存的选项有下列缺点:

究竟要配置多少内存空间在线路板上,才不会发生内存不足的窘状?

将内存配置在线路板上也需要额外的电路,使得线路板成本变得昂贵而且可靠

度降低。

通常复制线路板内存封包到主存储器,或者相反方向,相对于 DMA 方式,速

度慢了许多。

如此的数据复制通常由系由 CPU 来执行,有较高的 CPU 利用率;或者是利用

所谓的系统 DMA 控制器来执行,但 DMA 控制器非随时可用,并且也较慢。

然而,装置直接读取或写入内存的选项也是相当复杂,因为芯片在于主机控制器的总

线上,一般为 PCI总线,必须能够担当为「总线主控器(Bus Master)」的角色,而且能

够进行「总线主控 DMA (Bus Mastering DMA)」。这就代表着该装置必须有能力处理

PCI协议、并且根据 PCI 协议来启动和控制来去主存储器的传送。

Page 76: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

75

版权所有 2010, 1394 Trade Association. 所有权利保留

总线主控 DMA 方式,有效地提升了效能,但是需要更多复杂的芯片。这也就是较早

的以太网络适配卡或是配接器,会使用线路板上内存处理的原因。当今较为昂贵的

GigE6配接器,可以有 DMA 的能力。

FireWire,为一个高效能总线,没有选项,仅能标准化 OHCI为一个总线主控 DMA 芯

片。以下以 OHCI 1.1 规范的概念方块图来说明此特点:

一些缩写语(acronyms)值得先来澄清:

AR 异步接收 (Asynchronous Receive)

AT 异步传送 (Asynchronous Transmit)

IR 等时接收 (Isochronous Receive)

IT 等时传送 (Isochronous Transmit)

由该图式中,我们可以看出 OHCI芯片连接或说桥接 1394 总线到主机总线。OHCI芯

片操作,乃是逻辑上被组织成几个「DMA 引擎」,每个致力于一种特定型态的 1394

封包。

于该概念图式中,我们可以看出不同的 FIFOs、特殊用途的内存、该内存的大小通常

介于 2K 至 8K 之间;也就是在等待主机总线可传送至主存储器的认可时,封包数据会

暂时缓冲在这些内存中。这些内存没有获得完整的封包,就启动 DMA 传送到主机内

存。当封包还依然在接收时,封包数据是以一个区块一个区块的方式传送到主机端内

Page 77: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

76

版权所有 2010, 1394 Trade Association. 所有权利保留

存。相反的数据传输方向,也发生同的情况。也就是说,当封包被传送至 1394 总线

时,送出的封包由主存储器一个区块一个区块地移动到适当的 FIFO 上。

DMA 内文 (Contexts) & 内文程序 (Context Programs)

本段落将尝试以最简短的方式,来叙述 OHCI芯片的操作。OHCI 1.1 规格中陈述下面

段落 1.3.2,标题为「DMA」:

1394 开放式 HCI 支持几种型态的 DMA。每一种 DMA 型态均有保留缓存

器空间,而且可以支持至少一个不同的逻辑数据串流(distinct logical data

stream),乃称为一个 DMA 内文(context)。

每一个异步以及等时内文,系由以一个缓冲器描述符列表(buffer descriptor

list)所组成,即称为 DMA 内文程序,乃储存于主存储器中。DMA 内文程

序内的缓冲器指定,就是经由 DMA 描述符。

因此,一个「DMA 内文」就是一个不同的逻辑数据串流。事实上,将 DMA 内文想象

成 OHCI芯片内的下属 CPU 将会有助于了解。事实上是,一个执行引擎,一个小 CPU

执行一段程序。这个程序,就被称之为 DMA 内文程序。如此的程序看起来会是怎样?

通常像是这样的(以 AR 为例子):

1. 当一个高达 4K 的封包到达时,您可以在主存储器中实体地址为 0xFFA04B00 接收第一个 1024 字

节、于 0xFEED2000 接收 3072 字节。当封包接收完成时,引发 AR 中断。

2. 当一个高达 4K 的封包到达时,您可以在主存储器中实体地址 0xFFA619C0 接收第一个 1600 字

节、于 0xFBE23000 接收 2496 字节。当封包接收完成时,引发 AR 中断。

3. 当一个高达 4K 的封包到达时,….. …

99. 至步骤 1

至于,封包在主存储器中必须被分割成复数个位置的理由,乃是与虚拟内存系统有所

关连;其中,在一个连续虚拟内存空间的内存缓冲区,实际上可能被分割跨越多个物

理内存分页。

是谁为所有 DMA 内文准备 DMA 内文程序的指令?在 PC 的情况下,是 1394 装置驱动

程序这样做的。对其他形式的装置,比如说相机,装置的韧体程序就需要准备该内文

程序。

Page 78: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

77

版权所有 2010, 1394 Trade Association. 所有权利保留

最受到关注的地方,乃是等时接收内文(isochronous receive context)的操作。诚如上面

表格所示,至少有四种内文。在这种情况下,软件程序一直在期待从相机送来的视讯

框(video frame),该视讯框是以等时传输方式来传送。这个软件已经对相机做组态配置

一些特定的视频格式(video format)以及等时通道编号。也就是说软件是先知道接收一

个视讯框的确切字节数量、等时封包大小还有每个视讯框的封包数量。

因此,软件会配置一个适当大小的缓冲区空间,并要求装置驱动程序准备一个 DMA

内文程序给其中一个等时接收 DMA 内文,该 DMA 内文将会接收预期数量的等时封

包,直接放进缓冲区。因此,当视讯框被接收时,会直接放入应用程序的内存缓冲

区,没有额外的内存复制或是任何主机 CPU 的涉入。这就是 FireWire 比起其它竞争技

术所具有的明显优势。

在该范例中,应该要搞清楚的是,软件必须知道相机影像画素传送的顺序,因此,在

内文程序中能够适当地提供内存位置。

例如,假设相机由上至下传送影像,则第一个 DMA 内文的指令将指向缓冲区的开始

处、第二个指令在该开始处的后面一点(意即一整个封包有效负载)等,而最后一个指令

将指向缓冲区最后处的一个封包有效负载。

如果,相机是从下至上传送影像,则第一个 DMA 内文的指令将指向缓冲区最后处的

一个封包有效负载,第二个指令为缓冲区最后处的两个封包有效负载之前等,而最后

一个指令将指向缓冲区的开始处。

IIDC 相机,乃是由上而下来传送其影像,但这只是 IIDC 标准中的一个惯例(convention)

罢了。

Page 79: FireWire 参考讲解 信息指南 - 1394 Trade Association · 2014-10-29 · FireWire™ 参考讲解 (信息指南) January 22, 2010 摘要 本文件系提供给之前对FireWire

78

版权所有 2010, 1394 Trade Association. 所有权利保留

串行总线管理 (Serial Bus Management)

串行总线管理这个术语,系指 1394 协议模型中的一个「分层(layer)」,负责一些更高

层次的运作,用来维护总线在一个可以正常操作的状态。

1394 总线上的许多节点,多有能力来进行串行总线管理分层所要担当的职责;但是,

在任何的一个时间点上,仅能够有一个节点可以扮演「串行总线管理者(Serail Bus

Manager, SBM)」的角色。

在总线重置过程完成之后,即是正常的数据传送;所有可以担负 SBM 任务的节点,会

进行一个具有明确定义的角逐竞争,其中会有一个赢家。这个赢家就是被选为当做

SBM。

串行总线管理的一些工作细节列出如下:

确定总线能够进行等时传输;也就是周期主管的节点就是根节点。

将总线效能特性做最佳化的处理;好比说,间隔记数(gap_count)参数。

建构 BUS_MANAGER_ID, BANDWIDTH_AVAILABLE,

CHANNELS_AVAILABLE, 以及 BROADCAST_CHANNEL 缓存器。

在大部分的 FireWire 系统中,SBM 服务其实就是由 PC 个人计算机来担负。