所提供的API包括:TMEX (Microsoft Windows® API)、1-Wire公共文件资源(一种跨平台API)、Java1-Wire API (OWAPI)及其变形.NET 1-Wire API (OW.NET)和精简型.NET 1-Wire API (OW.NET.Compact)。本文所描述的所有API都是免费的,而且大多数情况下还包括完整的源代码。
引言 包括iButton在内,Maxim目前生产的1-Wire器件已有30多种。如何选择已有的应用程序接口(API)、软件范例及其它资源与这一类器件进行通信,或为某个器件选择正确的资源是一件非常令人头疼的事。本应用笔记提供了该类资源的概述和选择指南。本文中所描述的所有API都是免费的,而且大多数情况下还包括完整的源代码。
1-Wire概述 1-Wire总线是一种简单的信号交换架构,通过一条线路在主机与外围器件之间进行双向通信。所有的1-Wire总线都具有一个共同的特征:无论是芯片内还是iButton内,每个器件都有一个互不重复的、工厂光刻的序列号,因此,每个器件都是唯一的。这样就允许从众多连到同一总线的器件中独立选择任何一个器件。当1个、2个甚至多个1-Wire器件能共用一条线路进行通信,可以采用二进制位检索法依次查找每一个器件。一旦器件的序列号已知,通过寻址该序列号,就可以唯一地选出该器件进行通信。
所有通信的第一步都需要总线控制器发出一个复位信号以使总线同步,然后选择一个受控器件进行随后的通信,这可以通过选择所有的受控器件或者选择一个特定的受控器件(利用该器件的序列号进行选择),或者通过对半检索法找到总线上的下一个受控器件来实现。上文所提到的这些指令都是网络指令或者只读存储器(ROM)指令。一旦一个特定的器件被选中,那么在下次复位信号发出之前,所有其它器件都被挂起而忽略随后的通信。
一旦一个器件被用于总线通信,主机就能向它发出特定的器件指令,对它进行数据读写。这是因为每类器件具有不同的功能和不同的用途,而且一旦器件被选定,就有了唯一的协议。虽然每类器件具有不同的协议和特征,但其工作过程却是相同的并且遵循如图1所示的工作流程。
图1. 典型的1-Wire通信流程
每个受控器件的序列号的整数部分是一个8位的家族代码。这个代码对器件模型来说是特定的。因为每种器件模型执行不同的功能,所以可以用代码来选择用于控制或者查询器件的协议。表1是Maxim 1-Wire器件型号家族代码。
表1. 家族代码对照
家族代码 | 器件 () - iButton封装 |
说明 (除非特别说明,存储器尺寸以位为单位) |
01 (hex) | (DS1990A), (DS1990R), DS2401, DS2411 | 仅1-Wire网络地址(注册码) |
02 | (DS1991)¹ | 多密钥iButton,1152位安全存储器 |
04 | (DS1994), DS2404 | 4Kb非易失RAM存储器及时钟、定时器和闹钟 |
05 | DS2405¹ | 单路可编址开关 |
06 | (DS1993) | 4Kb非易失RAM存储器 |
08 | (DS1992) | 1Kb非易失RAM存储器 |
09 | (DS1982), DS2502 | 1Kb EPROM存储器 |
0A | (DS1995) | 16Kb非易失RAM存储器 |
0B | (DS1985), DS2505 | 16Kb EPROM存储器 |
0C | (DS1996) | 64Kb非易失RAM存储器 |
0F | (DS1986), DS2506 | 64Kb EPROM存储器 |
10 | (DS1920) | 带报警门限的温度检测 |
12 | DS2406, DS2407¹ | 1Kb EPROM存储器,2路可编址开关 |
14 | (DS1971), DS2430A¹ | 256位EEPROM存储器和64位OTP寄存器 |
1A | (DS1963L)¹ | 带写周期计数器的4Kb非易失RAM存储器 |
1C | DS28E04-100 | 4096位 EEPROM存储器,2路可编址开关 |
1D | DS2423¹ | 带外部计数器的4Kb非易失RAM存储器 |
1F | DS2409¹ | 2通道可编址耦合器,用于子网络 |
20 | DS2450 | 4通道A/D转换器(ADC) |
21 | (DS1921G), (DS1921H), (DS1921Z) | Thermochron®温度记录仪 |
23 | (DS1973), DS2433 | 4Kb EEPROM存储器 |
24 | (DS1904), DS2415 | 实时时钟(RTC) |
27 | DS2417 | 带中断的RTC |
29 | DS2408 | 8路可编址开关 |
2C | DS2890¹ | 单路数字电位器 |
2D | (DS1972), DS2431 | 1024位1-Wire EEPROM |
37 | (DS1977) | 密码保护的32KB (字节) EEPROM |
3A | (DS2413) | 2路可编址开关 |
41 | (DS1922L), (DS1922T), (DS1923), DS2422 | 大容量Thermochron (温度)和Hygrochron™ (湿度)记录器 |
42 | DS28EA00 | 可编程分辨率的数字温度计,具有顺序检测和PIO |
43 | DS28EC20 | 20Kb 1-Wire EEPROM |
¹不推荐在新的设计中使用这些器件。
API基础 1-Wire通信器件的不同应用程序接口(API)有着许多共性,反映了协议的基本数据通信原理。图2是根据不同API功能进行的分类。因为大多数1-Wire器件具有存储器,尽管存储器输入输出功能并不适用于所有的器件,我们还是把它们视为一个通用API集。其它所有不具备存储器专用功能的划分为一类-专用器件集。
会话 |
独占使用1-Wire总线。这对于操作系统或几个进程或线程尝试同时使用同一总线的情况下是非常重要的。当多项操作在同一器件上运行而又不能被打断的时候,需要独占总线的使用权。 |
链路 |
基本的1-Wire总线通信功能。所有的1-Wire总线通信功能可以归结为:复位所有的器件和读写位。这也包括设置总线电特性的功能,如提供专用的EPROM编程脉冲或进行供电。 |
网络 |
查找和选择器件的网络功能。每个1-Wire器件都有一个固定的序列号,作为它的唯一的网络地址。这些功能可以通过链路层功能进行构造。在1-Wire器件数据资料中将其称为ROM指令,这是因为序列号是只读的。还有一些1-Wire控制器包括一些内置功能,因为它们比通过链路功能进行构造有效得多。 |
传输 |
块通信和基本的存储器读/写功能。这还包括存储器信息包读/写功能。这些功能是通过网络层和链路层功能构造的。 |
文件 |
使用1-Wire文件结构(参考应用笔记114:“1-Wire File Structure”)的文档存储层功能。这些功能是通过网络层和传输层功能构造的,且只对使用多页存储器的器件有效。 |
器件 |
专用器件的‘高层’功能。这些功能通常是通过网络、传输和链路类功能构造的,并执行诸如读取温度值或设置开关状态等操作。 |
图3概括了使用这些功能的典型顺序。SESSION功能围绕着调用器件进行通信,具有代表性的是先使用一个NETWORK功能,然后运行存储器或DEVICE的特定操作。
图3. API用法流程
iButton通信实质上是通过与其触头相‘接触’来实现的。这意味着与器件的联系有时是不可靠的。iButton也可能被安装到阅读器里,在阅读的时候弹出,从而必须有一个相容的纠错方法紧跟其后。当检测到虚假错误时必须重发数据并在数据通信中进行CRC校验。API中的文件输入输出功能所利用的标准文件结构在应用笔记114:“1-Wire File Structure”中的1-Wire File Structure部分进行了详细说明。这种结构在每页数据上都使用CRC16,以快速地校验所读数据的正确性。大多数1-Wire API功能很少或者不能自动重发。重发受应用软件控制,请参见应用笔记159:“在iButton®应用中通过软件方法实现可靠的1-Wire®通信”,其中讲述了纠错方法和1-Wire通信的风险评估。
API的选择 本文主要列举了五种不同的应用程序接口(API)。这些API运行在不同的工作平台上,使用不同的语言,具有不同的性能。表2简要地描述了这五种API;表3说明了按语言划分的可利用API及其操作系统。
表2. API概述
API | 缩写 | 说明 |
1-Wire公共文件资源 | PD | 源代码完全开放的C语言公共文件资源API,设计用于在多种PC操作系统、手持设备操作系统和微控制器平台之间移植。对于PC平台,通过本地驱动程序库在Microsoft Windows系统上支持所有的1-Wire适配器(主机);利用跨平台库来支持其它PC操作系统上的特定1-Wire适配器(DS9097U串行适配器和DS9490 USB适配器)。 |
Java 1-Wire API | OWAPI | 完全公开的、高级Java API,支持几乎所有的1-Wire器件。除了支持本地1-Wire主机外,它还可通过跨平台库来支持DS9097U串行适配器和DS9490 USB适配器。 |
.NET 1-Wire API | OW.NET | OWAPI代码基于Microsoft的.NET框架下的J#。 |
精简型.NET 1-Wire API | OW.NET.Compact | 用于Windows CE计算机或平台的精简型.NET框架不包含Microsoft Visual J#®发行套件,目前只包含与C#接口的底层1-Wire链路和网络层。 |
TMEX API | TMEX | 在Windows平台(32位和64位)上支持所有的1-Wire主适配器。提供链接和文件输入输出功能,但不包括访问器件的功能。驱动程序是不公开的资源。这种API可以被其它的API调用来访问所有类型的1-Wire适配器。 |
表3. API操作系统和语言适用范围
语言 | TMEX /OW.NET/OW.NET.Compact (与Microsoft Windows语言无关) |
C | Java |
操作系统 | |||
Windows Vista® | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows Vista x64 | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows XP | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows XP x64 | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows 2008 | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows 2008 x64 | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows 2000¹ | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows ME¹ | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows 98¹ | TMEX /OW.NET/OW.NET.Compact | PD | OWAPI |
Windows 95¹ | TMEX | PD | OWAPI |
Win3.1¹ | TMEX | PD | |
DOS¹ | TMEX | PD | |
Pocket PC/CE | OW.NET.Compact | PD | |
Linux®和其它基于UNIX®的操作系统 | PD | OWAPI | |
TINI* | PD - 无TINI操作系统 | OWAPI |
¹不再进行支持,之前的驱动程序仍可从Maxim网站下载。
API不同,器件族的支持亦不同。表4列出了目前所有可利用的1-Wire器件,并用标志说明它们受哪种API支持。标志的注释在表4的底部。注:表中无阴影的器件单元全部受API支持。浅色阴影的单元表示部分地受API支持,而深色阴影单元表示受API支持最少。
表4. 器件支持的API
器件 | 族号 | 说明 | TMEX | PD | OWAPI | OW.NET | OW.NET Compact |
DS1982 | 09 | 1Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS1985 | 0B | 16Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS1986 | 0F | 64Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS1904 | 24 | RTC | AB | AB | ABI | ABI | AB |
DS1920 | 10 | 带报警输出的温度传感器 | AB | ABI | ABCI | ABCI | AB |
DS1921G DS1921H DS1921Z |
21 | Thermochron温度记录器 | ABDE | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS1922L DS1922T DS1923 |
41 | 高存储容量Thermochron (温度)和/或Hygrochron (湿度)记录器 | AB | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS1963L¹ | 1A | 带写周期计数器的4Kb NV RAM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1971 | 14 | 256位EEPROM存储器和64位OTP寄存器 | ABD | ABCDI | ABCDI | ABCDI | AB |
DS1972 | 2D | 1024位EEPROM存储器 | AB | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
|
DS1973 | 23 | 4Kb EEPROM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1977 | 37 | 口令保护的32KB (字节) EEPROM | AB | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1990A DS1990R |
01 | 只有1-Wire地址 | AB | AB | AB | AB | AB |
DS1991¹ | 02 | 多密钥iButton, 1152位加密存储器 | AB | ABC | ABC | ABC | AB |
DS1992 | 08 | 1Kb NV RAM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1993 | 06 | 4Kb NV RAM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1994¹ | 04 | 4Kb NV RAM存储器和时钟、定时器、闹钟 | ABDE | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS1995 | 0A | 16Kb NV RAM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS1996 | 0C | 64Kb NV RAM存储器 | ABDE | ABCDE | ABCDEF GH |
ABCDEF GH |
AB |
DS2401 | 01 | 只有1-Wire地址 | AB | AB | AB | AB | AB |
DS2405¹ | 05 | 单路开关 | AB | ABI | ABI | ABI | AB |
DS2404¹ | 04 | 4Kb NV RAM存储器和时钟、定时器、闹钟 | ABDE | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS2406 DS2407¹ |
12 | 1Kb EPROM存储器,2路可编址开关 | ABCE | ABCDEI | ABCDEI | ABCDEI | AB |
DS2408 | 29 | 8路可编址开关 | AB | ABI | ABI | ABI | AB |
DS2409¹ | 1F | 双路开关,耦合器 | AB | ABI | ABI | ABI | AB |
DS2411 | 01 | 只有1-Wire地址 | AB | AB | AB | AB | AB |
DS2413 | 3A | 双路可编址开关 | AB | ABI | ABI | ABI | AB |
DS2415 | 24 | RTC | AB | AB | ABI | ABI | AB |
DS2417 | 27 | 带中断的RTC | AB | AB | ABI | ABI | AB |
DS2422 | 41 | 高存储容量Thermochron (温度)/Hygrochron (湿度)记录器 | AB | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS2423¹ | 1D | 带外部计数器的4Kb NV RAM存储器 | ABDE | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS2430A¹ | 14 | 256位EEPROM存储器和64位OTP寄存器 | ABD | ABCDI | ABCDI | ABCDI | AB |
DS2431 | 2D | 1024位EEPROM存储器 | AB | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS2450 | 20 | 四路ADC | AB | ABI | ABI | ABI | AB |
DS2502 | 09 | 1Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS2505 | 0B | 16Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS2506 | 0F | 64Kb EPROM存储器 | ABCE | ABCDE | ABCDE | ABCDE | AB |
DS2890¹ | 2C | 单路数字电位计 | AB | AB | ABI | ABI | AB |
DS28E04-100 | 1C | 4096位EEPROM存储器、两路可编址开关 | AB | ABCDEI | ABCDEF GHI |
ABCDEF GHI |
AB |
DS28EA00 | 42 | 分辨率可编程的数字温度计,带有顺序检测和PIO | AB | AB | AB | AB | AB |
DS28EC20 | 43 | 20Kb EEPROM | AB | AB | AB | AB | AB |
阴影标志 | 支持标志说明 |
全部支持 | A. 支持1-Wire简单连接 B. 支持1-Wire网络 C. 支持存储器的字节读写 D. 支持存储器的包读写 E.支持AA型1-Wire文件结构(关于文件结构类型的信息,请参见应用笔记114:"1-Wire File Structure") F. 支持AB型1-Wire文件结构 G. 支持BA型1-Wire文件结构 H. 支持BB型1-Wire文件结构 I. 支持其它专用器件 |
部分支持 | |
很少支持 |