应用笔记 186

利用1-Wire®器件建立全球标识符


摘要 : 随着以太网技术的出现,媒体存取控制(MAC)源地址和目标地址变得更加重要。这些唯一的标识符在数据传输中需要指定起点和终点,本文说明了如何利用普通和定制1-Wire器件的优势,建立并管理用于以太网等技术领域的唯一的标识符。本文介绍了各种标准,其中包括用于全球唯一标识的IEEE®标准。所讨论的特殊标识符有:MAC-48标识符/EUI-48全球标识符格式、EUI-64全球标识符格式、FC-PH IEEE 48位标识符格式、FC-PH IEEE扩展标识符格式、FC-PH IEEE注册名格式、以及FC-PH IEEE注册扩展名格式。

绪论

随着微处理器的推广和硅芯片价格的下降,基于微处理器的计算机迅速得到普及。很快,人们将计算机与多处理器系统相连接,通过并行计算以便更快地解决问题。接着是建立一个本地网,以实现资源共享以及有效利用多处理器并行处理的优势。

应用最广泛的本地局域网络(LAN)技术是二十世纪七十年代初期Xerox发明的以太网。1983年,电气和电子工程师协会(IEEE)发布了以太网技术的第一个IEEE标准。该标准规定数据按照帧格式传输,每帧都含有一个目标文件和源文件的中介存取控制(MAC)地址。很显然,要使网络发挥作用,这些地址就必须是唯一的。这就要求有一个全球公认的中心组织为感兴趣的成员分配可利用的数字。

1986年,在P802 (LAN/MAN)标准组的基础上成立了IEEE注册管理局,负责注册有组织的唯一标识符(OUI)。OUI或“company_id”是根据不同标准分配的、全球唯一的24位码。该数字用来生成能够唯一识别LAN位置的48位通用LAN MAC地址、以及用来生成识别公用网或专用网协议的协议标识符。它还能用来识别硬件供应商和I/O软件接口的结构。相关的标准包括CSMA/CD、Token Bus、Token Ring、FDDI和Fibre Channel。

OUI只决定了地址或标识符的一部分。在IEEE已经注册了一个OUI的公司负责正确地分配标识符的其余字节。表面上看这是一件容易的事情,但其中也有一些棘手问题:
  1. 保持标识符的唯一性(任何数字不能重复)
  2. 经济地使用可利用的数字范围
  3. 获取唯一的、装载到网络接口控制器中的数字
为保证唯一性需要有一个中央记录系统跟踪迄今为止用过的所有数字。因为IEEE只有在所有数字的90%以上用于产品后,才会给制造商分配另一个OUI或company_id,所以,一种明智的选择是把可利用的数字划分为几个区域,以便识别同一制造商生产的不同类型的网络产品。但这样做也会带来区域之间出现数字重迭的风险,与保持标识符唯一性的需求相悖。

一旦唯一性的问题解决了,就必须把数字装载到网络控制器。这就要求每个单元有一个不同的数字编码被写入非易失(NV)存储器内,它可以是专用芯片、也可以是微控制器或PLD中一些未用过的寄存器。对于传统的程序设计而言,这意味着要为每个芯片装载一个新的数据模式。这对于原型设计之后的规模生产来说是不可接受的。

随着二十世纪九十年代初期1-Wire芯片的引入,尤其是用户定制产品的出现,Dallas Semiconductor (现在是Maxim Integrated的子公司)定义并建立了一个内部序列号跟踪系统,完善地解决所有上述问题。本应用笔记解释了如何利用通用或专用1-Wire器件的优势创建并管理唯一的标识符。

IEEE标识符格式

后续部分中的范例基于IEEE网站上的信息,特别是下列文件:
  • Guidelines for Use Of 24-Bit OUI/company_id Identifiers Within 48-Bit Global Identifier (EUI-48) and 64-Bit Global Identifier (EUI-64) When Defined By New Applications (2001年5月31日版)
  • Guidelines for Use Of A 48-Bit Global Identifier (EUI-48) (2001年5月31日版)
  • Guidelines For 64-Bit Global Identifier (EUI-64) Registration Authority (2001年5月31日版)
  • New identifier formats based on IEEE registration (2001年1月16日版)
  • Tutorial: Use of the IEEE Registration Authority assigned “company_id” with the ANSI X3.230 FC-PH Fibre Channel specification and its extensions (1997年2月24日版)
这些文件中的术语并不统一,因此我们编译了一个术语表(表1)来解释文章中出现的各种技术术语。下面重新画出了所参考的IEEE文件中的原文描述、并用不同颜色表示以区分不同目的字段、突出其共性。字节的计数与IEEE文件中采样的方式相同。尽管本应用笔记中的范例基于IEEE标准,但其方法对那些需要一个唯一字段(“序列号”)与一些固定数据字节相组合、或只是一个唯一字段的应用都有效。

表1. 术语表
文档中用到的术语 文档 说明
有组织的唯一标识符OUI MAC-48 24位标识符,由IEEE注册管理委员会分配给公司。与company_id相同。
company_id EUI-48, EUI-64, PC-PH 24位标识符,由IEEE注册管理委员会分配给公司。与OUI相同。
24位扩展标识符 MAC-48 由注册了OUI的公司分配和管理的唯一24位数字。
24位扩展标识符 EUI-48 由注册了company_id的公司分配和管理的唯一24位数字。
40位扩展标识符 EUI-64 由注册了company_id的公司分配和管理的唯一40位数字。
MAC-48标识符(图1) MAC-48 LAN 的48位的MAC (网络地址) 。该值中高24位是OUI,低24位是扩展标识符。
EUI-48全球标识符(图1) EUI-48 用于识别特定设计的48位标识符,与特定硬件标识相对照。该值中高24位是company_id,低24位是扩展标识符。
EUI-64全球标识符(图2) EUI-64 用于识别产品的每个特定硬件的64位标识符,与应用无关。其中高24位是company_id,低40位是扩展标识符。
压缩后的MAC-48值 EUI-64 将MAC-48标识符“伪装”为EUI-64标识符,作为EUI-64全球标识符进行传输。40位扩展标识符的高16位置为FFFFh。
压缩后的EUI-48值 EUI-64 将EUI-48标识符“伪装”为EUI-64标识符,作为EUI-64全球标识符进行传输。40位扩展标识符的高16位置为FFFEh。
全球范围命名 FC-PH 基于IEEE company_id的64位或者128位的标识符。
NAA值 FC-PH 全球范围命名的高4位,表示FC-PH格式的名称,它由后续的60位、也可能存在第二个64位部分组成。
ULA字节 FC-PH 通用LAN MAC地址,等效于MAC-48地址。ULA的第0到第2字节对应于company_id/OUI;而ULA第3到第5字节与扩展标识符相对应。
12位供应商指定字段 FC-PH ULA字节的扩展,用于区分节点的不同端口
36位供应商指定标识符 FC-PH 唯一表示节点、N_Port、F_Port、Fabric或其它对象的标识符。
64位供应商指定标识符扩展 FC-PH 节点产生的子标识符,用于识别与对象有关的所有Fibre Channel。
IEEE 48位标识符格式(图3) FC-PH 将EUI-48全球标识符“伪装”为64位FC-PH全球范围命名。 NAA值1h后接000h, 置于EUI-48标识符之前。
IEEE扩展标识符格式(图4) FC-PH 基于六个ULA字节和12位供应商指定字段的64位FC-PH全球范围命名。NAA值2h后接供应商指定字段,置于ULA第0到第5字节之前。
IEEE注册名格式(图5) FC-PH 64位FC-PH全球范围命名。NAA值5h后接company_id和36位供应商指定字段。
IEEE注册扩展名格式(图6) FC-PH 128位FC-PH全球范围命名。NAA值6h后接company_id、36位供应商指定字段和64位供应商指定扩展标识符。

MAC-48 (图1)是IEEE标准最早期的标识符。它由3个字节的OUI和3个字节的扩展标识符组成,对任意给定的OUI ,该标识符都必须是唯一的。EUI-48标识符与MAC-48在技术上是相同的。只是EUI-48中识别公司的3个字节称为“company_id”。OUI 的实际值与company_id相同,顺序与定义存储器映射标识符的ISO/IEC存储器寻址顺序相同。该标识符的最高有效字节存储在低位地址单元。

图1. MAC-48标识符/EUI-48全球标识符格式
图1. MAC-48标识符/EUI-48全球标识符格式

虽然EUI-48标识符的数量很多,但仍是有限的。正是由于这个原因,建立了EUI-64。如图2所示,扩展标识符扩展到了40位,可利用数字扩展到了1677.7万(相当于24位)乘以65536。对字节可寻址的媒介而言,其顺序与各字节相对应的地址相同。该标识符的最高有效字节存储在低位地址单元。

图2. EUI-64全球标识符格式
图2. EUI-64全球标识符格式

为了能够将48位标识符移植到基于全球唯一的64位标识符OUI/company_id的单一模式,IEEE规定制造商扩展标识符的前四个数字不能是FFFFh或FFFEh 。这些保留的代码用于把MAC-48和EUI-48标识符当作EUI-64标识符压缩和传输。代码FFFFh表明MAC-48标识符;FFFEh表明压缩后的EUI-48标识符。

介绍Fibre Channel时,在ANSI X3.230-1994和ANSI X3T11文件中定义了四个附加的64位标识符。对FC-PH标识符格式来说,“顺序”没有明确的定义。格式也没有指定有效位或字节;而是指定了位数。在下面的Fibre Channel格式描述中,第0位是最低有效位;而第63位是最高有效位。

在MAC-48标识符前加入1000h可以导出FC-PH IEEE 48位标识符的格式,如图3所示。只要以1000h打头的company_id用的不是EUI-64格式,它就是安全的。否则,无法从EUI-64标识符区别出FC-PH IEEE 48位标识符。用ULA可取代company_id和扩展标识符,它们在技术上并没有太大差别。

图3. FC-PH IEEE 48位标识符格式
图3. FC-PH IEEE 48位标识符格式

FC-PH IEEE扩展标识符格式(图4)与FC-PH IEEE 48位标识符非常相似。这些标识符不是以代码1000h开始,而是以‘2’打头,后面跟随3个数字的VSID字段和一个供应商指定标识符。因为以‘2’打头的company_id不分配,因此不会造成混乱。从技术上讲,VSID可看作是对扩展标识符的扩展,使用户可以控制36位数据,比EUI-64标识符格式少四位。

图4. FC-PH IEEE扩展标识符格式
图4. FC-PH IEEE扩展标识符格式

按照FC-PH IEEE注册名格式(图5),12位VSID是连续的36位供应商指定标识符的一部分。因此,company_id前移了12位。这类标识符以‘5’打头,因为以‘5’打头的company_id不被分配,所以这样可以避免与EUI-64标识符相冲突。与上述所有标识符相比,这种格式中固定数据与变化的供应商指定字段或扩展标识符之间的分界线恰好位于字节的中间。

图5. FC-PH IEEE注册名格式
图5. FC-PH IEEE注册名格式

FC-PH IEEE注册扩展名格式总长为128位。除了起始数字‘6’之外,前64位(图6)与FC-PH IEEE注册名称的格式相同。因为以‘6’打头的company_id不被分配,所以FC-PH IEEE注册名与EUI-64标识符不会出现混淆。第二个64位数据块(图中没有画出)称为供应商指定标识符的扩展。对第二个数据块没有格式限制。

图6. FC-PH IEEE注册扩展名格式(第一块)
图6. FC-PH IEEE注册扩展名格式(第一块)

硅片中IEEE标识符的实现

如图1至图6所示,所有标识符都由以下三部分组成:
  • IEEE分配的24位company_id
  • 由IEEE注册、公司保持的24位、36位、40位或100位变量(唯一的)
  • 由标识符类型确定的、附加的4位或16位常量
为了获得标识符,常量位可以结合company_id构成标识符中的固定部分。

利用1-Wire器件,有两种基本方法获取标识符:
  1. 通用1-Wire器件的ROM注册码的序列号中取出最低有效24位,利用固件按照格式添加IEEE company_id,按照格式要求加上剩余位即可得到完整的标识符。注意只能采用统一的器件类型码(即同一家族代码),否则会增大出现重复IEEE标识符的风险,因为每一种器件类型的序列号都是从0开始递增,如果不考虑家族代码,那么DS2401和DS2502会具有相同的序列号。
  2. 用户定制的1-Wire器件ROM注册号中提取完整的MAC-48/EUI-48标识符
每种方法都有其优点和缺点,如表2所述。

表2. 方案对照
方法 优点 缺点
通用器件 •可以与任意具有64位ROM注册码的1-Wire器件共用

•比定制器件成本低

•订货期短

•最小定购量:1个或1卷
•不能控制序列号

•要求固件有专用功能来产生完整的标识符

•因为ROM序列号的低24位不是唯一的,所以存在标识符重复的风险
定制ROM器件 •直接实现MAC-48/EUI-48标识符

•容易设置—只需填写表格
•订货期长(12周)

•需要固件产生与MAC-48/EUI-48不同的格式

•分期支付设置费用要求较大的生产批量

•最小起定量高,具体数量取决于器件类型

所有具有网络功能的1-Wire器件都有一个唯一的64位ROM注册码。注册码从8位家族码开始,随后是48位的二进制序列号,最后8位是前56位的循环冗余校验码(CRC)。读取注册码时,接收到的字节依次是:家族码、序列号的第一个字节( = 最低有效字节)、第二个序列号字节,……,第六个( = 最高有效字节)序列号字节、CRC校验码字节。首先传送每个字节的最低有效位。

在二进制计数中,24位所能表示的最大数值相当于十进制的16777215。给定一个家族码,只要对应有不超过16777215个数字,序列号低24位就是唯一的。在这种情况下,可以安全地利用它来产生IEEE标识符的变化部分,如图7所示。

图7. 从通用器件产生标识符
图7. 从通用器件产生标识符

注册扩展名第二数据块的64位格式(图中未画出)通过软件控制产生。

工作过程为:从序列号取最低24位,利用固件添加丢失部分。表面上看起来很简单,但要有效利用EUI-64标识符中扩展标识的16个附加位、VSID字段或是FC-PH标识符格式中供应商指定标识符的12个附加位,会需要额外的花费和开销。可能需要对PLD或微处理器进行不同的编程以便用所期望的变量代码填充附加位。这可能只是一个辅助性工作,或者可以将成本计入ROM掩码中,取决于相关技术。

简单建立标识符的常用芯片是DS2401硅序列号。这种型号至今已生产了1600万件。因此,48位序列号的低24位不再是唯一的,这就存在重复出现IEEE标识号的风险。作为一种选择,人们可以考虑筛选、并终止那些低产出的通用器件。但是,这并不保证当前产量较低的器件会在将来的某一天需求超过1600万,因此也有可能存在重复的24位代码。

图8. 定制ROM与通用器件的比较
图8. 定制ROM与通用器件的比较

在定制ROM器件中,48位序列号分为三个部分,分别称为定制ID、用户定义子字段和序列号(图8)。定制ID一般是12位,Maxim在注册时分配这个字段,可以唯一地识别该部分是为哪个用户建立的。用户定义的子字段可以是8位(选项A)、12位(选项B)或16位(选项C)。为了将通用器件从定制ROM器件中区分出来,定制ROM器件的家族代码的最高有效位置为‘1’。

如果定制ID和子字段相结合构成IEEE company_id,则选项B的排列类似于MAC-48/EUI-48标识符的格式。选项C从序列号移出了四位给户定义的子字段。这就允许把1670万个MAC-48/EUI-48标识符分为16块,每块大概是一百万个。

从直接读自定制ROM芯片的MAC-48/EUI-48标识符,能够进一步产生IEEE标识符,如图9所示。与通用器件的主要区别是芯片已经提供了company_id (或多或少的加以调整)。对一些格式的附加12位或16位的利用与通用器件相同。定制ROM器件与通用器件相比,其优势在于它能够控制序列号,这就保证定制ID、子字段和家族码的组合是唯一的。

图9. 从定制ROM器件产生标识符
图9. 从定制ROM器件产生标识符

注册扩展名第二数据块的64位格式(图中未画出)通过软件控制产生。

定制ROM的设置和定购指南

为获得定制器件需要填写单页的Custom ROM Registration Form (即“定制ROM注册表”)。该表可以向Maxim的客户服务部索取,电话是1-972-371-6824 (美国),传真是1-800-992-1884 (美国)。表中需要填写地址、选择器件和封装类型、注明是否需要卷带包装。在ROM选项B的用户定义子字段中填写IEEE company_id的三个最低有效数字。为了声明你申请了一个特定的Maxim定制ID,在“Maxim Use Only”一栏的CID字段中填写company_id的三个最高有效数字。然后,按照表中的传真号或电子邮件地址将文件发给Maxim。

Maxim定制ID是按照数字的顺序进行分配的,是从000开始递增的十六进制数。根据IEEE注册数据库,95%以上的company_id是从000到040开始的,这也是DS2401占用的定制ID范围。为解决这一问题,填注册表的时候要指定Maxim定制ID从1xx到Fxx的范围,并打算能够通过固件修改那些与company_id不匹配的位。在大多数情况下,定制ID的其余两个数字会与相应的IEEE company_id匹配;子字段中任何数据都适合。

一旦达成关于Maxim定制ID的协议,需将不低于最小订购量的订单和设置费用递交到Maxim客户服务部,以确保定制器件的及时注册。注册完成后,你将会收到所定购的特定器件型号。定制ROM器件不能撤销、不能退还。

根据保存company_id的IEEE方针,有必要把1670万个数字分成几个部分,使不同的产品线可以共用数字库,也可以用来指示不同的产品版本。为了使这种划分渠道畅通,申请ROM选项C比较明智。用户定义的子字段中IEEE company_id的三个最低有效数字的位置仍然与选项B相同。子字段的低四位(最右端)确定范围。这样可以分成16个范围、每个范围大概有一百万个器件。最初的设置费用包括一个范围。当占用更多的范围时可能需要附加费用。每个数据范围对应有自己的器件型号。不同数据范围的器件铭牌也不一样,这样可能无需读取数据就可识别出器件属于哪个范围。

1-Wire器件接口

因为只需要一根数据线和参考地线,所以1-Wire器件易于接口。大多数1-Wire器件甚至没有VCC引脚,它们从数据线获得能量。图10是一个简单的1-Wire接口,它适用于双向端口,如与8051兼容的微处理器的漏极开路端口0。读取1-Wire器件的协议由软件控制产生。有关包括软件例程在内的1-Wire接口的详细讨论请参见应用笔记74:“Reading and Writing 1-Wire® Devices Through Serial Interfaces”。有关双读模式接口的介绍,这种接口在应用电路的电源断开时可以利用外部的阅读器来读1-Wire器件,参见应用笔记178:“利用1-Wire产品标识印刷电路板”。

图10. 最简单的1-Wire接口
图10. 最简单的1-Wire接口

应用范例

应用笔记178:“利用1-Wire产品标识印刷电路板”中描述了MxTNI™板的电子标示特征,MxTNI板实际带有一个以太网地址,存储在DS2502-E48芯片中。图11说明了从专用MxTNI板如何读取数据。该数据模板的注册码是00001129。扩展标识符是0093B8。Dallas Semiconductor的IEEE company_id是006035,它可以用IEEE注册数据库进行验证。因为以太网地址只占用了一页存储器,所以其余的三个存储器页可以在不追加费用的情况下用于鉴别电路板。

图11. DS2502-E48以太网地址
图11. DS2502-E48以太网地址



参考文献